c-조건문
C 언어 조건문

지난 시간에는 C언어의 기초 개념을 알아보았습니다. 이번 시간에는 C 언어의 조건문(conditional statements) 사용법을 알아보겠습니다. 조건문이란 특정 조건에 따라 각기 다른 명령을 수행하도록 프로그램의 순차적인 흐름을 제어하는 실행문입니다. 조건은 불린(Boolean) 자료형으로 제시되어, 표현식이 참(true)일 때와 거짓(false)일 때 서로 다른 코드를 실행합니다.

C에서는 if와 switch를 이용해 조건문을 만듭니다. if문은 조건이 범위와 값일 때 모두 사용할 수 있습니다. switch문은 조건이 값일 때만 사용할 수 있습니다. 조건이 범위일 때는 if문을 사용하고, 조건이 값일 때는 switch문을 사용하면 코드를 간단하게 작성할 수 있습니다. 이를 요약해보면 다음과 같습니다.

조건이 값 또는 범위일 때:

  • 조건이 1개이고, 조건이 거짓일 때는 명령을 실행하지 않음: if문
  • 조건이 1개이고, 조건이 거짓일 때 명령을 실행함: if-else 문
  • 조건이 2개 이상일 때: if-else if-else 문

조건이 값일 때:

  • switch case 문

그럼 각 경우와 예제를 하나씩 살펴보겠습니다.

if문

if문은 조건 1개가 참일 때 명령을 수행합니다. 거짓일 때는 별다른 명령을 수행하지 않습니다. if 문의 기본 구조는 다음과 같습니다.

c
if () // 조건식이 참일 때
실행문;

예제를 통해 살펴보겠습니다.

자판기

동전을 넣으면 음료를 주는 자판기가 있습니다. 우리는 음료수 가격에 일치하는 돈을 넣으면 음료수가 나왔다고 알려주고, 가격에 미달하는 돈을 넣으면 해당 금액이 반환되었다는 코드를 출력하려고 합니다. 자판기의 모든 음료수의 가격은 500원입니다. 이를 코드로 표현해보면 다음과 같습니다.

c
#include <stdio.h>
int main(void)
{
int money;
printf("돈을 넣어주세요: ");
scanf_s("%d", &money);
if (money % 500 == 0 || money / 500 != 0)
printf("음료수가 나왔습니다.\n");
printf("%d원이 반환되었습니다.\n", money % 500);
}

if else 문

if else문은 조건이 1개일 때 사용합니다. if else문의 기본 구조는 다음과 같습니다.

c
if (조건식) // 조건식이 참일 때
실행문;
else // 조건식이 거짓일 때
실행문;

미용실 할인

예를 들어 학생들에게 파마를 할인해주는 미용실이 있습니다. 이 미용실에서는 나이가 20세 미만이면 30%를 할인해줍니다. 이를 코드로 표현하면 다음과 같습니다.

c
#include <stdio.h>
int main(void)
{
int age;
printf("나이가 몇 살인가요? ");
scanf_s("%d", &age);
if (age < 20)
printf("30%% 할인"); // 퍼센트 기호를 출력할 때는 %% 사용
else
printf("정가");
}

if else if else문

이번에는 if else if else문을 이용해보겠습니다. if else if else문은 조건이 2개 이상일 때 사용합니다. if else if else문의 기본 구조는 다음과 같습니다.

c
if (조건식1) // 조건식1이 참일 때
실행문;
else if (조건식2) // 조건식2가 참일 때
실행문;
else if (조건식3) // 조건식 3이 참일 때
실행문;
else // 모든 조건식이 거짓일 때
실행문;

기상청 예보

예를 들어보겠습니다. 기상청에서는 체감온도에 따라 다른 경고를 알려주는 프로그램을 만들려고 합니다. 우리나라에서는 2021년부터 체감온도에 따라 폭염주의보 또는 폭염경보를 발령하고 있습니다. 기상청에서는 일최고체감온도가 33도 이상인 상태가 2일 이상 지속될 것으로 예상될 때 폭염주의보를, 일최고체감온도가 35도 이상인 상태가 2일 이상 지속될 것으로 예상될 때 폭염경보를 내립니다.

