< 제어문의 개념 이해하기 >
> 제어문의 개념
1) 제어문이란?
(1) 프로그램 명령이 실행되는 순서를 제어하는 명령문
- 조건문 : 조건이 참인지 거짓인지에 따라서 실행 명령을 분리하는 것
- 반복문 : 조건이 참인 동안 명령들을 반복 수행하는 것
2) 제어문의 종류
- 조건문 : if, switch ~ case
- 반복문 : for, while, do ~ while
> 제어문의 구조
1) 제어문 구조의 종류
: 순차구조, 선택구조, 반복구조
(1) 순차구조 (기본)
- 명령문 하나씩 위에서 아래로 순차적으로 실행
(2) 선택구조 (조건문)
- 조건식의 참과 거짓에 따라 명령문들을 분리하여 실행
(3) 반복구조 (반복문)
- 조건식이 참인 동안 명령문들을 실행
< if 조건문 이해하기 >
> if 조건문의 개요
1) if 조건문 규칙
- 참과 거짓을 구분하여 실행하는 명령어 블록은 중괄호 ( { } ) 로 표시
- 참과 거짓을 구분하여 실행하는 명령어가 한 개일 경우는 중괄호 ( { } ) 생략 가능
- if 조건문의 명령어 블록 내부에 또다시 if 조건문을 사용할 수 있음 (중첩 가능)
- 중괄호 ( { } ) 내부에 선언된 변수는 중괄호 ( { } ) 안에서만 사용가능
- 중괄호 ( { } ) 외부에 선언된 변수는 내부에서 사용할 수 있음
- 조건식에는 세미콜론 ( ; ) 을 붙이지 않음
2) if 조건문 종류
: 단순 if문, if() ~ else문, if() ~ else if ()문, if() ~ else if() ~ else문
> if 문의 사용방법
1) 단순 if 문
(1) 구조
- 조건식이 참인 경우 실행되는 블록을 가지는 구조
* 조건식은 괄호 안에 정의되며 참과 거짓을 판별함
조건식 괄호 다음에는 세미콜론이 없는 것을 유의
A 블록은 조건식이 참인 경우 실행되는 명령어 블록으로 중괄호 내부를 의미함
B 블록은 if문 중괄호 외부로서 조건식이 참인경우에는 A 블록 실행 후 B 블록 실행
조건식이 거짓인 경우에는 A 블록은 실행하지 않고 B 블록 실행
그러므로 B블록은 조건식과 상관없이 실행되는 블록
추가적으로 A 블록에 명령어가 한개만 있다면 중괄호 생략 가능
(2) 예제
#include <stdio.h>
int main(void)
{
int a = 10;
if (a == 10)
{
a += 2;
}
a += 3;
printf("%d\n", a); // 15
return 0;
}
2) if ( ) ~ else 문
(1) 구조
- 조건식이 참인 경우와 거짓인 경우 각각의 실행 블록을 가지고 있는 구조
* if 문의 조건식에 따라
참이면 실행되는 A 블록과 거짓이면 실행되는 B 블록으로 구성됨
B 블록은 else 문 이후의 중괄호 내부
C 블록은 if else 문이 실행된 후에 진행되는 블록
조건식이 참인 경우 A 블록 다음 C 블록
조건식이 거짓인 경우 B 블록 다음 C 블록
#include <stdio.h>
int main(void)
{
int a;
printf("Input any Num : ");
scanf_s("%d", &a);
if (a < 10)
{
a += 2;
}
else
{
a -= 2;
}
a += 3;
printf("%d\n", a);
return 0;
}
* 키보드로부터 정수값을 입력받아 변수 a 에 저장
변수 a의 값이 10보다 작으면 조건식이 참이 되어 블록 내부에 있는 a 변수에 2 를 더하는 명령문이 실행
변수 a의 값이 10보다 크거나 같으면 조건식이 거짓이되어 else문 블록에 있는 변수 a 에 2 를 빼는 명령문 실행
if else 문이 모두 실행되면 변수 a 에 3을 더하며 종료
조건식이 참 또는 거짓인 경우 실행되는 블록 내부의 명령문이 하나이므로 다음과 같이 중괄호( { } )생략 가능
if (a < 10)
a += 2;
else
a -= 2;
3) if ( ) ~ else if ( ) 문
(1) 구조
- 여러 개의 조건식이 참이면 실행되는 블록들을 가지는 구조
#include <stdio.h>
int main(void)
{
int a = 80;
char k;
if (a >= 90)
{
k = 'A';
}
else if (a >= 80)
{
k = 'B';
}
else if (a >= 70)
{
k = 'C';
}
printf("%c\n", k);
return 0;
}
* 각 조건식의 실행 블록들이 명령문을 한개씩 가지고 있으므로 다음과 같이 중괄호를 생략하여 작성할 수 있음.
#include <stdio.h>
int main(void)
{
int a = 80;
char k;
if (a >= 90) k = 'A';
else if (a >= 80) k = 'B';
else if (a >= 70) k = 'C';
printf("%c\n", k);
return 0;
}
4) if ( ) ~ else if ( ) ~ else 문
(1) 구조
- 여러 개의 조건식이 참이면 실행되는 블록들과
모든 조건식이 거짓인 경우 실행되는 블록을 가지는 구조
#include <stdio.h>
int main(void)
{
int a;
char k;
printf("1 ~ 100 사이 점수 : ");
scanf_s("%d", &a);
if (a >= 90)
{
k = 'A';
}
else if (a >= 80)
{
k = 'B';
}
else
{
k = 'F';
}
printf("학점 : %c", k);
return 0;
}
* 중괄호 생략 가능
#include <stdio.h>
int main(void)
{
int a;
char k;
printf("1 ~ 100 사이 점수 : ");
scanf_s("%d", &a);
if (a >= 10) k = 'A';
else if (a >= 80) k = 'B';
else k = 'F';
printf("학점 : %c", k);
return 0;
}
> if 조건문 실습
#include <stdio.h>
int main(void)
{
int input;
// 단순 if ( ) 문
printf("단순 if()문 연습\n");
printf("input = ");
scanf_s("%d", &input);
if (input == 10)
{
input += 2;
}
/*if (input == 10) {
input += 2;
}
if (input == 10)
input += 2;
if (input == 10) input += 2;*/
input += 3;
printf("input = %d\n", input);
// if ( ) ~ else 문
printf("if() ~else문 연습\n");
printf("input = ");
scanf_s("%d", &input);
if (input < 10)
{
input += 2;
}
else
{
input -= 2;
}
input += 3;
printf("input = %d\n", input);
// if( ) ~ else if( ) 문
char result;
printf("if()~else if() 문 연습\n");
printf("input = ");
scanf_s("%d", &input);
if (input >= 90)
{
result = 'A';
}
else if (input >= 80)
{
result = 'B';
}
else if (input >= 70)
{
result = 'C';
}
printf("input = %d, result = %c\n", input, result);
// if( )~ else if( ) ~ else 문
printf("input = ");
scanf_s("%d", &input);
if (input >= 90)
{
result = 'A';
}
else if (input >= 80)
{
result = 'B';
}
else if (input >= 70)
{
result = 'C';
}
else
{
result = 'F';
}
printf("input = %d, result = %c\n", input, result);
return 0;
}
< switch 이해하기 >
> switch 조건문의 개요
1) switch 조건문이란?
(1) if( )~else if( )문 또는 if( )~else if( )~else문의 복잡성의 단순화
(2) case문, break문, default문으로 구성됨
#include <stdio.h>
int main(void)
{
if (조건식)
{
명령문
}
else if (조건식2)
{
명령문
}
else if (조건식3)
{
명령문
}
else
{
명령문
}
return 0;
}
* 위 코드를 아래 코드로 단순화
#include <stdio.h>
int main(void)
{
switch (변수 또는 수식)
{
case 상수1:
명령문들
break;
case 상수2:
명령문들
break;
default:
명령문들
break;
}
return 0;
}
2) switch 조건문 구조
- 변수는 정수형 또는 문자형 변수만 사용
- 수식은 정수형 또는 문자형 결과값이 나오는 수식 사용
- case문은 switch문 내부에 1 개 이상 사용
- swtich 문에는 세미콜론( ; )을 사용하지 않음
- case문과 default문의 마지막에 콜론( : ) 사용
- 키보드 입력 처리에 적합한 제어문
- enum data 와 같이 사용 될 수 있다.
- A 블록
- 상수1 값과 "변수 또는 수식"의 값이 동일한 경우 A 블록 실행
- 동일하지 않으면 다음 case 문 실행
- A 블록 실행 후 break 문이 실행되면 switch 문의 중괄호 외부로 제어가 이동되며
만약 break 문이 없으면 순차적으로 B 블록 실행
- B 블록
- 상수2 값과 "변수 또는 수식"의 값과 동일한 경우 B 블록 실행
- 동일하지 않으면 다음 default 문 실행
- B 블록 실행 후 break 문이 실행되면 switch 문의 중괄호 외부로 제어가 이동되며
만약 break 문이 없으면 순차적으로 C 블록 실행
- C 블록
- default 문은 case 문의 모든 상수값들과 "변수 또는 수식"의 값이 동일하지 않으면 C 블록 실행
- switch 문 내부 마지막 1개만 사용
- C 블록이 실행된 후 break 문이 실행되면 switch 문 중괄호 외부로 제어가 이동되는데
switch 문의 마지막이므로 break 문 생략 가능
> switch 조건문의 활용
1) switch 조건문과 if 조건문의 비교
2) switch 조건문과 순서도
3) switch 조건문 예 (정수를 이용한)
(1) 숫자 1과 2를 문자열 "ONE", "TWO" 로 출력하는 프로그램
(2) 숫자 1과 2가 아니면 "ERROR" 를 출력함
#include <stdio.h>
int main(void)
{
int a = 1; // 1 or 2 or any num
switch (a)
{
case 1:
printf("ONE\n");
break;
case 2:
printf("TWO\n");
break;
default:
printf("ERROR\n");
break;
}
return 0;
}
4) switch 조건문 예 (문자를 이용한)
(1) 소문자 'a' 또는 'b'를 입력하면 대문자 'A', 'B' 를 출력하는 프로그램
(2) 소문자 'a' 도 아니고 'b' 도 아니면 "ERROR"를 출력함
#include <stdio.h>
int main(void)
{
char type;
printf("a와 b중 선택 :");
scanf_s("%c", &type);
switch (type)
{
case 'a':
printf("A\n");
break;
case 'b':
printf("B\n");
break;
default:
printf("ERROR\n");
break;
}
return 0;
}
5) switch 조건문 예 (수식을 이용한)
- 홀수와 짝수를 구분하여 출력하는 프로그램
#include <stdio.h>
int main(void)
{
int type;
printf("정수를 입력하시오 : ");
scanf_s("%d", &type);
switch (type % 2)
{
case 0:
printf("짝수입니다.\n");
break;
case 1:
printf("홀수입니다.\n");
break;
}
return 0;
}
> switch 조건문 실습
#include <stdio.h>
int main(void)
{
// 숫자를 문자로 변경하는 프로그램
int input;
printf("숫자를 문자로 변경\n");
printf("input = ");
scanf_s("%d", &input);
/*아래 예제의 숫자 입력 받아서 input 값에 넣었지만
그 뒤에 Enter 값이 처리되지 않고 버퍼에 남아있음 */
switch (input)
{
case 1:
printf("ONE\n");
break;
case 2:
printf("TWO\n");
break;
case 3:
printf("THREE\n");
break;
default:
printf("ERROR\n");
break;
}
// 소문자를 대문자로 변경하는 프로그램
char ch;
printf("소문자를 대문자로 변경\n");
printf("input = ");
getchar();
/*그래서 다음 문자릅 입력 받기 전에 getchar 함수를
호출해서 Enter 값을 입력 받아서 의미 없이 처리함
만약에 getchar 가 없다면 아래 &ch에 Enter 값이 들어가고
키보드에서 입력받지 않고 넘어가는 증상이 나올 수 있음*/
scanf_s("%c", &ch, sizeof(char));
switch (ch)
{
case 'a':
printf("A\n");
break;
case 'b':
printf("B\n");
break;
case 'c':
printf("C\n");
break;
default:
printf("ERROR\n");
break;
}
// 홀수와 짝수를 구분하는 프로그램
printf("홀수와 짝수를 구분\n");
printf("input = ");
scanf_s("%d", &input);
switch (input % 2)
{
case 0:
printf("%d는 짝수입니다.\n", input);
break;
case 1:
printf("%d는 홀수입니다.\n", input);
break;
}
return 0;
}
< 프로그램 작성 >
점수를 입력 받아 학점을 출력하는 프로그램을 비주얼스튜디오에서 작성하고 실행하시오.
- if 문을 이용하는 프로그램과 switch 문을 이용하는 프로그램을 각각 작성하시오.
- 100 ~ 90(A), 89 ~ 80(B), 79 ~ 70(C), 69 ~ 60(D), 59 ~ (F)
#include <stdio.h>
int main(void)
{
int score;
char grade;
printf("점수는 = ");
scanf_s("%d", &score);
// if 문을 이용
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("(if문) 학점은 %c 입니다.\n", grade);
// switch 문을 이용
int num = score / 10;
//0 ~ 100점을 나누면 0 ~ 10까지 나옴(정수형이기 때문에 소수점은 버려짐
switch (num)
{
case 10:
case 9: grade = 'A'; break;
case 8: grade = 'B'; break;
case 7: grade = 'C'; break;
case 6: grade = 'D'; break;
default: grade = 'F'; break;
}
printf("(switch문)학점은 %c 입니다.\n", grade);
return 0;
}
'Language > C & C++' 카테고리의 다른 글
C_07. Basic Grammar of Array (0) | 2022.08.11 |
---|---|
C_06. Basic Grammar of Iteration Statement (0) | 2022.08.10 |
C_04. Basic Grammar of Logical and Conditional Operator (0) | 2022.08.09 |
C_03. Basic Grammar of Arithmetic and Relational Operator (0) | 2022.08.08 |
C_02. Basic Grammar of Data Type and Variable (0) | 2022.08.02 |