함수와 프로시저

  • 함수 ( Function )
  • 사전적 의미 : 기능, 행사, 함수, 의식
    기능 : 정해진 일(능력)을 수행하는 것, 작용하는 것
    특정 계산을 수행하며 리턴 값이 존재하고 반드시 수식 내에서만 사용가능 하고 |
    함수 단독으로 문장을 구성할 수 없다.

  • 프로시저 ( Procedure )
  • 사전적 의미 : 절차, 과정, 순서, 방법
    절차 : 일을 하는데 거쳐야 하는 일정한 순서와 방법
    방법 : 목적을 이루기 위한 수단이나 방식
    특정 작업을 수행하며 리턴값이 없다. 단독으로 문장의 구성이 가능하다 (C의 void 함수가 해당)

  • 함수란?
  • 목적에 의해서 수행 요구
    목적에 대한 결과가 존재하는 것
    입력 값을 정확히 해야 정해진 결과를 도출하는 것

  • 기본형식 : 
  • type name(parameter list)
    {
        함수의 본체
    }
    name : 함수의 이름 이 이름을 통해 함수를 호출. 함수의 이름도 명칭을 만드는 규책대로 기억하기 쉽고 의미를 잘 표현할 수 있는 것이 좋다.
    parameter list : 함수의 인자 값 
    type : 반환값 : 함수가 리턴하는 값읠 데이터 형. 함수의 작업결과
    본체 : {} 실제 함수의 코드. 함수의 고유 기능을 수행!!! 




함수의 선언과 정의

  • 선언(declaration) : 널리 알리는 것
    main 함수 위에 어떠한 함수를 미리 사용하겠다고 알린다.

  • 정의(definition) : 명백히 밝혀서 구체화
    main 함수 아래에 기능을 제대로 수행할 수 있는 기능을 수행

  • 예시

    진한 녹색 : 실인수
    갈색 : 형식인수 (가인수)


함수의 호출 방식

  • 값의 의한 호출 ( Call by Value )
    함수 호출 시에 해당 함수에 인자 값들이 존재하면 실인수의 값을 형식인수(가인수)에 복사하여 넘겨주게 된다.
  • 함수에 포함된 형식인수의 값이 변화하여도 실인수에는 아무런 영향을 미치지 않는다.

  • 주소에 의한 호출 ( Call By Reference )
    함수 호출 시에 해당 함수에 인자 값들이 존재하면 실인수가 가지고 있는 주소(포인터) 를 형식인수(가인수) 또한 같이 가리키게 된다. 
    실인수가 가지고 있는 주소(지점,포인터)라 한다. 형식인수가 같은 주소를 가리키고 있기 때문에 함수 안에 형식인수에 변화를 주게 되면 실인수에도 영향을 끼치게 된다.





함수와 프로시저가 존재한다.

함수와 프로시저의 개념과 각각의 명칭에 대해 정확히 알기

프로시저는 함수의 바디 부분에 해당하는 부분의 순서도이다.

출처 : soen.kr



'언어 > C' 카테고리의 다른 글

표준함수  (0) 2016.03.19
기억부류  (0) 2016.03.19
연산자  (0) 2016.03.14
제어문  (0) 2016.03.13
getch / getche / getchar / putchar / puts  (0) 2016.03.11


연산자의 종류

  • 데이터 : 불규치학게 널려 있는 여러가지 형태의 수치나 문자열. 사실적인 정보.
    정보 : 데이터를 가공하여 사용할 수 있도록 정리된 유용한 것

     기능별 종류 

     연산자

     산술 연산자

     + - * / %

     부호 연산자

     + -

     대입 연산자

     = 복합 대입 연산자

     관계 연산자

     == != <= < >= > 

     증감 연산자 ++ -- 
     포인터 연산자 * & [] 
     구조체 연산자 . -> 
     논리 연산자 || && ! 
     비트 연산자 | & ~ >> <<

     삼항 조건 연산자

     : ?

     쉼표 연산자

     ,

     sizeof 연산자

     sizeof

     캐스트 연산자

     (type)type()

     괄호 연산자

     ()

     C++ 연산자

     new delete :: .* ->*