위 상황은 온도 구간이 3개로 나누어지므로 if else if else문을 사용하기에 적합합니다. 그럼 내일과 모레의 일최고체감온도를 입력하고, 입력받은 값에 따라 다른 경고를 출력하는 프로그램을 만들어보겠습니다. 예제는 다음과 같습니다.

c
#include <stdio.h>
int main(void)
{
float windchill1, windchill2;
printf("내일과 모레 예상 일최고체감온도: ");
scanf_s("%f %f", &windchill1, &windchill2);
// 2일 연속 일최고체감온도가 35도 이상으로 예상
if (windchill1 && windchill2 <= 35)
printf("폭염경보를 발령합니다.\n");
// 2일 연속 일최고체감온도가 33도 이상으로 예상
else if (33 <= windchill1 && windchill2 < 35)
printf("폭염주의보를 발령합니다.\n");
else
printf("이상무\n"); // 문제 없음
return 0;
}

switch case 문

만약 조건이 값이라면 switch case를 사용할 수 있습니다. 조건이 연속변수가 아니라 이산변수, 특정 값인 경우죠. 조건이 값일 때는 if문을 사용할 수도 있습니다. 하지만, switch 문을 사용하면 짧은 코드로도 더 간결하게 표현할 수 있는 장점이 있습니다.

switch case문에서는 각 case의 코드를 마칠 때마다 break를 넣어주어야 합니다. 만약 break를 사용하지 않으면 조건이 참인 경우 다음에 나오는 모든 명령을 수행합니다.

switch문의 기본 코드 구조는 다음과 같습니다.

c
switch (변수)
{
case1:
실행문;
break;
case2:
실행문;
break;
case 값N:
실행문;
break;
default:
실행문;
break;
}

예제를 통해 알아보겠습니다.

동전 던지기

랜덤으로 동전 던지기를 합니다. 동전의 뒷면이 나오면 "뒷면이 나왔습니다."를 출력하고 앞면이 나오면 '앞면이 나왔습니다.'라고 출력하는 코드를 만드려고 합니다. 기본 문구는 "동전 던지기 게임입니다." 입니다. 여기서 0은 뒷면, 1은 앞면이라고 가정하겠습니다. 이를 코드로 표현하면 다음과 같습니다.

c
#include <stdio.h>
#include <time.h>
int main(void)
{
srand(time(NULL)); // 매번 시드(seed)를 변경하는 난수(random number) 생성
int coin = rand() % 2; // 0과 1값 반환
switch (coin)
{
case 0: printf("뒷면이 나왔습니다.\n"); break; // 0은 동전 뒷면
case 1: printf("앞면이 나왔습니다.\n"); break; // 1은 동전 앞면
default: printf("동전 던지기 게임입니다.\n"); break;
}
return 0;
}

가위바위보

컴퓨터가 랜덤으로 가위바위보를 합니다. 값이 0일 때는 '가위'를, 2일 때는 '바위'를 3일 때는 '보'를 출력하고 싶습니다. 기본 문구는 "비밀"이라고 출력하고 싶습니다. C 언어로 랜덤 가위바위보를 표현하면 다음과 같습니다.

c
#include <stdio.h>
#include <time.h>
int main(void)
{
srand(time(NULL));
int rsp = rand() % 3; // 0 ~ 2 사이 값 정수 반환
switch (rsp)
{
case 0: printf("가위\n"); break;
case 1: printf("바위\n"); break;
case 2: printf("보\n"); break;
default: printf("비밀\n"); break;
}
return 0;
}

지금까지 C 언어의 조건문으로 다양한 if문과 switch case 문을 사용하는 법을 알아보았습니다. 다음 시간에는 C언어에서 반복문을 사용하는 법을 살펴보겠습니다. 모두 수고 많으셨습니다.

...

©2022 Snug Archive. All rights reserved.

Contact me at snugarchive@gmail.com.