728x90
반응형

< 제어문의 개념 이해하기 >

 

> 제어문의 개념

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;
}
728x90
반응형

+ Recent posts