C 조건문은 조건에 따라 결정을 내리는 데 사용됩니다. 조건이 없는 문장들은 순차적으로 실행되지만, 문장 블록에 조건을 걸면 조건 평가 결과에 따라 실행 흐름이 바뀔 수 있습니다. 이 과정을 C에서 '의사 결정(decision making)'이라고 합니다.
C 프로그래밍에서 조건문은 다음 두 구조로 가능합니다:
1. If 문
2. If-else 문
프로그램이 평가된 조건 결과에 따라 어떤 문장을 실행할지 결정하므로 '분기(branching)'라고도 부릅니다.
이 튜토리얼에서 배울 내용:
조건문이란?
If 문
관계 연산자
If-Else 문
조건 표현식
중첩 If-else 문
중첩 Else-if 문
If 문
프로그램 실행 흐름을 수정하는 강력한 조건문입니다. If 문은 항상 조건과 함께 사용됩니다. 조건이 먼저 평가되고, If 본문 안의 문장이 실행됩니다. 문법:
if (condition) instruction;
조건은 true(참) 또는 false(거짓)로 평가됩니다. True는 0이 아닌 값, false는 0을 포함하는 값입니다. 명령문은 단일 명령이거나 중괄호 { }로 감싼 코드 블록일 수 있습니다.
다음 프로그램은 C에서 if 구조 사용을 보여줍니다:
#include<stdio.h>
int main() {
int num1=1;
int num2=2;
if(num1<num2) // 테스트 조건
{
printf("num1 is smaller than num2");
}
return 0;
}
출력:
num1 is smaller than num2
위 프로그램은 두 숫자의 동등성 확인을 위한 if 구조 사용을 보여줍니다.
위 프로그램에서 num1, num2 두 변수를 1, 2로 초기화했습니다.
if에 테스트 표현식을 사용하여 어느 숫자가 더 작은지, 더 큰지 확인했습니다. 관계 표현식을 if 구조에 사용했습니다. num1 값이 num2보다 작으므로 조건은 true로 평가됩니다.
따라서 If 블록 안의 문장이 출력됩니다. 이후 제어는 블록 밖으로 나가고 프로그램은 성공적으로 종료됩니다.
관계 연산자(Relational Operators)
C에는 불리언 표현식을 구성하여 의사 결정과 조건 테스트에 사용할 수 있는 여섯 관계 연산자가 있습니다. 결과는 true 또는 false:
< 작음
<= 작거나 같음
> 큼
>= 크거나 같음
== 같음
!= 다름
등호 테스트(==)가 대입 연산자(=)와 다르다는 점에 유의하세요. 이는 프로그래머가 가장 흔히 혼동하는 문제 중 하나입니다.
예시:
int x = 41;
x = x + 1;
if (x == 42) {
printf("You succeed!");
}
출력:
You succeed
0이 아닌 값으로 평가되는 조건은 true로 간주됨을 기억하세요.
예시:
int present = 1;
if (present)
printf("There is someone present in the classroom \n");
출력:
There is someone present in the classroom
If-Else 문
If-else 문은 If의 확장 버전입니다. 일반적인 형태:
if (test-expression) {
True block of statements
} Else {
False block of statements
}
Statements;
이 구조에서 test-expression 값이 true이면 true 블록 문장 실행, false이면 false 블록 문장 실행. 어느 경우든 실행 후 제어는 자동으로 If 블록 밖의 문장으로 이동합니다.
다음 프로그램은 if-else 구조 사용을 보여줍니다:
변수를 어떤 값으로 초기화하고, 그 값이 10보다 작은지 큰지 판단하는 프로그램을 작성해 봅시다.
시작해 볼까요.
#include<stdio.h>
int main() {
int num=19;
if(num<10) {
printf("The value is less than 10");
} else {
printf("The value is greater than 10");
}
return 0;
}
출력:
The value is greater than 10
변수를 19로 초기화했습니다. C 프로그램을 사용해 이 숫자가 10보다 큰지 작은지 알아내야 합니다. 이를 위해 if-else 구조를 사용했습니다.
우리의 값을 10과 비교해야 하므로 조건 num<10을 제공했습니다.
첫 번째 블록은 항상 true 블록입니다. 즉, test-expression 값이 true이면 첫 번째 블록인 If가 실행됩니다.
두 번째 블록은 else 블록입니다. test-expression 값이 false가 되면 실행될 문장들이 여기에 있습니다. 우리 프로그램에서 num 값은 10보다 크므로 테스트 조건은 false가 되고 else 블록이 실행됩니다. 따라서 출력은 else 블록의 "The value is greater than 10"이 됩니다. if-else 후 프로그램은 성공적으로 종료됩니다.
C 프로그래밍에서 여러 if-else 구조를 서로 내부에 사용할 수 있으며, 이를 if-else 문의 중첩(nesting)이라고 합니다.
조건 표현식(Conditional Expressions)
if-else 문을 표현하는 또 다른 방법은 ?: 연산자를 도입하는 것입니다. 조건 표현식에서 ?: 연산자는 if와 else에 각각 하나의 문장만 연결합니다.
예시:
#include <stdio.h>
int main() {
int y;
int x = 2;
y = (x >= 6) ? 6 : x;/* 이는 다음과 동등: if (x >= 5) y = 5; else y = x; */
printf("y =%d ",y);
return 0;
}
출력:
y =2
중첩 If-else 문(Nested If-else Statements)
일련의 결정이 필요할 때 중첩 if-else를 사용합니다. 중첩이란 하나의 if-else 구조를 다른 하나 안에 사용하는 것을 의미합니다.
중첩 if-else 사용을 보여주는 프로그램을 작성해 봅시다.
#include<stdio.h>
int main() {
int num=1;
if(num<10) {
if(num==1) {
printf("The value is:%d\n",num);
} else {
printf("The value is greater than 1");
}
} else {
printf("The value is greater than 10");
}
return 0;
}
출력:
The value is:1
위 프로그램은 숫자가 10보다 작은지 큰지 확인하고 중첩 if-else 구조를 사용해 결과를 출력합니다.
먼저 num 변수를 1로 선언했습니다. 그런 다음 if-else 구조를 사용했습니다.
외부 if-else에서 조건은 숫자가 10보다 작은지 확인합니다. 조건이 true일 때만 내부 블록이 실행됩니다. 이 경우 조건이 true이므로 내부 블록이 처리됩니다.
내부 블록에서 다시 우리 변수가 값 1을 포함하는지 확인하는 조건이 있습니다. 조건이 true이면 If 블록 처리, 그렇지 않으면 else 블록 처리. 이 경우 조건이 true이므로 If 블록이 실행되고 값이 출력 화면에 출력됩니다.
위 프로그램은 변수 값을 출력하고 성공적으로 종료됩니다.
변수 값을 바꿔가며 프로그램 동작을 확인해 보세요.
참고: 중첩 if-else에서는 여러 if-else 구조가 관여하므로 개별 구조를 파악하기 어려워집니다. 적절한 들여쓰기로 프로그램을 읽기 쉽게 만드세요.
이 구조를 else-if 래더라고 합니다. 이 체인은 일반적으로 사다리처럼 보이므로 else-if 래더라고도 부릅니다. 테스트 표현식은 위에서 아래로 평가됩니다. true인 테스트 표현식을 찾으면 그와 연결된 문장이 실행됩니다. 모든 n 테스트 표현식이 false가 되면 기본 else 문장이 실행됩니다.