Trivia
5강.조건문 본문
5.1 조건문이란
▶조건문: 조건에 따라서 여러개의 실행 경로 가운데 하나를 선택
cf1) 제어문: 문장이 실행되는 순서에 영향을 주는 문장
cf2) 반복문: 조건에 따라서 여러개의 같은 처리를 반복
5.2 if문
▶if문: 조건에 따라서 결정을 내리는 경우에 사용
if( 조건식 ) → 조건식이 참으로 계산되면
문장; → 문장이 실행
①if문의 예1
if( number > 0 ) //number가 0보다 크면
printf("양수입니다\n"); //"양수입니다"를 출력
②if문의 예2: if문이 끝나면 if문 다음 문장이 실행
if( temperature < 0)
printf("현재 영하입니다.\n", temperature); //조건이 참일 때만 실행
printf("현재 온도는 %d도 입니다.\n", temperature); //항상 실행
ex) 예제 프로그램: if문 예제
//if문
#include <stdio.h>
int main()
{
int num;
printf("정수를 입력하시오: ");
scanf("%d", &num);
if(num > 0)
printf("양수입니다.\n");
printf("입력된 값은 %d입니다.\n", num);
return 0;
}
정수를 입력하시오: 39
양수입니다.
입력된 값은 25입니다.
ex) 예제 프로그램: if문을 사용한 절대값 구하는 프로그램
//if문을 사용하여 절대값을 구하는 프로그램
#include <stdio.h>
int main()
{
int num;
printf("정수를 입력하시오: ");
scanf("%d", &num);
if( num < 0 )
num = -num;
printf("절대값은 %d입니다.\n", num);
return 0;
}
정수를 입력하시오: -7
절대값은 7입니다.
▶복합문
①중괄호를 사용하여 문장들을 묶는 것
②블록(block)이라고도 함
③단일문 대신 들어갈 수 있음
if( score >= 60 )
{
printf("합격입니다.\n");
printf("장학금도 받을 수 있습니다.\n"); //조건식이 참이면 2개의 문장이 묶여서 실행
}
※중간 점검※
Q1. 중괄호로 묶은 여러 개의 문장을 무엇이라고 하는가?
A1. 복합문
Q2. C에서 참과 거짓은 어떤 정수로 표시되는가?
A2. 참은 1, 거짓은 0
Q3. if문안의 조건식으로 많이 사용되는 수식의 종류는 무엇인가?
A3. 비교연산자
Q4. if문이 끝나면 어떤 문장이 실행되는가?
A4. if문 다음 문장이 실행
Q5. 조건에 따라서 실행되어야 하는 문장이 두개 이상이면 어떻게 처리하는가?
A5. 중괄호로 묶어서 처리
5.3 if~else문
▶if-else문
if( 조건식 )
문장1; → 조건식이 참이면 실행
else
문장2; → 조건식이 거짓이면 실행
if( score >= 70 )
printf("합격입니다.\n"); //score가 60이상이면 실행
else
printf("불합격입니다.\n"); //score가 60이만이면 실행
if( score >= 80 )
{
printf("합격입니다.\n");
printf("장학금도 받을 수 있습니다.\n"); //score가 60이상이면 실행
}
else
{
printf("불합격입니다.\n");
printf("공부하십시오.\n"); //score가 60미만이면 실행
}
ex) 예제 프로그램: if-else문을 이용한 예제
//if-else문을 이용하여 짝수와 홀수를 구분하는 프로그램
#include <stdio.h>
int main()
{
int num;
printf("정수를 입력하시오: ");
scanf("%d", &num);
if( num % 2 == 0 )
printf("입력하신 정수는 짝수입니다.\n");
else
printf("입력하신 정수는 홀수입니다.\n");
return 0;
}
정수를 입력하시오: 39
입력하신 정수는 홀수입니다.
▶복잡한 조건식도 가능
①예제1: 학점 결정 코드
if( score >= 80 && score < 90 )
grade = 'B';
②예제2: 공백 문자들의 개수를 세는 코드
if( ch == '' || ch == '\n' || ch == '\t' ) //||로 연결되는 3개의 조건 중 하나라도 만족하면
white_space++; 다음으로 넘어감
ex) 예제 프로그램: if-else문을 이용한 예제2
//if-else문을 이용하여 나눗셈을 하기 전에 분모가 0인지를 검사
#include <stdio.h>
int main()
{
int n, d, result;
printf("분자와 분모를 입력하세요: ");
scanf("%d %d", &n, &d);
if( d == 0 )
printf("0으로는 나눌 수 없습니다.\n");
else
{
result = n / d;
printf("결과는 %d입니다.\n", result);
}
return 0;
}
분자와 분모를 입력하세요: 7 3
결과는 2입니다.
분자와 분모를 입력하세요: 7 0
0으로는 나눌 수 없습니다.
※중간 점검※
Q. 변수 n의 값이 100보다 크거나 같으면 "large", 100보다 작으면 "small"을 출력하는 if-else문을 작성하라.
A. #include <stdio.h>
int main()
{
int n;
printf("정수를 입력하세요: ");
scanf("%d", &n);
if( n >= 100 )
printf("large\n");
else
printf("small\n");
return 0;
}
5.4 다중 if문
▶중첩 if: if문에 다시 if문이 포함됨
if( 조건식1 )
if( 조건식2 )
문장;
if( score > 80 )
if( score > 90 ) //if문안의 문장자리에 if문이 들어간 경우
printf("당신의 학점은 A입니다.\n");
if( score > 80 )
if( score > 90 ) //if문안의 문장자리에 if-else문이 들어간 경우
printf("당신의 학점은 A입니다.\n");
else
printf("당신의 학점은 B입니다.\n");
▶if와 else의 매칭 문제
①else절은 가장 가까운 if절과 매치
if( score > 80 )
if( score > 90 ) //else절은 가장 가까운 if절과 매치
printf("당신의 학점은 A입니다.\n");
else
printf("당신의 학점은 B입니다.\n");
②다른 if절과 매치시키려면 중괄호를 사용
if( score > 80 )
{
if( score > 90 )
printf("당신의 학점은 A입니다.\n");
} //만약 다른 if절과 else절을 매치시키려면 중괄호를 사용하여 블록으로 묶음
else
printf("당신의 학점은 A나 B가 아닙니다.\n");
▶중첩 if
if( score > 80 )
{
if( score > 90 ) //if-else절 안에 다른 if-else절 포함 가능
printf("당신의 학점은 A입니다.\n");
else
printf("당신의 학점은 B입니다.\n");
}
else
{
if( score > 70 )
printf("당신의 학점은 C입니다.\n");
else
printf("당신의 학점은 D 또는 F입니다.\n");
}
▶연속적인 if
if( 조건식1 )
문장1;
else if( 조건식2 )
문장2;
else if( 조건식3 )
문장3;
else
문장4;
ex) 예제 프로그램: 연속적인 if 사용 예제
//성적을 입력 받아서 연속적인 if를 사용하여 학점을 표기하는 코드
#include <stdio.h>
int main()
{
int score;
printf("당신의 성적을 입력하세요: ");
scanf("%d", &score);
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;
}
당신의 성적을 입력하세요: 75
합격: 학점 B
ex) 예제 프로그램: 연속적인 if 사용 예제2
//문자들을 분류하는 프로그램
#include <stdio.h>
int main()
{
char ch;
printf("문자를 입력하세요: ");
scanf("%c", &ch);
if( ch >= 'A' && ch <= 'Z' )
printf("%c는 대문자입니다.\n", ch);
else if( ch >= 'a' && ch <= 'z' )
printf("%c는 소문자입니다.\n", ch);
else if( ch >= '0' && ch <= '9')
printf("%c는 숫자입니다.\n", ch);
else
printf("%c는 기타문자입니다.\n", ch);
return 0;
}
문자를 입력하세요: G
G는 대문자입니다.
문자를 입력하세요: 1
1는 숫자입니다.
문자를 입력하세요: !
!는 기타문자입니다.
ex) 예제 프로그램: 연속적인 if 사용 예제3
//연속적인 if를 이용한 산술 계산
#include <stdio.h>
int main()
{
int x, y; //입력될 두 수
char op; //사용할 연산자
printf("수식을 입력하세요: ");
scanf("%d %c %d", &x, &op, &y);
if( op == '+' )
printf("%d %c %d = %d\n", x, op, y, x + y);
else if( op == '-' )
printf("%d %c %d = %d\n", x, op, y, x - y);
else if( op == '*' )
printf("%d %c %d = %d\n", x, op, y, x * y);
else if( op == '/' )
printf("%d %c %d = %d\n", x, op, y, x / y);
else if( op == '%' )
printf("%d %c %d = %d\n", x, op, y, x * y);
else
printf("지원되지 않는 연산자입니다.\n");
return 0;
}
수식을 입력하세요: 3 + 9
3 + 9 = 12
수식을 입력하세요: 3 * 9
3 * 9 = 27
수식을 입력하세요: 3 @ 9
지원되지 않는 연산자입니다.
※중간 점검※
Q. n의 값이 각각 -1, 0, 5인 경우에 다음의 코드에 의하여 생성되는 출력은 무엇인가?
if( n == 0 )
printf("A");
else if( n > 3 )
printf("B");
else
printf("C");
A. n의 값이 -1일 경우, C
n의 값이 0일 경우, A
n의 값이 5일 경우, B
5.5 switch문
▶switch문: 여러 가지 경우 중에서 하나를 선택하는데 사용
switch( 조건식 )
{
case c1:
문장1;
break;
case c2:
문장2;
break;
case c3:
문장3;
break;
default:
문장d;
break;
}
ex) 예제 프로그램: 간단한 switch문 예제
//간단한 switch문 예제
#include <stdio.h>
int main()
{
int num;
printf("정수를 입력하시오: ");
scanf("%d", &num);
switch(num)
{
case 0:
printf("없음\n");
break;
case 1:
printf("하나\n");
break;
case 2:
printf("둘\n");
break;
default:
printf("많음\n");
break;
}
return 0;
}
정수를 입력하시오: 3
많음
▶break가 생력되는 경우: break를 만날 때까지 계속 문장을 실행
//의도적인 break를 생략한 경우
switch(num)
{
case 0:
printf("없음\n");
break;
case 1:
printf("한 개\n");
break;
case 2: //2개의 경우를 하나로 묶어서 처리하기 위하여
case 3:
printf("두서너 개\n");
break;
default:
printf("많음\n");
break;
}
▶default문: 어떤 case문과도 일치되지 않는 경우에 선택
▶switch문 사용 시 주의할 점: 반드시 정수 수식만 사용
switch(num)
{
case i: //변수는 사용 불가능
printf("i의 값\n");
break;
case 0.1: //실수는 사용 불가능
printf("실수\n");
break;
...
}
ex) 예제 프로그램: switch문을 이용한 달의 일수 계산하기
//switch문을 이용하여 달의 일수를 계산하는 프로그램
#include <stdio.h>
int main()
{
int month, days;
printf("일수를 알고 싶은 달을 입력하세요: ");
scanf("%d", &month);
switch(month)
{
case 2:
days = 28;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
default:
days = 31;
break;
}
printf("%d월의 일수는 %d입니다.\n", month, days);
return 0;
}
일수를 알고 싶은 달을 입력하세요: 7
7월의 일수는 31입니다.
※중간 점검※
Q1. case절에서 break문을 생략하면 어떻게 되는가?
A1. break를 만날때까지 계속 문장을 실행
Q2. 변수 fruit의 값이 각각 1, 2, 5일 때, 다음의 코드의 출력을 쓰시오.
switch(fruit)
{
case 1:
printf("사과");
break;
case 2:
printf("배");
case 3:
printf("바나나");
break;
default:
printf("과일");
break;
}
A2. fruit의 값이 1일 경우, 사과
fruit의 값이 2일 경우, 배
바나나
fruit의 값이 5일 경우, 과일
5.5 goto문
▶goto문: 조건없이 어떤 위치로 점프 (사용하지 않는 것이 좋음)
ex) 예제 프로그램: goto문을 이용한 구구단 출력
//goto문을 이용한 구구단 출력 프로그램
#include <stdio.h>
int main()
{
int i = 1;
loop:
printf("%d * %d = %d\n", 3, i, 3*i);
i++;
if(i==10)
goto end;
goto loop;
end:
return 0;
}
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
3 * 7 = 21
3 * 8 = 24
3 * 9 = 27
'C언어 > C프로그래밍 기초(1학기)' 카테고리의 다른 글
7강.배열 (0) | 2019.01.29 |
---|---|
6강.반복문 (0) | 2019.01.25 |
4강.수식과 연산자 (0) | 2019.01.15 |
3강.변수와 자료형 (0) | 2019.01.14 |
2강.C언어 기초(2) (0) | 2019.01.14 |