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 뒤 세미콜론;이 아닌 쌍반점:임을 유의하자

업데이트: