제 12강) 조건문1 - if문 |
조건문의 첫 시간입니다.
바로 "if문"에 대해서 배울건데요.
"if else문"이라고 말하기도 합니다.
조건문이 왜 필요한가? |
조건문이 없을 경우에는 위(왼쪽)와 같은 일이 벌어집니다.
하지만 있는 경우에는 위(오른쪽)와 같은 일이 벌어지죠.
즉, 상당히 유연하게 코딩이 가능하게 되는 것이죠.
1) if ~ else문 |
영어를 배우실 때 "if"에 대해서 배우셨을 것입니다.
"일반적인 if 의 뜻"은 "만약에 ~하면"이라는 뜻으로 많이 알고 계시죠.
C언어에서 if문도 같습니다.
if(조건)
{
// 조건이 참일 경우
}
else
{
// 조건이 참이 아닐 경우
}
if(num > 10)
{
// num이 10보다 큰 경우
}
else
{
// 그렇지 않은 경우
}
if else 는 위와 같이 사용하게 됩니다.
if의 괄호안에 조건을 주고 그 조건이 맞게되면 중괄호 안의 내용이 실행되구요.
그렇지 않게 되면 else의 중괄호 안의 내용이 실행됩니다.
#include <stdio.h>
int main()
{
int num;
printf("Number : ");
scanf("%d", &num);
if(num > 10)
{
printf("%d is over 10. \n", num);
}
else
{
printf("%d is not over 10. \n", num);
}
return 0;
}
위의 예제는 if문을 활용한 아주 간단한 예제입니다.
num을 입력받아서 if문의 조건(10보다 큰가, 안큰가)에 따라서 결과를 보여주는 프로그램이지요.
결과는 입력하는 수에 따라서 결과는 다릅니다.
2) if ~ else if ~ else문 |
if문을 사용하면 한 가지 불편한 것이 있습니다.
바로 조건이 하나만 들어가기 때문이죠.
그러한 상황으로 인해 위와 같은 참사가 벌어지게 됩니다.
그래서 이런 상황을 해결하기 위해서 조건을 더 줄 수 있는 "else if"가 있습니다.
if(조건1)
{
// 조건1이 참일 경우
}
else if(조건2)
{
// 조건2가 참일 경우
}
...
else if(조건n)
{
// 조건n이 참일 경우
}
else
{
// 위의 모든 조건이 참이 아닐 경우
}
if(num > 10)
{
// num이 10보다 큰 경우
}
else if(num == 10)
{
// num이 10과 같을
}
else
{
// 그렇지 않은 경우
}
이렇게 많은 조건을 붙일 수 있습니다.
#include <stdio.h>
int main(void)
{
int num = 0;
printf("숫자 하나를 입력해주세요 : ");
scanf("%d", &num);
if (num > 10)
printf("입력한 숫자는 10보다 큽니다. \n");
else if (num == 10)
printf("입력한 숫자는 10입니다. \n");
else
printf("입력한 숫자는 10보다 작습니다. \n");
return 0;
}
그래서 위의 예제를 작성하고 10을 입력하여 봅시다.
이렇게 다른 조건을 수용하게 됩니다.
번외) if문의 실행 순서 |
if ~ else if ~ else문이 어떤 순서로 실행되는가 궁금하지 않나요?
실행 순서는 위의 그림처럼 "위에서 아래로" 즉, 순서대로 조건을 검사하게 됩니다.
검사 중에 맞는 조건이 있다면 해당하는 코드를 실행한 후에 나중에 오는 조건 검사를 무시하게 됩니다.
그래서 1번 조건이 맞게 되면 나머지 2, 3번의 조건은 무시 되구요.
2번 조건이 맞게 되면 나머지 3번의 조건이 무시가 되죠.
3) if문의 중첩 |
if문을 여러 개 중첩시켜봅시다.
#include <stdio.h>
int main(void)
{
int num = 0;
printf("숫자 하나를 입력해주세요 : ");
scanf("%d", &num);
if(num > 0)
{
if(num % 2 == 0)
{
printf("%d는 자연수이고 짝수 입니다. \n", num);
}
else
{
printf("%d는 자연수이고 홀수 입니다. \n", num);
}
}
else
{
printf("%d는 자연수가 아닙니다. \n", num);
}
return 0;
}
간단하게 if문 안에 if문 1개를 더 집어넣었습니다.
실행 결과는 조건에 맞게 나올것입니다.
4) if~else if문과 다수의 if~else문 |
예제를 먼저 봅시다.
#include <stdio.h>
int main(void)
{
int num = 0;
printf("숫자 하나를 입력해주세요 : ");
scanf("%d", &num);
if (num >= 10)
printf("입력한 숫자는 10보다 크거나 같습니다. \n");
else if (num >= 100)
printf("입력한 숫자는 100보다 크거나 같습니다. \n");
else if (num >= 1000)
printf("입력한 숫자는 1000보다 크거나 같습니다. \n");
else
printf("입력한 숫자는 10보다 작습니다. \n");
return 0;
}
이 첫번째 예제와
#include <stdio.h>
int main(void)
{
int num = 0;
printf("숫자 하나를 입력해주세요 : ");
scanf("%d", &num);
if (num >= 10)
printf("입력한 숫자는 10보다 크거나 같습니다. \n");
if (num >= 100)
printf("입력한 숫자는 100보다 크거나 같습니다. \n");
if (num >= 1000)
printf("입력한 숫자는 1000보다 크거나 같습니다. \n");
if (num < 10)
printf("입력한 숫자는 10보다 작습니다. \n");
return 0;
}
이 두번째 예제의 결과가 과연 같을까요, 다를까요?
여기서 눈치가 있으신 분을은 바로 아실겁니다.
당연히 다르니까 물어봤겠죠.
왼쪽이 첫번째 예제, 오른쪽이 두번째 예제입니다.
바로 전에(if~else if~else문 설명) 설명했듯이 첫번째 예제는 조건을 실행할 때 가장 첫번째 조건부터 보고 그 조건이 맞으면 뒤에 오는 조건들을 전부 무시한다고 했습니다.
두번째 예제는 각각의 if문들이 있기 때문에 모든 if문을 검사를 하게 됩니다.
그래서 두번째 예제는 총 4번의 if문을 각각 검사하게 되는 것이지요.
5) if~else문 대신 쓰는 조건 연산자(삼항 연산자) |
간단한 조건을 체크하기 위해서 if~else문 대신 사용하는 삼항 연산자라는 것이 있습니다.
조건 ? 참일때 : 거짓일때;
ex) num >= 10 ? ans = 12 : ans = 16;
ex) num >= 10 ? printf("10보다 크거나 같음 \n") : printf("10보다 작음 \n");
위와 같이 사용합니다.
if~else 문과 비교를 해 보면
num >= 10 ? ans = 12 : ans = 16;
if(num >= 10)
ans = 12;
else
ans = 16;
num >= 10 ? printf("10보다 크거나 같음 \n") : printf("10보다 작음 \n");
if(num >= 10)
printf("10보다 크거나 같음 \n");
else
printf("10보다 작음 \n");
요렇게 서로 같게 됩니다.
삼항연산자는 else if 처럼 조건을 하나 더 줄 수는 없어도 if~else 중첩처럼 여러 개를 중첩할 수 있습니다.
#include <stdio.h>
int main(void)
{
int num = 0;
printf("숫자 하나를 입력해주세요 : ");
scanf("%d", &num);
num >= 10 ? (num >= 20 ? printf("20 over \n") : printf("10 over \n")) : printf("10 not over \n");
return 0;
}
하지만 이렇게 중첩을 줘야하는 상황이 생길 때는 if~else if 문이 더 좋을 수 있습니다.
(가독성이 떨어집니다.)
다음 시간에는 |
다음 시간에는 "조건문2 switch문"에 대해서 알아보겠습니다.
'Study > C언어' 카테고리의 다른 글
처음하시는 분들을 위한 C언어 기초강의 시즌2 - 14 [반복문1 - For] (0) | 2018.10.17 |
---|---|
처음하시는 분들을 위한 C언어 기초강의 시즌2 - 13 [조건문2 - switch문] (0) | 2018.10.17 |
처음하시는 분들을 위한 C언어 기초강의 시즌2 - 07 [입력문과 출력문(printf, scanf, scanf_s)] (0) | 2018.10.17 |
처음하시는 분들을 위한 C언어 기초강의 시즌2 - 08 [변수에 대한 추가적인 이야기] (0) | 2018.10.17 |
처음하시는 분들을 위한 C언어 기초강의 시즌2 - 10 [연산자 이야기] (0) | 2018.10.17 |