본문 바로가기

정보처리

C언어의 제어문

728x90

1. 제어문

컴퓨터 프로그램은 명령어가 서술된 순서에 따라 무조건 위에서 아래로 실행되는데, 조건을 지정해서 진행 순서를 변경할 수 있음. 이렇게 프로그램의 순서를 변경할 때 사용하는 명령문을 제어문이라고 하며, if문, switch~case, 반복문, break, continue 등이 있음.

2. if문

조건에 따라서 실행할 문장 두 개 중 하나를 선택하는 제어문으로 조건이 참일 때만 실행할 문장을 지정할 수도 있고, 참과 거짓 각각에 대해서 실행할 문장을 지정할 수 도 있음.

예 1)

#include <stdio.h>
main(){
	int a = 15, b;
    if(a > 10)
    	b = a - 10;
    b = b + (10 - b);
    printf("%d\n", b);
}

a값이 10보다 큰지 비교한 후 크다면 5번째 줄 시행, 아니라면 5번째 줄은 건너뛰고 6번째 줄 시행. a값이 15이므로 5번째 줄을 시행하여 b값은 5, 6번째 줄 시행 결과 b값은 10

예 2)

#include <stdio.h>
main(){
	int a = 10, b = 20, cha;
    if(a > b)
    	cha = a - b;
    else
    	cha = b - a;
    printf("%d\n", cha);
}

a값이 b보다 크면 5번째 줄 실행, 아니면 7번째 줄 실행. a값이 10, b값이 20이므로 7번째 줄 실행하여 cha값은 10

3. 다중 if문

if문은 조건이 참과 거짓인 경우의 두 가지만 판별하여 제어를 이동하며 선택해야 할 문장이 여러 개면 if문을 여러 개 사용하는 다중 if문을 사용

예 1)

#include <stdio.h>
main(){
	int score = 85;
    if(score >= 90){
    	printf("학점은 A\n");
    } else if(score >= 80){
    	printf("학점은 B\n");
    } else if(score >= 70){
    	printf("학점은 C\n");
    } else {
    	printf("학점은 F\n");
    }
}

위에서 순서대로 score가 90 이상이면 5번째 줄 실행, 80 이상이면 7번째 줄, 70 이상이면 9번째 줄, 그 외에는 11번째 줄이 실행된다. score는 85이므로 7번째 줄이 실행되어 "학점은 B" 출력

4. switch문

if문은 조건이 참과 거짓인 경우의 두 가지만 판별하여 제어를 이동해야 하므로 분기할 문장이 여러 곳이면 중첩 if를 여러 번 사용하는 불편함이 있음. switch문을 사용하면 분기할 곳이 여러 곳이어도 간단하게 처리 가능

예 1)

#include <stdio.h>
main(){
	int score = 85;
    switch (score / 10){
    	case 10:
        case 9: printf("학점은 A\n");
        break;
        case 8: printf("학점은 B\n");
        break;
        case 7: printf("학점은 C\n");
        break;
        default: printf("학점은 F\n");
        break;
    }
}

score를 10으로 나눈 값이 10이거나 9이면 6번 줄 실행, 8이면 8번 줄 실행, 7이면 10번 줄 실행, 그 외는 12번 줄 실행하며 break는 case에 해당하는 줄 실행 후 switch문 종료

 

5. 반복문

반복문이란 일정한 횟수를 반복하는 명령문을 말하며 보통 변수의 값을 일정하게 증가시키면서 그 변수의 값이 정해 놓은 수가 될 때까지 명령이나 명령 그룹을 반복으로 수행.

1) for문

예 1)

#include <stdio.h>
main()
{
	int a = 10, even = 0, odd = 0;
    for(int i = 1; i <= a; ++i){
    	if(i % 2 == 0)
        	even += i;
        else
        	odd == i;
    }
    printf("%d, %d\n", even, odd);
}

i는 1부터 10까지 i값을 1씩 더해 반복하며 i를 2로 나눈 나머지가 0일 때, even에 i값을 더하고 아닐 시, odd에 i값을 더함. 결과 출력값은 30, 25

2) while문

조건이 참인 동안 정해진 문장을 반복 수행하다가 조건이 거짓이면 반복문을 종료

예 1)

#include <stdio.h>
main(){
	int i = 0, hap = 0;
    while(i < 10){
    	i++;
        hap += i;
    }
    printf("%d, %d\n", i, hap);
}

i가 10보다 작은 동안 반복하며 i값을 1씩 더하고 hap에 i값을 더함. i는 1부터 10까지 hap에 더해지므로 결과 출력값은 10, 55

3) do~while문

조건이 참인 동안 정해진 문장을 반복 수행하다가 조건이 거짓이면 반복문을 벗어나는 while문과 같은 동작을 하지만 차이점으로 무조건 한 번 실행한 다음 조건을 판단하여 종료 여부를 결정

예 1)

#include <stdio.h>
main(){
	int i = 0, hap = 0;
    do{
    	i++;
        hap += i;
    } while(i < 10);
    printf("%d, %d\n", i, hap);
}

i ++과 hap += i를 먼저 실행하며 그 뒤 i가 10보다 작은 지를 확인. 2) 번의 예제 1과 똑같이 i는 1부터 10까지 hap에 더해지므로 결과 출력값은 10, 55

4) break, continue

switch문이나 반복문의 실행을 제어하기 위해 사용하며 break는 switch문이나 반복문 안에서 사용해 해당 블록을 종료, continue는 반복문에만 사용하며 continue 이후 코드를 실행하지 않고 반복문의 처음으로 이동

예 1)

#include <stdio.h>
main(){
	int i = 0, hap = 0;
    while(1){
    	i++;
        if(i > 10)
        break;
        if(i % 5 == 0)
        continue;
        hap += i;
	}
    printf("%d, %d\n",i,hap);
}

while() 안의 조건이 참이므로 무한반복되며, i가 1씩 증가하여 i가 10보다 같거나 크면 while문 종료, i를 5로 나눈 나머지가 0이면 이후 코드를 실행하지 않고 처음으로 돌아감. 결과 i는 1부터 10까지 hap에 더해지나 5로 나눈 나머지가 0인 5와 10은 hap에 더해지지 않아 결과 출력값은 11, 40

728x90

'정보처리' 카테고리의 다른 글

C언어 함수  (0) 2024.04.08
C언어의 포인터, 배열, 구조체  (1) 2024.04.07
순서도와 C언어의 기본  (0) 2024.03.27
아키텍처 스타일  (0) 2024.03.26
객체지향 기법의 생명 주기  (0) 2024.03.26