산술 연산자

  • 산술 연산자
        - 더하고 곱하고 빼고 나누는 가장 기본적이고 또한 가장 많이 사용 되는 연산자

        - 일상해서 주로 사용하는 연산자
        - +, - 기호와 평상시에는 X를 쓰지만 알파벳과 비슷해 *를 사용
        - ¸ 기호를 사용하지만 없어서 / 를 이용 
        - /의 경우 피연산자의 파입에 따라 다르다
        - 피연산자가 모두 정수형이면 결과도 정수형
        - 피연산자 중 실수형이 있으면 결과도 실수형이다.

  • 대입연산자
        - 변수에 어떤 값을 집어 넣는 동작이며 대입 연산자는 변수의 값을 변경할 때 사용
          (예시 : i=1 / i 라는 값에 1을 대입한다 라는 뜻)
        - 좌변에는 항상 변수만 올 수 있다.
          (실제적인 메모리를 점유하고 있고 값을 바꿀 수 있는 대상)
          1=a+2; / a+b = 4 와 같은 형태는 불가능.
        - 연산자의 리턴값
        


a=5; b=5; c=5; 를 줄이면


a=b=c=5; 와 같은 형태로 줄일 수 있다.

  • 복합 대입 연산자 
        - 대입연산자와 다른 연산자가 결합된 연산자
         a = a+3; => a+=3;

  • 증감 연산자
        - 피연산자를 1씩 증가 시키거나 감소 시킨다
        - 루프의 제어 변수처럼 순서대로 어떤 작업을 할 때는 변수값을 하나씩 증감시키는 경우가
           많아 별도의 연산자 장치가 마련 (++ : 증가, --  : 감소)
        - 전위형(Prefix) : 증감연산자가 피연산자 앞에 위치 ( ++a, --a )
        - 후위형(Postfix) : 증감연산자가 피연산자 뒤에 위치 ( a++, a-- )
        - 다른 언어에는 없는 C 언어의 아주 독특한 연산자이며 사용해 보면 아주 편리
       


논리 연산자

  • 관계 연산자
        - 피연산자를 두 개 취하는 이항 연산자이며 좌변과 우변을 비교하여 같은지, 다른지, 다르면
          어느 쪽이 더 큰지 조사


 연산자 

 조건

 ==

 좌변과 우변이 같다.

 !=

 좌변과 우변이 다르다.

 >

 좌변과 우변보다 크다.

 <

 좌변과 우변보다 작다.

 >=

 좌변과 우변보다 크거나 같다.

 <=

 좌변과 우변보다 작거나 같다.


  • 논리 연산자
        - 주로 관계 연산자와 함께 사용되며 두 개 이상의 조건식을 결합하여 하나의 진리 값을 만든다
        - ! 연산자는 조건식 하나를 피연산자로 취하는 단항연산자로서 조건식을 반대로 바꾼다
          결과 : 거짓 => 참 / 참 => 거짓

 연산자 

 조건

 !

 좌변과 우변이 같다.

 &&

 좌변과 우변이 다르다.

 ||

 좌변과 우변보다 작거나 같다.


- && 연산자와 || 연산자는 두 개의 논리식을 피연산자로 가지는 이항 연산자
  두 논리식의 값을 정해진 규칙에 따라 결합하여 하나의 진리 값(아래 참고할 진리표)


 좌변 논리식 

 우변 논리식

 && 연산자

 || 연산자

 1

 1

 0

 0




  • 비트 연산자
        - 논리 연산자와 비슷하지만 비트를 연산 대상으로 한다는 점이 다르다.
        - 비트란 기억장치의 최소 단위로서 1 또는 0을 기억하면 8개의 비트가 모여야 1바이트

 연산자 

 설명

 ~

 비트를 반전 시킨다. 

 & 대응되는 비트가 모두 1일 때 1이다. 
 | 대응되는 비트가 모두 0일 때 0이다.

 ^

 두 개의 비트가 달라야 1이다. 

 <<

 지정한 수 만큼 왼쪽으로 비트들을 이동시킨다. 

 >>

 지정한 수 만큼 오른쪽으로 비트들을 이동시킨다. 


 b1

 b2

 b1 & b2

 b1 | b2

 b1 ^ b2

 ~b1

 0

 1

 0  0 

 0

 1

 0

 1

 0  1  0  1 

 1

 0 

 0

 1

