c언어는 main 함수에서 시작하여 한줄 한줄 읽고 실행을 시키는 구조이다. 그것만으로는 부족하다. 프로그램의 행동을 제어함으로써 기계에 생명을 불어넣는다... 가 바로 제어문이다. 최근 각광받는 신경망이나 퍼셉트론 같은 개념도 넓게 보면 프로그램 제어에 들어간다고 볼 수 있다.

 

과거의 개념들이 컴퓨터의 발달로 역사에 새로운 의미를 부여할 만큼 정교해지고 있다.

 

제어문은 컴퓨터를 이해하는 첫 관문이 될 수가 있다.

 

조건문

순서도에서 보면 조건문은 심플하다. 이런 도표 어디선가 본적이 있을 것이다. FlowChart (흐름도)라고 말한다. 말 그대로 물이 흐르듯 위에서 아래로 내려오는 과정이다.

 

이 그림을 C의 main 함수라고 생각하면 조건식을 만날 때 마다 분기 하는 것이다. 1로 갈지 2로갈지.

 

main 함수는 길을 선택해야 한다.

이런 선택의 다음에 어떤 선택이 또 기다리고 있을지 모른다. 인생은 선택의 연속이다.

"Life is like a box of chocolates. You never know what you're gonna get!" - 포레스트 검프
인생은 마치 초콜렛 박스와 같아. 너는 무엇을 먹게될지 몰라!

 

C언어로 표현하면 아래와 같다. 최근에 나온 언어들의 기본 자료형에는 Boolean 형(True/False) 이 기본으로 탑재가 되지만 C언어가 개발될 당시에는 True (참) False (거짓) 대신 1 과 0을 사용했다. 확실히 기계어 스럽다. 정확히는 0과 0이 아닌 모든 값으로 bool 형을 규정했다.

 

#include <stdio.h>

void main(){
    if (1){
        printf("This is true\n");
    }
    if(0){
        printf("This doesn't work\n");
    }
    if(-1){
        printf("It also is right\n");
    }
    if("READY"){
        printf("I am ready to go\n");
    }
}

 

두번째 if (0) 만 제외하고 모두 블록안의 코드를 실행한다.

 

if문의 기본 원리는 지극히 단순하다.

 

if (  참   ) 이면 { 코드블록 } 실행한다.

if ( 거짓 ) 이면 { 코드블록 } 건너뛴다.

 

if ( ) 안에 들어있는 식을 조건식이라고 한다. 숫자 1도 조건식의 결과이다. 여기에는 주로 비교연산이나 논리연산을 한다. 아래와 같이 두개의 값을 비교하여 참이면 1 거짓이면 0을 반환한다.

#include <stdio.h>

void main(){
    int i = 3;

    if (i > 2){
        printf("i는 2보다 크다. i > 2 연산의 결과는 %d\n", i > 2);
    }
    printf("i는 2보다 작다. i < 2 연산의 결과는 %d\n", i < 2);
    if (i < 2){
        printf("i는 2보다 작다. i < 2 연산의 결과는 %d\n", i < 2); // 실행되지 않는다.
    }
}

 

조건식에 쓰이는 비교연산자를 정리한다.

비교연산자(관계연산자) 내용
a == b a 와 b 가 같으면 1을 리턴(참)
a > b a 가 b 보다 크면 1을 리턴(참)
a >= b a 가 b 와 같거나 b 보다 크면 1을 리턴 (참)
a < b a 가 b 보다 작으면 1을 리턴(참)
a <= b a 가 b 와 같거나 b 보다 작으면 1을 리턴 (참)
a != b a 와 b 가 같지 않으면 1을 리턴(참)

 

if else 문

if 문이 있는 곳에 else 도 항상있다. if는 만약 ~ 라면의 뜻이고 else는 그밖에라는 뜻이다. if가 분기하려는 특정한 조건을 말하면 else는 그 외의 모든 상황을 말한다.

 

#include <stdio.h>

void main(){
    int i = 5;

    if (i <= 2){
        printf("i는 2와 같거나 2보다 작다. i는 %d ",i );
    }
    else{
        printf("i는 2보다 크다. i는 %d\n", i );
    }
}

else 와 어떤 식으로 연결되어 있는지를 눈여겨 본다. else는 조건식을 가지지 않는다. 가질 필요가 없다. 조건식 자체는 if 조건식에 해당하지 않는 모든 것이 참이다. 그러므로 else { } 만 쓰면 된다.

 

하나의 조건을 발견하면 그 외의 조건들을 볼 필요 없는 상황에 사용하면 유용하다. 분기가 2개지만 CPU는 조건식을 하나만 검사하므로 수행속도가 좋아진다.

 

if else if else 조건문

if else if eles 조건문 좀 말이 길다. if else 문의 확장판이라고 보면된다. 이것은 기본적으로 먼저 나온 if문은 중첩해서 검사하는 것과 같다. 원래는 중첩된 검사여야 하는데 중첩할 수록 코드보기가 복잡하다. 그리고 선택지의 문제로 될 수가 있다. 여러가지 방법으로 사용할 수 있다.

 

이름이 기니까 줄여서 elif 문을 한번 들여다 보자. 그냥하면 심심하니까 랜덤함수를 사용해준다.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void main(){

    srand(time(NULL));
    int score =0;
    score = rand()%90+10;

    printf("점수는 %d점 입니다\n",score);

    char grade;

    if (score >= 90){
        grade = 'A';
    } else if (score >= 80){
        grade = 'B';
    } else if (score >= 70){
        grade = 'C';
    } else if (score >= 70){
        grade = 'D';
    } else{
        grade = 'F';
    }
    printf("등급은 %c 입니다.",grade);
}

처음 if 부터 조건식을 검사해서 else까지 내려온다. 하나라도 조건식이 참이 걸렸다면 전체 조건식은 종료된다. 5개의 조건식이 실제로는 하나의 체인이 되어있다. 하나의 조건식이 1로 적중하면 다음 검사란 없다.

 

랜덤함수를 사용하면 매번 값이 달라진다. 지금은 몰라도 괜찮다. if else 구조에 대하여 이해하면 충분하다.

 

내려오다가 하나에 걸리면 전체 체인을 종료한다.

여기까지 if 조건문이다.

 

switch case 문도 있지만 입문자에겐 별로 사용할 일이 없다. 그 보다 더 중요한 핵심에 포커스를 맞출 필요가 있다.

공유하기

facebook twitter kakaoTalk kakaostory naver band