Programming 기초/C Language

C 언어 기초#5 제어문 - if, switch, goto, while, for, continue

코딩상륙작전 2023. 4. 8. 19:38

*제어문(control statement)

조건문(if, switch, goto)과 반복문(while, for, continue)이 있다.

 

*if문

참인 경우 실행됨. if(조건식)

 

예제) 문자를 입력받고 대문자, 소문자, 그 외 문자로 분류.

 

#define _CRT_SECURE_NO_WARNINGS		//scanf 사용하기 위한 정의.
#include<stdio.h>

int main(void)
{
	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;
}

char 타입 변수에 들어간 입력받은 것을 정수로 해석하여 사용할 수도 있고 아니면 이것을 아스키 코드로 간주하여 문자로 사용할 수도 있다.

 

* switch 문

- if 문에서 가능한 실행 경로는 두 개인데, 실행 경로가 여러 개인 경우에는 switch 문을 사용하는 것이 좋다.

- default 문은 어떤 case 문과도 일치되지 않는 경우에 선택되어 실행된다. 만약 default 문이 없고 일치하는 case 문도 없다면

   아무 것도 실행되지 않는다. (가급적 default 문 포함 시키는 것이 좋음)

- case절에 실수나 변수, 수식, 문자열을 사용하는 것은 컴파일 오류이다.

- break;가 없으면 해당 케이스를 실행 후 그 다음 케이스를 조건 일치 불일치와 상관없이 실행한다.

 

예제) 입력 받은 달이 몇 일까지 있는지 알려주는 프로그램

#define _CRT_SECURE_NO_WARNINGS		//scanf 사용하기 위한 정의.
#include<stdio.h>

int main(void)
{
	int month, days;

	printf("달을 입력하시오:");
	scanf("%d", &month);

	switch (month)
	{
		case 2:
			days = 28;
			break;
		case 4:
		case 6:		# break;가 없기 때문에 case 11의 days = 30;까지 실행된다. 
		case 9:
		case 11:
			days = 30;
			break;
		default:
			days = 31;
			break;
	}
	printf("%d월은 %d일입니다.\n", month, days);
	return 0;
}

cf. 숫자 외 입력을 받으면 오류가 뜸. 나중 포스팅에 숫자 외 입력을 처리하는 방법에 대해 논할 것임.

 

* goto 문

- goto문은 프로그램을 아주 복잡하게 만들기 때문에 유지보수에 어려움. goto문 사용하지 않는 것이 좋음.

- goto문은 원하는 위치(레이블)로 조건 없이 점프하게 하는 기능. (레이블은 점프를 원하는 위치에 이름을 붙인 것) 

- 함수를 점프할 수는 없음.

goto error;
...
...
...
error:
	printf("오류발생\n");

 

*EOF

 End Of File 이며, 파일의 끝을 표현하기 위해 정의해 놓은 상수이다(-1 값을 가지고 있다).

  함수 호출의 실패나, 윈도우에서 ctrl + z , 리눅스에서 ctrl + d를 입력 했을 경우 EOF를 반환한다.

 

*while문

while(조건) 형식으로,  조건이 참이면 반복.

 

예제) 입력 받은 값 중에 최솟값을 출력한다.

#define _CRT_SECURE_NO_WARNINGS		//scanf 사용하기 위한 정의.
#include<stdio.h>
#include<limits.h>			// 최대값에 대한 정의를 포함한 헤더파일을 불러온다.

int main(void)
{
	int number, min_value = INT_MAX; // 일단 정수의 최댓값을 대입해둔다.

	printf("정수를 입력하시오\n 종료는 Ctrl+z\n");

	while (scanf("%d", &number) != EOF)	//입력 받은 값이 EOF이면 while을 실행하지 않는다.
	{
		if (number < min_value)		// 입력 받은 값이 이전 입력값보다 작으면 최솟값으로 입력받는다.
			min_value = number;
	}
	printf("최솟값은 %d\n", min_value);

	return 0;

*continue

-> 조건문에 따른 continue의 동작 방식.

p.275

예제) 알파벳 소문자를 입력 받아 대문자로 바꿔주는 프로그램

#define _CRT_SECURE_NO_WARNINGS		//scanf 사용하기 위한 정의.
#include<stdio.h>

int main(void)
{
	char letter;
	printf("프로그램을 종료하려면 Q를 입력하시오.\n");

	while (1)
	{
		printf("소문자를 입력하시오: ");
		scanf(" %c", &letter); //공백 문자 제외

		if (letter == 'Q')		// Q를 입력하면 프로그램 종료.
			break;			// 반복문 탈출
		if (letter < 'a' || letter > 'z')
			continue;		// 반복문을 다시 실행한다.

		letter -= 32;	// 아스키코드에서 소문자와 대문자는 32만큼 차이난다
		printf("변환된 대문자는 %c입니다.\n", letter);
		
	}
	return 0;

*for 문

for(초기식 ; 조건식 ; 증감식)

초기식(initialization)은 반복 루프 전 한번만 실행. 변수 값 초기화.

조건식(expression)은 반복을 계속할 것인지 말 것인지 결정하는 수식. 관계식이나 논리식이어야 함.

증감식(increment)은 루프를 제어하는 변수를 증가시키거나 감소시킨다.

 

    다양한 for 루프

1. for( ; ; )  -> 무한 루프

2. for( ; i<10 ; i++) -> 초기식이나 조건식, 증감식이 없을 수 있다.

3. for(i = 0, sum=0 ; i<100 ; i++) -> 초기화 수식에 콤마 연산자를 사용하여 2개 이상의 변수를 초기화시킬 수도 있다.

4. for(printf("반복시작), i=0 ; i<100; i++) -> 초기화 자리에 다른 문장도 들어갈 수 있다.

 

예제) 복리 이자 계산기

#define _CRT_SECURE_NO_WARNINGS		//scanf 사용하기 위한 정의.
#include<stdio.h>

int main(void)
{
	int i, years;
	double total, rate, investment;

	printf("원금:");
	scanf("%lf", &investment);
	printf("이율(%%): ");		// %가 형식지정자로 쓰이므로 출력하려면 %앞에 %를 붙여줘야한다.
	scanf("%lf", &rate);
	printf("기간(년):");
	scanf("%d", &years);

	printf("==================\n");
	printf("연도 원리금\n");
	printf("==================\n");
	total = investment;
	rate /= 100.0;				// 복합대입연산자/=는 rate= rate / 100.0 을 의미 
	for (i = 0; i < years; i++)
	{
		total = total * (1 + rate);		 // 복합대입연산자 *=로 써도 됨.
		printf("%2d      %10.1f\n", i + 1, total); 	// &10.1f은 소수점 이하 1자리까지 표시
	}
	return 0;
}

 

 

 

 

 

출처 : 쉽게 풀어쓴 C언어 Express