0

 0

 1

 1 

 1  1 

0

 0


  • 쉬프트 연산자
        - 비트들을 지정한 수 만큼 좌우로 이동시킨다.
        - >> 연산자는 오른쪽으로 이동시키며 << 왼쪽으로 비트들을 이동시킨다.
       


<우측이동 쉬프트>                               <좌측이동 쉬프트>

  • 쉬프트 연산과 곱셉
        - 쉬프트를 왼쪽으로 한칸 해보면 입력한 수의 정확하게 2배 되는 값이
          출력 5를 입력하면 10, 100을 입력하면 200이 출력
          a << b == 1 * 2^b
            

  • 회전 연산
        - 쉬프트 연산과 유사한 비트 조작 명령
          쉬프트는 비트를 선형으로 이동시키는데 비해 회전 연산은 원형으로 이동시킨다.
          비트 이동에 의해 밀려나는 비트는 버려지지 않고 반대쪽으로 다시 이동.
          <rotl, rotr 함수 사용>



기타 연산자

  • 삼항 조건 연산자 : (조건식)? 값1:값2
    다른언어에는 없는 C언어의 톡특한 연산자
    조건식의 값이 참이면 값1 거짓이면 값를 리턴
    if문을 이용해서도 변환이 가능하다.

  • 쉼표연산자 : , 사용, 
    피연산자로 양쪽에 두 개의 표현식을 취해 좌변->우변 순서로 평가하고 우변의 연산 결과를 리턴
    두 개의 표현식을 하나로 합칠 수 있다.

  • sizeof 연산자
    sizeof(타입 Or qustn)
    피연산자로 int, double같은 타입이나 변수를 이용하거나 상수를 사용할 수도 있다.

  • 캐스트 연산자
    (타입)변수 => C언어타입
    타입(변수) => C++ 타입
    수식 내에서 변수의 타입을 강제로 다른 타입으로 변경


연산 규칙

  • 연산 순위

    순위

    연산자

    결합순서

    1

    ( ) [ ] -> .

    왼쪽 우선

    2

    ! ~ ++ -- + -(부호) *(포인터) & sizeof 캐스트

    오른쪽 우선

    3

    *(곱셈) / %

    왼쪽 우선

    4

    + -(덧셈, 뺄셈)

    왼쪽 우선

    5

    << >>

    왼쪽 우선

    6

    < <= > >=

    왼쪽 우선

    7

    == !=

    왼쪽 우선

    8

    &

    왼쪽 우선

    9

    ^

    왼쪽 우선

    10

    |

    왼쪽 우선

    11

    &&

    왼쪽 우선

    12

    ||

    왼쪽 우선

    13

    ? :

    오른쪽 우선

    14

    = 복합대입

    오른쪽 우선

    15

    ,

    왼쪽 우선


  • 결합 순서
        - 수식 내에 같은 종류의 연산자가 있을 때 어떤 방향의 연산을 먼저 수행할 것인가를 지정
        - 다른 종류의 연산자에 대한 실행 순서인 반면 결합순서는 같은 연산자 또는 같은 순위
            내의 다른 연산자의 실행순서 지정
    (double)(unsigned)i; 의 경우 unsigned => double

  • 산술 변화
        - 데이터 타입이 조금 다른 변수 끼리라도 자동으로 변호나 가능한 연산을 허용



