13 제어문 소개 및 if 문
우리는 살면서 수많은 선택과 반복적인 일을 진행합니다. 이는 프로그래밍에서도 마찬가지인데, 여러 갈래의 선택 중 하나를 선택하려면 조건문을 사용하고 자주 반복되는 일은 반복문을 사용하여 처리할 수 있습니다. 이번 강의는 이러한 선택과 반복의 내용을 다루는 키워드들에 대해서 학습합니다. 선택과 반복을 제어한다고 해서 제어문이라고 합니다.
> // 제어문: if, else, for, while, do, break, continue
13.1 제어문
제어문(Control Statement, Loop)은 프로그램의 실행 순서를 제어하거나 프로그램의 내용을 반복하는 등의 작업을 처리할 때 사용되는 구문으로 조건문과 반복문으로 구분합니다. 우선 제어문을 간단히 먼저 정리해 본 후 하나씩 살펴보도록 하겠습니다. 다음 내용은 지금은 그냥 읽고 넘어가세요. 뒤에서 차례대로 배웁니다.
- 순차문: 기본적으로 모든 실행문은 순서대로 실행됩니다.
- 조건문(선택문 : Selection/Decision, Conditional Statements): 조건문은 조건의 참(true) 또는 거짓(false)에 따라 서로 다른 명령문을 실행할 수 있는 구조를 지닙니다. 조건문은 if 문과 switch 문으로 구분할 수 있습니다. 조건문은 다른 말로 분기문 또는 비교판단문이라고도 합니다.
- 반복문(Iteration/Looping Statement, Loop): 반복문은 특정 명령문을 지정된 수만큼 반복해서 실행하고자 할 때나 조건식이 참(true)일 동안 반복시킬 때 사용됩니다. 반복문은 for 문(구간 반복), do 문(선행 반복), while 문(조건 반복)으로 구분할 수 있습니다.
- 기타: 기타 제어문으로는 break 문과 continue 문이 있습니다. break 문은 반복문 내에서 반복을 중지하는 구문이고 continue 문은 반복문 내에서 그 다음 반복문으로 이동하는 구문입니다.
13.2 순차문: 순서대로 실행하기
프로그램은 기본적으로 순서대로 실행됩니다. main 함수 시작부터 끝 지점까지 코드가 나열되면 순서대로 실행 후 종료됩니다. 다음 코드처럼 국어점수와 영어점수의 총점과 평균을 구하는 예제를 살펴보겠습니다. 모든 로직은 순서대로 실행되어 그 결과가 출력됩니다. 지금까지 우리가 해오던 방식입니다. 이러한 순서를 변경할 수 있는 구조가 있는데 이번 장부터 살펴볼 제어문의 내용입니다.
먼저 다음 코드를 작성 후 프로그램 코드가 순서대로 실행되는 모양을 살펴보겠습니다.
코드: sequence_demo.c
// 순차문: 순서대로 실행하기
#include <stdio.h>
int main(void)
{
int kor = 100;
int eng = 90;
int tot = 0;
double avg = 0.0;
tot = kor + eng; // 총점 구하기
avg = tot / 2.0; // 평균 구하기
printf("총점: %d\n", tot); // 190
printf("평균: %.2f\n", avg); // 95.00
return 0;
}
총점: 190
평균: 95.00
순서대로 변수를 선언하고 총점과 평균을 구하고 그 값을 출력하는 형태로 순서대로 실행하고 있습니다. 이처럼 프로그램은 기본적으로 main 함수에서 순서대로 실행하게 되어 있습니다.
13.3 조건문: if 문과 가지치기
프로그램의 흐름을 여러 가지 갈래로 가지치기(Branching)를 할 수 있는데, 이 때에는 if 문이 사용됩니다. if 문은 조건을 비교해서 판단하는 구문으로, if, else if, else의 3가지 키워드가 있습니다. if 키워드 다음에 괄호를 사용하여 조건문을 기록합니다.
if 문의 가진 기본적인 모양은 다음과 같습니다.
if (조건식)
{
// 조건식의 조건이 만족할 때 실행할 실행문들...
}
if 문은 if (조건식) 실행문;
모양인데 괄호안의 조건식(논리식)이 참이면 실행문(문장)을 실행하는 형태입니다. if 문은 다음과 같이 중괄호가 없는 모양으로도 사용됩니다. 이런 경우를 단문(Single Statement)이라고 하는데 하나의 실행문으로만 이루어진 경우에는 중괄호를 생략할 수 있습니다.
if (조건식)
실행문; // 단문
제어문의 흐름을 그림으로 표시하면 다음과 같습니다. 이러한 그림을 순서도(FlowChart)라고 합니다.
그림: if 문 순서도
13.4 if 문을 사용하여 하나의 조건 처리
자, 그럼 처음으로 if 문을 사용해보겠습니다.
코드: if.c
// if 문을 사용하여 하나의 조건 처리
#include <stdio.h>
int main(void)
{
int score = 60;
// score가 60 이상이면 "합격" 출력
if (score >= 60)
{
printf("\"합격\"\n");
}
return 0;
}
"합격"
if 문의 괄호에는 조건식이 들어옵니다. (score >= 60)
식의 결과가 참이면 "합격"을 출력하는 실행문을 실행하고 조건식의 결과가 거짓이면 아무것도 실행하지 않습니다. 이처럼 if 문은 조건식이 참이면 실행하고 그렇지 않으면 아무것도 실행하지 않는 구조를 가지고 있습니다.
13.5 단문과 복문
이번에는 if 문의 여러 가지 모양을 볼 수 있는 단문과 복문을 사용해보겠습니다.
코드: single_multiple.c
#include <stdio.h>
int main(void)
{
//[1] 단문: 3가지 스타일
if (1 == 1) printf("단문 1\n");
if (1 == 1)
printf("단문 2\n");
if (1 == 1)
{
printf("단문 3\n");
}
//[2] 복문: 반드시 중괄호 사용
if (1 == 1)
{
printf("복문 A\n");
printf("복문 B\n");
}
return 0;
}
단문 1
단문 2
단문 3
복문 A
복문 B
위 샘플 코드처럼 if (조건식) 문장 형태는 한 줄로 쓰거나 바로 그 다음 줄에 작성할 수 있습니다. 조건식 다음에 줄 바꿈을 할 때 복문이면 반드시 블록 기호인 중괄호({}
)가 있어야 합니다.
단문과 같이 중괄호를 생략하는 방식은 꼭 필요한 경우가 아니면 안 쓰는 게 좋습니다. 왜냐하면 명확하게 if 문의 시작과 끝을 구분해야 헷갈리는 것을 방지할 수 있습니다.
C 언어에서 코드 블록, 단문, 복문 사용하기
C 언어에서 코드 블록과 단문, 복문은 매우 중요한 개념입니다. 이번 강좌에서는 이러한 개념을 자세히 살펴보고, 예제를 통해 실제로 어떻게 사용되는지 알아보겠습니다.
코드 블록이란?
C 언어에서 코드 블록은 중괄호 {}
로 감싸인 코드의 묶음입니다. 코드 블록은 하나의 단위로 처리되며, 해당 블록 안에 있는 모든 코드는 같은 범위(scope)에 속하게 됩니다. 이는 변수의 유효 범위, 함수의 범위 등을 결정하는 데 중요한 역할을 합니다.
다음은 코드 블록의 예시입니다.
int main(void) {
int x = 5;
{
int y = 10;
printf("x = %d, y = %d\n", x, y);
}
// y는 블록 밖에서 유효하지 않음
printf("x = %d\n", x);
return 0;
}
위 코드에서는 main 함수 안에 중괄호로 감싸인 코드 블록이 있습니다. 이 블록 안에는 y라는 변수가 선언되어 있습니다. 이 블록 밖에서는 y 변수가 유효하지 않기 때문에, 마지막 printf 함수에서는 x 변수만 사용됩니다.
단문과 복문이란?
C 언어에서 단문(SingleLine)은 중괄호 없이 한 줄의 코드를 의미합니다. 일반적으로 if
, for
, while
등의 제어문에서 많이 사용됩니다. 예를 들어, 다음과 같은 코드에서 printf 함수는 단문입니다.
if (x > 0) printf("양수입니다.\n");
반면 복문(MultiLine)은 중괄호로 감싸여 있는 여러 줄의 코드를 의미합니다. 이는 일반적으로 함수나 제어문에서 많이 사용됩니다. 예를 들어, 다음은 if
제어문 안에 여러 줄의 코드를 넣은 복문입니다.
if (x > 0) {
printf("양수입니다.\n");
printf("입력한 수는 %d입니다.\n", x);
}
예제
위에서 설명한 개념들을 예제를 통해 더 자세히 살펴보겠습니다. 다음은 코드 블록, 단문, 복문을 사용한 예제입니다.
#include <stdio.h>
int main(void) {
int i = 3;
//[1] 공문(Empty) : {}안에 아무런 구문이 없는 문장
if (i % 2 == 0) {
// Empty : 실행 안됨.
}
//[2] 단문(SingleLine) : {}안에 단일 문장(실행문)
if (i % 3 == 0) {
printf("3의 배수"); // 실행
}
if (i % 3 == 0) // 단문일 경우만 {} 생략 가능
printf("3의 배수");
//[3] 복문(MultiLine) : {}안에 다중 문장
if (i % 3 == 0) {
printf("\n");
printf("\n");
// ; 불필요
}
return 0; // main 함수는 반드시 0을 반환해야 함
}
위 코드에서 첫 번째 if
문은 i
변수가 짝수인 경우에 아무 것도 하지 않습니다. 이 경우 if
문 내부에 아무 코드도 없기 때문에 이는 공문(Empty)입니다.
두 번째 if
문에서는 i
변수가 3의 배수인 경우 "3의 배수"
라는 문자열을 출력합니다. 이 경우, printf
함수가 하나의 문장이므로, 단문(SingleLine)입니다.
세 번째 if
문도 i
변수가 3의 배수인 경우에 실행되는데, 이 경우 중괄호를 생략하고 한 줄로 표현했습니다. 이렇게 중괄호를 생략하여 표현한 코드 블록은 단문(SingleLine)과 같은 동작을 수행합니다.
마지막으로, 네 번째 if
문에서는 i
변수가 3의 배수인 경우, 두 개의 줄바꿈 문자열을 출력하는 복문(MultiLine)을 사용합니다.
결론
C 언어에서 코드 블록, 단문, 복문은 매우 중요한 개념입니다. 코드 블록은 중괄호로 감싸인 코드의 묶음으로, 변수의 유효 범위 등을 결정합니다. 단문은 중괄호 없이 한 줄의 코드를 의미하며, 주로 제어문에서 많이 사용됩니다. 복문은 중괄호로 감싸여 있는 여러 줄의 코드를 의미하며, 주로 함수나 제어문에서 많이 사용됩니다. 이러한 개념들을 제대로 이해하고 활용하면, 더욱 효율적이고 정확한 코드를 작성할 수 있습니다.
13.6 참고: if 문에 대한 코드 조각
Visual Studio에서 C 언어 코드를 작성할 때에 if를 입력 후 탭을 두 번 입력하면 자동으로 if 문 코드가 생성됩니다. if 문 및 앞으로 나올 else, for, do, while 등의 주요 명령어에 대한 코드 조각을 다 제공하고 있습니다.
- if 탭 탭
- else 탭 탭
- for 탭 탭
13.7 if 문을 비교 연산자와 함께 사용하기
조건문인 if 문은 말 그대로 조건을 판단하기에 비교 연산자와 함께 자주 사용됩니다.
코드: if_demo.c
// if 문을 비교 연산자와 함께 사용하기
#include <stdio.h>
int main(void)
{
int x = 10; // x를 10으로 초기화
if (x == 10) // x가 10과 같으면 => true(1)
{
printf("x는 %d입니다.\n", x);
}
if (x != 20) // x가 20이 아니라면 => true(1)
{
printf("x는 20이 아닙니다.\n");
}
return 0;
}
x는 10입니다.
x는 20이 아닙니다.
비교 연산자의 결과가 참이면 if 문을 수행하고 거짓이면 if 문을 수행하지 않고 다음으로 진행합니다.
13.8 두 수의 크기 비교 샘플 코드
코드: compare_two_numbers.c
// C 언어 코드 샘플 - 두 수의 크기 비교
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
int num1 = 0;
int num2 = 0;
int _ = 0; // 버림(Discards)
printf("첫 번째 수: "); _ = scanf("%d", &num1);
printf("두 번째 수: "); _ = scanf("%d", &num2);
if (num1 > num2)
{
printf("%d이(가) %d보다 큽니다.\n", num1, num2);
}
if (num1 < num2)
{
printf("%d이(가) %d보다 작습니다.\n", num1, num2);
}
if (num1 == num2)
{
printf("%d이(가) %d와 같습니다.\n", num1, num2);
}
return 0;
}
첫 번째 수: 3
두 번째 수: 5
3이(가) 5보다 작습니다.
13.9 !(NOT) 연산자를 if 문의 조건식에서 사용하기
if 문의 조건식의 결과가 거짓이 아니면 즉, 참이면 실행문을 실행하는 모양을 살펴보겠습니다.
코드: if_not.c
// !(NOT) 연산자를 if 문의 조건식에서 사용하기
#include <stdio.h>
int main(void)
{
int bln = 0; // false(0)
if (!bln) // ~가 아니라면 ~를 실행해라
{
printf("bln: false(0) -> ! -> true(1)\n");
}
return 0;
}
bln: false(0) -> ! -> true(1)
"~가 아니라면 ~를 실행해라"는 의미로 if 문과 !(NOT) 연산자는 짝을 이뤄 많이 사용됩니다.
13.10 중첩 된 if 문
당연한 얘기겠지만, if 문 안에는 또 다른 if 문을 넣을 수 있습니다. 이러한 모양을 중첩 된 if 문이라고 합니다. 하나의 조건이 만족하고 또 다른 조건이 만족할 때 어떤 일을 진행해야 한다면 중첩 된 if 문을 사용할 수 있습니다. 이번에는 중첩 된 if 문을 사용해보겠습니다.
코드: if_nested.c
// 중첩 된 if 문
#include <stdio.h>
int main(void)
{
char name = 'C';
int version = 22;
if (name == 'C')
{
if (version == 22)
{
printf("%c %d\n", name, version);
}
}
return 0;
}
C 22
name
과 version
에 들어 있는 값이 if 문의 조건식에 맞으면 최종적으로 "C 22" 값이 출력되는 예제입니다. 여러 개의 조건을 만족하고자 할 때에는 이처럼 여러 개의 if 문으로 묶어서 비교할 수 있는데 이를 중첩 된 if 문이라고 합니다.
13.11 if 문으로 한번에 여러 개의 조건을 처리하기
논리 연산자를 if 문과 함께 사용하면 하나의 if 문으로 여러 개의 조건을 처리할 수 있습니다.
코드: if_and.c
#include <stdio.h>
int main(void)
{
int number = 1234;
//[A] 2개의 조건이 모두 만족하면
if (number == 1234 && number >= 1000)
{
printf("맞습니다.\n"); // 실행
}
//[B] 2개의 조건 중 하나라도 만족하면
if (number == 1234 || number <= 1000)
{
printf("하나라도 참이면 참\n"); // 실행
}
return 0;
}
맞습니다.
하나라도 참이면 참
이번 예제에서 살펴본 것처럼 if 문의 조건식에 &&
연산자와 ||
연산자를 사용하여 하나 이상의 조건을 함께 처리할 수 있습니다.
13.12 else 문을 사용하여 두 방향으로 분기하기
이번 강의는 if 문과 함께 사용해서 두 방향으로 분기하는 else 문을 다룹니다.
> // if ~ else 문: 만약 조건식이 참이면 if 문을 실행하고 그렇지 않으면 else 문을 실행
13.13 else 문 사용하기
else 문을 사용하면 if 문의 조건이 거짓일 때 원하는 실행문을 실행할 수 있습니다. else 문은 단독으로 사용될 수 없고 if 문 다음에 else 문이 오는 구조입니다. if 문의 조건이 거짓일 때 else 문이 실행됩니다.
if 문은 else 문과 함께 사용되고 모양은 다음과 같습니다.
> if (조건식)
. {
. // 조건식이 참일 때 실행할 실행문1;
. }
. else
. {
. // 조건식이 거짓일 때 실행할 실행문2;
. }
>
조건식이 참이면 실행문1을 실행하고, 조건식이 거짓이면 실행문2를 실행합니다.
이번에는 코드로 else 문의 사용 모양을 살펴보겠습니다.
코드: else_note.c
// else 문 사용하기
#include <stdio.h>
int main(void)
{
if (1 != 1) // 조건식 => 거짓(false)
{
//printf("조건식이 참일 때 현재 문장이 실행됩니다.\n");
}
else // 조건이 거짓일 때 실행
{
printf("조건식이 거짓이기에 현재 문장이 실행됩니다.\n");
}
return 0;
}
조건식이 거짓이기에 현재 문장이 실행됩니다.
위 샘플 코드처럼 조건식이 참이면 첫 번째 문장이 실행되고 조건식이 거짓이면 두 번째 문장이 실행되는 구조입니다.
if~else문을 순서도로 표현해 보면 다음과 같습니다.
그림: 순서도로 표현해 본 if~else 문
IMPORTANT
else에는 조건식을 쓸 수 없습니다!
13.14 else 문을 사용하여 두 개의 조건 처리하기
else 문을 사용하여 2개의 조건을 처리해보겠습니다.
Visual Studio 편집기에서 else
입력 후 탭을 두 번 입력하면 자동으로 else 문의 중괄호가 생성됩니다. 이러한 코드 조각 기능을 적극 활용하면 코드 작성이 편리해집니다.
코드: else.c
// else 문을 사용하여 두 개의 조건 처리하기
#include <stdio.h>
int main(void)
{
int score = 59;
if (score >= 60)
{
printf("합격\n"); // 조건식이 참일 때 실행
}
else
{
printf("불합격\n"); // 조건식이 거짓일 때 실행
}
return 0;
}
불합격
score
변수에는 59가 저장되어 있어 (score >= 60)
조건식이 거짓이 되므로 else 문이 실행되어 "불합격"이 출력됩니다.
13.15 조건이 같은지 다른지 확인하기
조건이 같은지를 물어보는 모양은 다음과 같습니다.
코드: if_else.c
// 조건이 같은지 다른지 확인하기
#include <stdio.h>
int main(void)
{
const double PI = 3.14;
if (PI == 3.14) //[!] 조건식
{
printf("PI는 3.14입니다.\n"); // 참일 때 실행
}
else
{
printf("PI는 3.14가 아닙니다.\n"); // 거짓일 때 실행
}
return 0;
}
PI는 3.14입니다.
13.16 더 큰 수를 출력하는 프로그램
다음은 2개의 수를 입력한 후 그 중에서 큰 수를 출력하는 프로그램입니다.
코드: greater_than_equal.c
// 2개의 수를 입력한 후 그 중에서 큰 수를 출력하는 프로그램
#define _CRT_SECURE_NO_WARNINGS // scanf() 보안 경고에 따른 컴파일 에러 방지
#include <stdio.h>
int main(void)
{
int first = 0, second = 0;
printf("2개의 정수를 입력하세요. (ex: 3 5) => ___\b\b\b");
scanf("%d %d", &first, &second);
if (first >= second)
{
printf("큰 값: %d\n", first);
}
else
{
printf("큰 값: %d\n", second);
}
return 0;
}
2개의 정수를 입력하세요. (ex: 3 5) => 3 5
큰 값: 5
(first >= second)
조건식이 만족하면 first
변수의 값이 더 큰 값이고, 조건을 만족하지 않으면 second
변수의 값이 더 큰 값이 됩니다.
13.17. 두 수의 차이를 양의 정수로 구하기
이번에는 두 수의 차이를 양의 정수로 구하는 방법을 알아보겠습니다.
코드: num_difference.c
// 두 수의 차이 구하기
#include <stdio.h>
int main(void)
{
int first = 3;
int second = 5;
int diff = 0; // 차이값이 양의 정수로 저장될 변수
if (first > second)
{
diff = first - second; // 더 큰 수에서 작은 수 빼기
}
else
{
diff = second - first;
}
printf("%d와 %d의 차이: %d\n", first, second, diff); // 3와 5의 차이: 2
return 0;
}
3와 5의 차이: 2
단순하게 두 수의 차이를 구하려면 첫 번째 변수에서 두 번째 변수의 값을 빼면 됩니다. 하지만, 차이를 양의 정수로 구하려면 두 수 중에서 큰 값을 먼저 계산한 후 큰 값에서 작은 값을 빼면 양의 정수가 구해집니다.
13.18 대소문자 구분하기
다음 코드는 if else 문으로 입력 문자에 대한 대소문자를 구분해서 알려주는 프로그램입니다.
코드: char_test.c
#define _CRT_SECURE_NO_WARNINGS // scanf() 보안 경고에 따른 컴파일 에러 방지
#include <stdio.h>
int main(void)
{
char c;
// 콘솔로부터 문자 하나 입력 받기
printf("영문 대문자 또는 소문자 하나를 입력하세요.\n");
scanf("%c", &c);
if (c >= 'A' && c <= 'Z')
{
printf("%c는 대문자입니다.\n", c);
}
else
{
printf("%c는 소문자입니다.\n", c);
}
return 0;
}
영문 대문자 또는 소문자 하나를 입력하세요.
a
a는 소문자입니다.
13.19 중첩된 else 문
다음은 콘솔로부터 하나의 문자를 입력 받은 후 입력된 문자가 'y'이면 "Yes"를 출력하고 'n'이면 "No"를 출력하고 기타 나머지 문자가 입력되면 "Cancel"을 출력하는 프로그램입니다.
코드: else_nested.c
// 하나의 입력된 문자에 따라서 'y'이면 "Yes"를, 'n'이면 "No"를,
// 나머지는 모두 "Cancel"을 출력하는 프로그램
#include <stdio.h>
int main(void)
{
char input;
printf("문자를 입력하세요. (y/n/c): ");
input = getchar();
if (input == 'y')
{
printf("Yes");
}
else
{
// else 문 안에 또 다른 if else 문 사용
if (input == 'n')
{
printf("No");
}
else
{
printf("Cancel");
}
}
return 0;
}
문자를 입력하세요. (y/n/c): c
Cancel
if~else 문 안에 또 다른 if~else 문을 두어서 하나 이상의 조건을 반복해서 처리하는 내용을 살펴보았습니다.
조건식에는 &&
연산자와 ||
연산자를 사용해서 여러 조건을 처리할 수도 있고 if 문 자체를 여러 번 사용해서 여러 조건을 처리할 수 있습니다.
13.20 상장 수여 프로그램
사용자로부터 입력되는 점수에 따라서 서로 다른 상장을 수여하는 프로그램을 작성해 보겠습니다.
코드: if_else_score_grade.c
#define _CRT_SECURE_NO_WARNINGS // scanf() 보안 경고에 따른 컴파일 에러 방지
#include <stdio.h>
int main(void)
{
int score = 0;
printf("점수: ");
scanf("%d", &score);
if (score >= 90)
{
printf("금메달");
}
else
{
if (score >= 80)
{
printf("은메달");
}
else
{
if (score >= 70)
{
printf("동메달");
}
else
{
printf("노메달");
}
}
}
printf("을 수상하였습니다.\n");
return 0;
}
점수: 100
금메달을 수상하였습니다.
if~else 문을 3번 중첩해서 사용하여 4개의 조건을 구하는 프로그램을 만들어 보았습니다.
13.21 else if 문(다중 if 문, 여러 개의 조건식을 처리)
앞서 if else 문을 여러 개 사용하여 중첩해서 다중으로 조건을 처리할 수 있습니다. 이번에는 중첩하지 않고 여러 조건을 처리할 수 있는 else if 문을 사용해 보겠습니다.
else if
문의 모양은 다음과 같습니다.
if (조건식1)
{
실행문1;
}
else if (조건식2)
{
실행문2;
}
…
else
{
실행문n;
}
조건식1이 참이면 실행문1을 실행하고, 그렇지 않고, 조건식2가 참이면 실행문2를 실행하고, 이를 원하는 조건만큼 반복하며 원하는 조건이 나오지 않으면 최종적으로 실행문n을 수행합니다. else if 문 부분을 여러 개 두어서 더 많은 조건을 처리할 수 있는 구조입니다.
다중 if 문의 순서도 모양은 다음과 같습니다.
그림: 다중 if 문을 순서도로 표현
13.22 else if 문 사용하기
이번에는 else if 문을 사용해보겠습니다.
코드: if_else_if_else.c
#include <stdio.h>
int main(void)
{
int number1 = 10;
int number2 = 20;
if (number1 > number2) // 조건 처리 1
{
printf("number1이 더 큽니다.\n");
}
else if (number1 < number2) // 조건 처리 2
{
printf("number2가 더 큽니다.\n");
}
else
{
printf("둘 다 같습니다.\n");
}
return 0;
}
number2가 더 큽니다.
첫 번째 if 문에서 첫 번째 조건을 처리한 후 조건을 만족하지 않으면 두 번째 else if 문의 조건을 따집니다. 두 번째 else if 문의 조건이 참이면 실행하고 그렇지 않으면 마지막으로 else 문을 실행하는 구조입니다.
13.23 양수, 음수, 0을 판단하는 프로그램
양수인지 음수인지 아니면 0인지를 판단하는 프로그램은 다음과 같이 작성할 수 있습니다.
코드: positive_negative_zero.c
//[?] 정수를 양의 정수, 0, 음의 정수로 판단하기(else if)
#include <stdio.h>
int main(void)
{
int number = -1234; //[1] 변수 선언 및 초기화
if (number > 0)
{
printf("%d는 양수입니다.\n", number); //[A] 양수일 때
}
else if (number < 0)
{
printf("%d는 음수입니다.\n", number); //[B] 음수일 때
}
else
{
printf("%d는 0입니다.\n", number); //[C] 0일 때
}
return 0;
}
-1234는 음수입니다.
[1]
번 코드 영역에 입력한 데이터가 -1234이기에 [B]
번의 else if 문이 실행됩니다.
13.24 else if 문을 사용한 성적 결과 출력
이번에는 else if 문을 사용하여 성적 결과를 나타내는 프로그램을 작성해보겠습니다.
코드: else_if.c
#include <stdio.h>
int main(void)
{
int score = 59;
if (score >= 90)
{
printf("A\n");
}
else if (score >= 80)
{
printf("B\n");
}
else if (score >= 70)
{
printf("C\n");
}
else if (score >= 60)
{
printf("D\n");
}
else
{
printf("F\n");
}
return 0;
}
F
여러 개의 else if 문을 사용하여 다중으로 조건을 처리하고 마지막의 else 문을 기본값으로 사용하는 다중 if 문의 사용 예입니다.
13.25 점수에 따른 학점 계산 프로그램
사용자로부터 입력되는 점수에 따른 학점을 계산하는 프로그램을 작성해 보겠습니다. 단, 점수는 반드시 정수로 입력해야 합니다.
코드: score_grade.c
// if else 구문을 사용한 점수에 따른 학점 계산 프로그램
#include <stdio.h>
int main(void)
{
int score;
char grade;
printf("당신의 점수는? ");
scanf_s("%d", &score);
printf("\n");
printf("점수: %d점\n", score);
if (score >= 90)
{
grade = 'A';
}
else if (score >= 80)
{
grade = 'B';
}
else if (score >= 70)
{
grade = 'C';
}
else if (score >= 60)
{
grade = 'D';
}
else
{
grade = 'F';
}
printf("학점: %c학점\n", grade);
return 0;
}
당신의 점수는? 100
점수: 100점
학점: A학점
13.26 조건문(if 문)을 사용한 조건 처리 전체 정리
if 문을 사용하는 예제를 통해서 C 언어 프로그래밍 언어의 조건 처리를 위한 3가지 스타일과 기법을 정리해보겠습니다.
코드: if_else_all.c
#define _CRT_SECURE_NO_WARNINGS // scanf() 보안 경고에 따른 컴파일 에러 방지
#include <stdio.h>
int main(void)
{
int a = 0;
printf("정수 입력: _\b");
scanf("%d", &a);
//[1] if문
if (a % 2 == 0) // 짝수라면...
{
printf("짝수\n");
}
//[2] else문
if (a % 2 != 0) // 홀수
{
printf("홀수\n");
}
else
{
printf("짝수\n");
}
//[3] else if문
if (a % 3 == 0)
{
printf("3의 배수\n");
}
else if (a % 5 == 0)
{
printf("5의 배수\n");
}
else if (a % 7 == 0)
{
printf("7의 배수\n");
}
else
{
printf("3, 5, 7의 배수가 아닌 수\n");
}
return 0;
}
정수 입력: 4
짝수
짝수
3, 5, 7의 배수가 아닌 수
정수 입력: 13
홀수
3, 5, 7의 배수가 아닌 수
소스에 대한 추가 설명입니다.
- [1] if 문 : 입력된 숫자 값을 2로 나누었을 때 나머지가 0과 같으면(즉, 짝수이면) 메시지가 출력되고, 그렇지 않으면 다음 구문으로 넘어갑니다.
- [2] else문 : 입력된 숫자 값을 2로 나누었을 때 나머지가 0과 다르면, 즉, 홀수이면 첫 번째 문장(홀수)을 수행하고 그렇지 않으면 두 번째 문장(짝수)을 수행합니다.
- [3] else if 문 : 입력된 숫자 값을 3으로 나누었을 때 나머지가 0이면(즉, 3의 배수이면) 첫 번째 문장을 수행하고, 그렇지 않고 입력된 숫자 값을 5로 나누었을 때 나머지가 0이면(즉, 5의 배수이면) 두 번째 문장을 수행하고, 그렇지 않으면 나머지 문장을 수행합니다.
if 문과 같은 조건문은 어떤 문제를 해결함에 있어서 해당 데이터를 필터링(걸러냄)하는 역할을 주로 합니다. 주어진 데이터에서 짝수만 걸러낸다든가, 오늘 작성된 글만 검색한다든가 등등의 역할을 수행할 때도 if 문이 사용됩니다.
13.27 연습문제: if 조건문 사용하기 – 음수 판별
다음 소스 코드를 완성하여 "-1234은(는) 음수입니다."가 출력되게 만드세요.
코드: if_practice.c
// 음수 판별
#include <stdio.h>
int main(void)
{
int number = -1234;
if (number < 0)
{
printf("%d은(는) 음수입니다.\n", number);
}
return 0;
}
-1234은(는) 음수입니다.
-1234는 음수이기에 if 문의 조건절이 만족하려면 number < 0
형태를 사용하여 조건을 참으로 설정할 수 있습니다.
13.28 만 14세 미만 체크 코드 샘플
코드: if_exam.c
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
int age = 0;
int r = scanf("%d", &age);
if (age < 14)
{
printf("만 14세 미만 어린이는 부모님의 동의가 필요합니다.\n");
}
return 0;
}
13
만 14세 미만 어린이는 부모님의 동의가 필요합니다.
13.29 예제: if 문으로 절댓값 구하기
코드: if_absolute_value.c
// 예제: if 문으로 절댓값 구하기
#define _CRT_SECURE_NO_WARNINGS // scanf 보안 경고로 인한 컴파일 에러 방지
#include <stdio.h>
int main(void)
{
int num; // 입력값
int abs; // 절댓값
int _; // 버림(Discards)
//[1] 입력
printf("정수 하나를 입력하세요: "); _ = scanf("%d", &num);
//[2] 처리: 절댓값(Absolute Value) 구하기
if (num < 0)
{
abs = -num;
}
else
{
abs = num;
}
//[3] 출력
printf("%d의 절댓값: %d\n", num, abs);
return 0;
}
정수 하나를 입력하세요: -21
-21의 절댓값: 21
13.30 장 요약
프로그래밍의 시작은 순차적으로 무언가를 처리하는데 있습니다. 그런 이후 특정 조건에 따라서 서로 다른 조건을 처리해야할 필요성이 있어 if 문과 같은 제어문이 만들어졌습니다. C 언어에서 제공하는 조건문인 if 문과 else 문의 조합은 프로그래밍에 필수적으로 많이 사용되는 구문들입니다. 이번 장에서 여러 가지 모양으로 사용법들을 모두 소개한 것 같습니다. 이를 바탕으로 추가적인 제어문을 학습해 나가도록 하겠습니다.
퀴즈
다음 코드 조각 중 if 조건문을 올바르게 사용한 예는?
if (int x = 10) { printf("x는 10입니다.\n"); }
if (x == 10) printf("x는 10입니다.\n");
if x == 10 printf("x는 10입니다.\n");
if (x = 10) printf("x는 10입니다.\n");
정답: 2
해설:
- 1번은 조건문 내에서 변수를 선언하려고 하고 있습니다. 이것은 C 언어에서 허용되지 않는 문법입니다.
- 2번은 올바른 if 조건문의 형식을 가지고 있습니다.
x == 10
은 x가 10과 같은지 비교하는 조건입니다. - 3번은 조건을 괄호로 묶지 않았기 때문에 올바르지 않습니다.
- 4번은
x = 10
이라는 할당 연산을 사용하였습니다. if 조건문에서는 비교 연산==
을 사용해야 합니다.