C언어 제어문
title: “c언어 제어문” categories:
-
C
#c언어 제어문 : 네이버 블로그
문장들이 실행되는 순서를 제어하는 문장을 제어문이라고 한다.
제어문은 조건문과 반복문으로 나누어진다.
제어 구조는 순차구조, 선택구조, 반복구조로 나누어진다.
if문
if문은 조건식이 참이면 문장을 실행한다.
아래 코드는 양수인지 말해주는 코드이다.
#include
int main(void) {
int num;
puts("정수를 입력하시오");
scanf("%d", #);
if (num > 0)
puts("양수입니다");
printf("입력된 값은 %d입니다\n", num);
return 0;
}
입력받은 num이 0보다 크게 되면 “양수입니다”를 출력한다.
if의 아랫 문장만 실행되는것에 유의하자
아랫 코드는 if else를 사용해 연산자에 따라 계산을 다르게 하는 코드이다
#include
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
#include
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
main(void) {
int num;
printf("정수를 입력하시오");
scanf("%d", #);
switch (num){
case 0: //세미콜론 ; 과 쌍점:을 잘 구분하자
printf("없음");
break;
case 1:
printf("하나");
break;
case 2:
printf("둘");
break;
case 3:
printf("셋");
break;
default:
printf("많음");
break;
}
}
case 뒤 세미콜론이 아닌 쌍점임에 유의하라
다음은 달을 입력받아 일수를 출력하는 프로그램이다
#include
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
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
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
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 뒤 세미콜론;이 아닌 쌍반점:임을 유의하자