연산자는 산술, 논리, 기타 등으로 구성된다

연산 규칙에는 순위와 결합순서 산술변화 등으로 구성된다.                                                                     

출처 : Soen(soen.kr)



'언어 > C' 카테고리의 다른 글

기억부류  (0) 2016.03.19
함수와 프로시저  (0) 2016.03.18
제어문  (0) 2016.03.13
getch / getche / getchar / putchar / puts  (0) 2016.03.11
printf 서식문자  (0) 2016.03.10


조건문(if문)

  • 주어진 조건에 따라 명령의 실행 여부를 결정하는 문장. 프로그램이란 항상 동일한 결과만 출력하는 것이 아니라 다양한 상황을 판단하여 다르게 동작하기도 한다. 

  • if (조건) 명령;
    괄호안에 조건을 쓰고 이 조건이 만족할 떄 실행할 명령을 괄호 뒤에 작성.

 연산자 

 조건

 ==

 좌변과 우변이 같다.

 !=

 좌변과 우변이 다르다. 

 >

 좌변이 우변보다 크다.

 <

 좌변이 우변보다 작다.

 >=

 좌변이 우변보다 크거나 같다.

 <=

 좌변이 우변보다 작거나 같다.

  • 예시 ( 제어문 순서 )

  • if(조건1) 명령1; else if (조건2) 명령2; else 명령3;




반복문 (for문)

  • 비슷한 명령들을 여러번 실해앟는 제어 구조
    컴퓨터가 처리하는 데이터가 원래 반복적인 성격을 가지고 있기 때문에 많이 사용 된다.

  • for(초기식;조건식;증감식) 명령
  • 다중 반복문 (for문의 반복)


반복문(while문)

  • for문과 유사한 반복문이되 성격이 다르다.
    기본 형식 : while(조건) 명령;
    if문의 경우 한번의 조건만 판단하여 명령의 실행여부를 결정하지만
    while문은 조건이 만족하는 동안 명령을 실행한다.

  • do 명령; while(조건)
    do 다음의 명령을 while의 조건이 만족하는 동안 반복적으로 실행

  • for문 while문 do~while 문 비교


switch문

  • 다중선택문 하나의 변수 값을 평가하여 각 값에 대해 개별적인 처리 지정.
    switch (변수)
    {
        case 1:명령1;break;
        case 2:명령2;break;
        ....
        case n:명령n;break;
        default:명령;break.
    }

  • 동작 원리


그 외

  • goto 지정한 곳으로 무조건 점프 하는 제어문
    제어로 움직일 곳을 here: 이런 형태로 레이블이라는 것으로 표식을 단다.
    블록의 끝을 제외한 모든 곳에서 이동이 가능 하다. (단, 같은 함수 내에서만 가능)



  • break : 반복 문이나 switch문 내에서 루프를 강제로 벗어날 때 사용.
    for문 혹은 while문 내에서 break가 사용되면 조건식의 진위여부에 상관 없이 루프를 탈출한다.

  • continue : 루프의 나머지 부분을 무시하고 조건 점건부로 점프하여 루프의 다음 값을 실행


반복문과 선택 다중선택 문이 존재한다.

for문 while문 do~while문은 반복문에 해당하고
if문과 if~else문 if~else if~else 문 그리고 switch문이 존재한다.

반복문 또한 if문의 반복과 goto 함수(괄호의 처음으로 가는 함수)가 동작하도록 
내부구성이 되어있다.
그 외에 goto,break,continue 등 반복문과 if문, switch문에서 사용되는 제어문이
존재한다.

출처 : soen(soen.kr)

연습과제

0314_if_exam.c



'언어 > C' 카테고리의 다른 글

함수와 프로시저  (0) 2016.03.18
연산자  (0) 2016.03.14
getch / getche / getchar / putchar / puts  (0) 2016.03.11
printf 서식문자  (0) 2016.03.10
변수와 상수  (0) 2016.03.08

+ Recent posts