C언어/참고서: C언어 콘서트

C언어 17차시 조건문, if-else, 조건 연산자, 논리 연산자, 복합문, 블록, 단축계산, if-else if-else, switch

Olivia-BlackCherry 2023. 3. 22. 23:07

목차

    1. 기본 제어 구조

    1) 순차 구조 sequence : 차례대로 실행

    2) 선택 구조 selection : 여러 개 중에 하나의 명령어를 선택하여 실행

    3) 반복 구조 iteration : 동일한 명령어 반복 실행

    출처: C언어 콘서트

    어떤 프로그램이라도 위의 3가지 기본 구조만 있으면 만들어낼 수 있다. 

     

     

    2. if -else 구문

    if-else는 선택 구조이다. 

    선택 구조는 조건을 검사하고, 조건에 따라 실행되는 명령어를 다르게 한다 

    의미는 직관적이다. 

    조건식이 참이면 문장1을, 거짓이면 문장2를 수행한다. 

    {
    	if (조건식) {
    	문장1;
    }
    	else {
    	문장2;
    }

     

    2-1 효율성

    if-else 구문을 사용하는 것이 if-if 구문을 사용하는 것보다 효율적이다. 

    if 뒤에 쓰인 조건문 하나만 판단하면 else 구문은 자동으로 판단되기 때문이다. 

     

    2-2 복합문 compound statement

    조건에 따라 실행되는 문장이 하나면 중괄호 생략 가능.

    두 개 이상이라면 반드시 중괄호로 grouping 해야 함.

    이러한 문장 grouping을 복합문이라고 한다. 

    복합문은 블록 block 이라고도 한다. 

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    int main(void)
    {
    	int score = 80;
    	if (score>90) {
        printf("90점을 넘다니 ");
    	printf("멋지다!");
    }
    	else 
    	printf("대단하다~!!");
    	
    	return 0;
    }

     

     

    3. 조건 연산자

    if-else 문과 유사한 기능을 한다. 

    출처: C 언어 콘서트

    ? 기호와 : 기호로 구성된다. 

    ? 앞에 있는 것이 조건이고, 조건이 참이면 값1이, 거짓이면 값2가 반환된다.

    absolute = (x > o) ? x : -x; //절대값
    big = (x > y) ? x : y;; //최대값
    small = (x < y) ? x : y; //최소값

     

     

    4. 조건식 

    논리 연산자를 써서 조건식을 더욱 복잡하게 만들 수 있다. 

    AND 연산, OR 연산, NOT 연산이다.

    논리 연산자들은 여러 개가 동시에 사용될 수 있다. 

    출처: C언어 콘서트

    if ((2 == 2) && (4 > 2) && (3 < 5)) {
    	printf("세 개의 조건이 모두 참입니다.\n");
    }
    if ((x == 1) || (x == 2) || (x == 3)) {
    	printf("x는 1,2,3 셋 중 하나입니다.\n");
    }
    y = !(3 == 4); //y에는 1이 대입된다.
    z = !(3 == 3); //z에는 0이 대입된다.

     

    4-1 단축 계산 short circuit evaluation

    AND 연산자의 경우, 처음 피연산자 값이 거짓이면 나머지 피연산자들은 계산하지 않는다. 

    AND는 모두가 참인 경우에만 참을 반환하므로,

    일단 처음 피연산자 값이 거짓이라면 전체값은 이미 거짓으로 판명이 났기 때문이다. 

    이를 단축 계산이라 한다.

     

    if ((2 == 3) && (++x > 2) && (3 < 5)) {
    	printf("세 개의 조건이 모두 참입니다.\n");
    }

    예컨데, 위의 조건식에서 처음 (2==3)이 거짓이므로 그 다음 조건식인 (++x >2)는 실행되지 않는다. 

     

    4-2 NOT 연산자의 참과 거짓

    관계 수식이나 논리 수식은 거짓이면 0, 참이면 1의 값을 갖는다.

    그런데 피연산자의 경우에는 0이면 거짓이고, 0이 아닌 모든 값은 참이다. 

    !100 >>>>0
    !0 >>>>1 

     

    ※ 주의점 

    수학에서 처럼 3<x<6과 같은 조건식을 만들면 안된다. 

    왜냐면 C에서는 위의 경우를 (3<x) <6 으로 연산하기 때문이다. 

    만약 x 값이 10라면 (3<x)는 1이고 

    최종적으로 1<6이 되어 전체 수식은 참이된다. 따라서 

    (3< x) && (x<6) 이라고 적어줘야 한다.

     

     

    5. 연속 if 문

    3개 이상의 명령문 중 하나를 선택할 때 쓴다.

    	if (year % 400 == 0) {
    		printf("윤년입니다\n");
    	}
    	else if (year % 4 == 0 && year % 100 != 0){
    		printf("윤년입니다\n");
    	}
    	else {
    		printf("윤년이 아닙니다");
    	}

     

     

    6. switch문

    실행 경로가 여러 개인 경우 switch 문을 쓰면 좋다. 

    switch 문에서는 변수 값을 계산하여 각 case와 비교한다. 

     

    break 문에 도달하면 switch 문을 빠져나가고,

    어느 case에도 해당되지 않으면 default 문이 실행된다. 

    case 뒤에 나오는 조건은 정수여야 한다.

     

    6-1 break 문

    break 문이 없다면, 다음 문장들이 이어서 실행된다. 

    의도적으로 break 문을 생략할 수도 있다. 

     

    6-2 default 문

    생략할 수도 있다.