ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (c언어) 2. 제어문
    C언어 문서화 2016. 3. 6. 23:59
    반응형

    <IF>

    if. 해석은 "만약 ~한다면."

    흔히 조건문이라고 하는 if는 이렇게 쓴다:

    if <조건> 명령;

    여기서 연산자를 짚고 가자.

     (관계)연산자

    조건

     우선순위

    (좌변)==(우변)

    좌변과 우변이 같다

    2

    !=

    좌변과 우변이 다르다

    >

    좌변이 우변보다 크다

    1

    <

    좌변이 우변보다 작다

    >=

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

    <=

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


    (산술)연산자 

    기능 

    사용 예 

    우선순위 

    *

    곱셈

    3*7 

    /

    나눗셈

    3/2     (연산결과 1)

    3.0/2.0  (연산결과 1.5)

    %

    나머지

    (정수연산자)

    10%4  (연산결과 2)

     +

    덧셈

    7+3

     -

    뺄셈

    3-5


    (논리)연산자

    기능

    사용 예

    우선순위

    !

    피연산자의 값이 참이면 거짓으로, 거짓이면 참.

    re = !a

    1

    &&

    두 피연산자의 값이 모두 참이면 참, 하나라도 거짓이면 거짓.

    re=a && b

    re=a>10 && b<20

    2

    ||

    두 피연산자의 값이 하나라도 참이면 참, 아니면 거짓.

    re = a||b

    re = a>10 || b<20

    3

    (||에서 |는 shift+\입니다)


     (증감)연산자

    기능

    사용 예

    ++

    피연산자의 값을 1 증가

    a++ -> a=a+1

    ++a -> a=a+1

    --

    피연산자의 값을 1 감소

    (피연산자의 값을 -1 증가)

    a-- -> a=a-1

    --a -> a=a-1

    ++a와 a++의 차이점 : ++a는 그 즉시 a에 +1을 하는 것이고, a++은 쉽게 말하자면 1을 더하는게 a++가 나오고 난 후부터 적용되는 것이다.

    예를 들자면 : 

    #include <stdio.h>

    int main(){

    i=7;

    printf("%d %d\n", i++,i);

    return 0;

    }

    결과 : 

    8

    이런식으로 말이다.


     (대입)연산자

    기능

    사용 예

    =

    우변의 결과를 좌측 변수에 기억

    a=b+c

    +=

    a=a+b

    a+=b

    -=

    a=a-b

    a-=b

    *=

    a=a*b

    a*=b

    /=

    a=a/b

    a/=b

    %=

    a=a%b

    a%=b

    이런 연산자들은 [조건]에 많이 쓰일 것이다.


    다시 돌아와서 if의 예제를 한번 보자.

    #include <stdio.h>

    int main(){

    int i;

    printf("i를 입력하세요 : ");

    scanf("%d", &i);

    if(i==7){

    printf("7을 입력했습니다.\n");

    }

    return 0;

    }

    이 예제의 순서도를 그려보자면 아래와 같다. (출처 : soen.kr)


    ※TIP※ : 제어 문자

    \n : 줄바꿈

    \t : tab의 거리만큼 칸을 띄운다

    \a : 삑소리를 낸다.

    \\ : \를 출력한다.


    다음은 if의 짝꿍, else if와 else이다.

    이들의 사용 방법은 다음과 같다:

    1. if ~ else

    if(조건){

    명령1;

    명령2;

    ...

    }

    else{

    명령 3;

    명령 4;

    ...

    }

    2. if ~ else if ~ else

    if(조건){

    명령1;

    명령2;

    ...

    }

    else if(조건){

    명령3;

    명령4;

    ...

    }

    else{

    명령 5;

    명령 6;

    ...

    }

    if~else는 먼저 if문을 실행한 다음, if문의 조건이 참일때(=if문의 조건의 값이 0이 아닐 때)는 if문만 실행하고 빠져 나온다. 하지만 if문의 조건이 거짓일때(=if문의 값이 0일 때)는 if문을 건너 뛰고 else문으로 간다.


    if~else if~else는 먼저 if문을 실행한 다음, if문의 조건이 참일때는 if문만 실행하고 빠져 나온다. if문의 조건이 거짓일때는 다음 else if문의 조건을 확인한다. 참이면 그조건의 명령을 실행하고, 거짓일 떄는 다음 else if을 확인한다. 모든 else if의 조건이 거짓일 때, else문을 실행한다.


    <for>

    1+2+3+4+5+6+7+8+9+10의 값은 무엇일까?

    대부분이 반사적으로 55를 답할것이다.

    그럼 1+2+3+4+5+...+100의 값은 무엇일까?

    계산이 조금 힘들지만 5050이 나올 것이다.

    그럼 1+2+3+4+5+...+1000000의 값은 무엇일까?

    인간이 일일히 계산하기에는 시간이 너무 많이 소요된다.

    그래서 나온 것이 바로 이 for.

    for문은 c에서 가장 기본적인 반복문이다. 

    이렇게 쓰면 된다:

    for([초기식];[조건식];[증감식]){

    명령1;

    명령2;

    ...

    }

    [초기식] 자리에 변수의 값을 초기화 해준다.

    [조건식] 자리에 반복되는 조건을 써준다.

    [증감식] 자리에 변수의 증가와 감소 여부와 값을 써준다.

    프로그램 실행 순서는 

    [초기식] -> [조건식] -> 명령들 -> [증감식] -> [조건식] -> 명령들 -> [증감식] -> [조건식] -> ... -> [조건식](만약 이게 거짓이라면 => for문 종료) -> ...

    이런식이다. 필자는 이렇게 이해했다. : [초기식]에서 시작해서 [조건식]이 맞나 확인. 그리고 명령 수행 후  [증감식]에 따라서 변수를 바꿔준다.

    <※팁 : for문에서 세미콜론 사이사이에 있는 [초기식], [조건식], [증감식] 은 없어도 되고 많아도 된다.>


    예시를 하나 들어서 찬찬히 뜯어보자.

    #include <stdio.h>                    //(1)

    int main(){                              //(2)

    int i;                                  //(3)

    for(i=0;i<5;++i){               //(4)

    printf("hello~\n");    //(5)

    }

    return 0;                          //(6)

    }

    (1) 헤더파일 stdio.h를 포함시켰다.

    (2) 메인 함수 시작.

    (3) i라는 정수형 변수 선언.

    (4) for문 시작 : i의 초기값은 0, i가 5 미만인지 확인. 결과는 참이므로 (5) 실행 후 ++i.

          다시 아직도 i가 5 미만인지 확인. 참이므로 (5)실행 후 ++i.

          5번 반복 후 for문 빠져나옴.(이때의 i값은 5이다.)

    (6) 함수에 0을 반환하여 함수를 끝낸다.


    참고로 무한루프를 for문으로 돌리려면 for(;;) 이것만 써주면 된다.

    <while>

    while문은 어쩌면 for문보다 간단해 보이지만 뜯어보면 for문이 보기에 더 편하다는 것을 알 수 있다.

    while문은 이렇게 쓴다:

    while(조건식){

    명령1;

    명령2;

    ...

    }

    간단하다. 하지만 예제를 한번 볼까?

    #include <stdio.h>

    int main(){

    int i=0;                                          //  (1)

    while(i<5){                                    //  (2)

    printf("hello~\n");

    i++;                                         //  (3)

    }

    return 0;

    }

    (1)은 for문의 [초기식]과 같다.

    (2)는 for문의 [조건식]과 같다.

    (3)은 for문의 [증감식]과 같다.

    while문을 빠져나온 후의 i값도 5로 같다.

    그렇다. 위의 for문 예제와 이 while문 예제는 같다.


    참고로 무한 루프를 while문으로 돌리려면 while(1)만 써주면 된다.

    <do~while>

    이건 좀 특별하다. 우선 어떻게 쓰는지부터:

    do{

    명령1;

    명령2;

    ...

    }while(조건식);

    do~while이 특별한 이유는 바로 조건이 맞지 않아도 do 안에 있는 명령들은 무조건 실행된다는 것이다. 그리고 while(조건식)옆에 세미콜론(;)을 붙인다는 것도 특별하다.

    예제를 보자.

    #include <stdio.h>

    int main(){

    int i=0;

    do{

    printf("hello~\n");

    ++i;

    }while(i<5);

    결과는 예상했던대로 for문 예제와 while문 예제와 같다. 하지만 실행 순서가 다르다.

    위의 예제들에서 초기식 int i=0;을 int i=5;로 바꾼다면 어떻게 될까?

    for문이나 while문과는 달리 do~while문은 hello~를 한 번 출력한다. 그 이유는 위에서 말했듯, do안의 명령을 먼저 실행하고 그 다음에 조건식과 비교를 하기 때문이다. 이런 특징 때문에 로그인 프로그램에서 do~while을 많이 찾아볼 수 있다.


    <break와 continue>

    break;가 반복문 도중에 나타났을 때, 그 반복문에서 강제로 빠져나오게 된다.

    continue;가 반복문 도중에 나타났을 때, 아래에 남은 명령들을 실행시키지 않고 건너뛰어서 조건식으로 이동한다. 

    예를 들어보자:

    <1 : break>

    while(i<5){

    ++i;

    if(i==2)

    break;

    printf("hello~\n);

    }

    결과 : 

    hello~

    hello~

    i가 2의 값을 가졌을 때, break;를 만나서 hello~를 출력하지 못하고 반복문을 강제 종료했다. 그래서 hello~가 두번 밖에 반복되지 않는다.


    <2 : continue>

    int i=0;

    while(i<5){

    ++i;

    if(i==2)

    continue;

    printf("hello~\n);

    }

    결과 : 

    hello~

    hello~

    hello~

    hello~

    i가 2의 값을 가졌을 때, continue;를 만나서 아래 printf("hello~\n");를 실행시키지 못하고 다시 조건문 i<5로 되돌아가서 결국 hello~를 4번밖에 반복을 못하였다.

    반응형

    'C언어 문서화' 카테고리의 다른 글

    (C언어) 6. 이진탐색  (0) 2016.03.25
    (C언어) 5. 문자열  (0) 2016.03.22
    (C언어) 4. 아스키코드  (0) 2016.03.22
    (C언어)3. 배열  (5) 2016.03.22
    (c언어)1. 변수  (0) 2016.03.06

    댓글

Designed by Tistory.