문장들이 실행되는 순서를 제어하는 문장을 제어문이라고 한다.

제어문은 조건문과 반복문으로 나누어진다.

제어 구조는 순차구조, 선택구조, 반복구조로 나누어진다.

if문

if문은 조건식이 참이면 문장을 실행한다.

아래 코드는 양수인지 말해주는 코드이다.

#include<stdio.h>
int main(void) {
	int num;

	puts("정수를 입력하시오");
	scanf("%d", &num);

	if (num > 0)
		puts("양수입니다");
	printf("입력된 값은 %d입니다\n", num);
	return 0;

}

입력받은 num이 0보다 크게 되면 “양수입니다”를 출력한다.

if의 아랫 문장만 실행되는것에 유의하자

아랫 코드는 if else를 사용해 연산자에 따라 계산을 다르게 하는 코드이다

#include<stdio.h>
int main(void) {
	char a;
	float b, c;
	puts("수식을 입력하세요");
	scanf("%f%c%f",&b,&a,&c);
	if (a == '+')
		printf("%f와 %f의 합은 %f입니다", b, c, b + c);
	else if (a == '-')
		printf("%f와 %f의 차는 %f입니다", b, c, b - c);
	else if (a == '*')
		printf("%f와 %f의 곱은 %f입니다", b, c, b * c);
	else if (a == '/')
		printf("%f와 %f의 나눗기는 %f입니다", b, c, b / c);
	else if (a == '%')
		printf("%f와 %f의 나누기의 나머지는 %f입니다", b, c, b / c);
	else
		puts("연산자가 잘못되었습니다");
	return 0;
}

숫자 사이의 연산자에 따라 다른 연산을 할 수 있다.

else는 if도 else if도 아닌 나머지 조건들에 대한 실행이다.

다음은 이차방정식의 근을 구하는 코드이다.

#include<stdio.h>
#include<math.h>
main(void) {
	double a = 0, b = 0, c = 0, r1, r2, dis;
	scanf(" %lf%lf%lf", &a, &b, &c, &dis);
	dis = b*b - 4 * a*c;
	if (a == 0)
		printf("근은 %f 이다", -c / b);
	else if (dis < 0)
		puts("실근은 존재하지 않는다");
	else if (dis == 0)
		printf("중근 %f이다 ", r1 = (-b + sqrt(dis)) / 2 * a);
	else if (dis > 0)
		printf("근은 %f %f 이다 ", r1 = (-b + sqrt(dis)) / 2 * a, r2 = (-b - sqrt(dis) / 2 * a));
	return 0;
}

이차항 일차항 상수항을 순서대로 입력하면 판별식 dis(discriminant)의 값에 따라 근이 존재하는지 중근인지를 구별한다.

아래의 코드는 입력받은 정수가 몇인지 표시하는 switch문이다.

#include<stdio.h>
main(void) {
	int num;
	printf("정수를 입력하시오");
	scanf("%d", &num);
	switch (num){
	case 0: //세미콜론 ; 과 쌍점:을 잘 구분하자
			printf("없음");
			break;
	case 1:
		printf("하나");
		break;
	case 2:
		printf("둘");
		break;
	case 3:
		printf("셋");
		break;
	default:
		printf("많음");
		break;
	}
}

case 뒤 세미콜론이 아닌 쌍점임에 유의하라

다음은 달을 입력받아 일수를 출력하는 프로그램이다

#include<stdio.h>
main(void) {
	int month, days;
	puts("달을 입력하세요");
	scanf("%d", &month);
	switch (month){
	case 2: //세미콜론 ; 과 쌍점:을 잘 구분하자
			printf("없음");
			break;
	case 4:
	case 6:
	case 9:
	case 11:
		days = 30;
		break;
	default:
		days = 31;
		break;
	}
	printf("%d월의 일수는 %d입니다\n",month, days);
}

break를 나중에 씀으로써 다양한 case를 묶을 수 있다.

아래는 정수 2개를 입력받고 연산자를 입력해 계산하는 코드이다

#include<stdio.h>
main(void) {
	int x, y,result;
	char op;
	puts("정수 2개를 입력하세요");
	scanf(" %d%d", &x, &y);
	puts("연산자를 입력하세요");
	scanf(" %c", &op);
	switch (op){
	case '+': //세미콜론 ; 과 쌍점:을 잘 구분하자
		result = x + y;
		break;
	case '-':
		result = x - y;
		break;
	case '*':
		result = x + y;
		break;
	case '/':
		result = x + y;
		break;
	case '%':
		result = x + y;
		break;
	default:
		puts("지원되지 않는 연산자입니다");
		break;
	}
	printf("%d%c%d는 %d", x, op, y, result);
}

입력받는 연산자 c를 case ‘c’ 를 사용해 조건에 충족하면 실행한다.

goto문

아래는 goto문을 사용한 조건문이다.

#include<stdio.h>
main(void) {
	int i = 1;
loop:
	printf("%d*%d = %d\n", 3, i, 3 * i);
	i++;
	if (i == 10) //i가 10이면 end로 건너뛴다
		goto end;
	goto loop; //loop로 다시 돌아간다
end: //end문 쌍반점과 쌍점에 유의하라
	return 0;
}

i를 1로 놓고 loop라는 레이블을 실행한다.

loop안의 코드를 실행한다.

if i가 10이 되면 end 레이블을 실행한다.

아래 코드는 성적으로 학점을 구하는 코드이다

#include<stdio.h>
main(void) {
	int s;
	puts("프로그래밍 성적을 입력하세요 (100점만점)");
	scanf("%d", &s);

	switch (s/10){
    case 10:
	case 9:
		puts("A");
		break;
	case 8:
		puts("B");
		break;
	case 7:
		puts("C");
		break;
	case 6:
		puts("D");
		break;
	default:
		puts("E");
		break;
	}
}

정수로 나누면 나머지를 버림을 이용해 case로 범위를 지정할 수 있다

A학점 = 100~90

B학점 = 89~ 79

switch 를 쓸때 case 뒤 세미콜론;이 아닌 쌍반점:임을 유의하자

카테고리:

업데이트: