본문 바로가기
정보처리기사

C언어 선택 및 반복 제어문

by 두두리안 2022. 7. 6.
728x90

목차

1. 분기문
2. 반복문

1. 분기문

1-1. if

#include <stdio.h>

int main(){
    int score = 70;

    if(score >= 80){  // 80점 이상이면
        puts("합격");   // 합격멘트 출력
    }

    puts("수고하셨습니다"); // if문 범위가 아니므로 무조건 출력

    return 0;
}
* 조건식에 따라 선택적으로 명령을 실행할수 있다
* 조건식이 '참'인 경우, 아래의 명령실행
* 블록구조로 묶인 명령문들을 실행
* 모든 제어문은 블록구조가 없으면 최초 하나의 명령문만 실행

1-2. if-else

#include <stdio.h>

int main(){
    int score = 70;

    if(score >= 80){  // 80점 이상이면
        puts("합격");   // 합격 출력
    }else{
        puts("불합격");   // 불합격 출력
        puts("재도전");   // 블록구조이므로 재도전까지 출력
    }

    puts("수고하셨습니다"); // if문 범위가 아니므로 무조건 출력

    return 0;
}
* 조건식이 '참'인 경우와 '거짓'일때 각각 실행해야 하는 명령이 다른 경우 사용한다
* else문은 조건식이 '거짓'인 경우에 아래 명령을 실행한다
* else문만 단독으로 사용할수없다

1-3. 다중 if-else

#include <stdio.h>

int main(){
    int score = 70;

    if(score >= 80){  // 80점 이상이면
        puts("합격");   // 합격 출력
    }else if(score >= 70){ //70점 이상이면
        puts("재시험"); // 재시험 출력
    }
    else{
        puts("불합격");   // 불합격 출력
    }

    puts("수고하셨습니다"); // if문 범위가 아니므로 무조건 출력

    return 0;
}
* 실행되어야 할 명령의 분기가 셋 이상일때 사용한다
* 분기마다 새로운 조건식을 세워야 한다
* 마지막 else문은 조건을 입력하지 않는다

1-4. 삼항 연산자

#include <stdio.h>

int main(){
    int a = 10, b = 5, c;

    c = (a > b) ? 20 : 40;  // a가 b보다 크면 20 아니면 40 c에 입력

    return 0;
}
* 3개의 항으로 두 결과중 하나의 값을 결과로 나타낸다
* 단순 할당이 필요한 if-else문 대신 사용이 가능하다

1-5. switch-case

* 특정 데이터를 단일 값으로 비교하여 명령을 실행한다
* 비교 데이터는 숫자 또는 문자만 가능하다
* 일치하는 영역뿐 아니라 아래의 모든 코드도 실행된다

1-6. break

* break문 아래의 코드를 진행하지 않고 즉시 블록구조를 벗어난다
* 자신이 속해있는 블록 구조에만 해당

1-7. switch-case-default

#include <stdio.h>

int main(){
    int month = 4;

    switch(month){

        case 2: // month 값이 2인 경우
            puts("총 28일 입니다");
            break;

        // month값이 4, 6, 9, 11 인 경우
        case 4:
        case 6:
        case 9:
        case 11:
            puts("총 30일 입니다");
            break; // switch 종료

        // month값이 1, 3, 5, 7, 8, 10, 12 인 경우
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            puts("총 31일 입니다");
            break;

        // month값이 1~12가 아닌경우
        default:
            puts("다시 월을 입력해주세요);
            break;
    }

    return 0;
}
* 일치하는 값이 없을 경우엔 default 아래의 코드를 실행
* default 단독으로 사용할수 없다

2. 반복문

2-1. for

    #include <stdio.h>

    int main(){
        // 반복용 변수, 합계용 변수
        int i, sum = 0;

        // i가 1부터 10이하일때 까지 1씩 증가하면서 반복
        for(i = 1; i <= 10; i++){
            sum += i;
        }

        // for문 종료후 sum(합계) 출력
        printf("%d",sum);

        return 0;
    }
* 지정한 횟수만큼 코드를 반복한다
* 시작값, 종료분기, 증감식을 지정해서 사용한다
* break문으로 벗어날수 있다

2-2. while

#include <stdio.h>

int main(){
    // 반복용 변수, 합계용 변수
    int input = 0, sum = 0;

    // input 값이 0 이상인 동안 반복
    while(input >= 0){

        // 10진수를 입력받아 input에 할당
        scanf("%d", &input);

        // 할당된 input값을 sum에 누적
        sum = sum + input;
    }

    // while문 종료후 sum(합계) 출력
    printf("%d",sum);

    return 0;
}
* 지정한 조건을 만족할때 까지 코드를 반복한다
* 조건을 먼저 판단한 다음 코드를 반복한다
* 조건에 따라 단 한번도 실행이 안될수 있다
* break문으로 벗어날수 있다

2-3. do-while

#include <stdio.h>

int main(){
    // 반복용 변수, 합계용 변수
    int input = 0, sum = 0;

    do
    {
        // 10진수를 입력받아 input에 할당
        scanf("%d", &input);

        // 할당된 input값을 sum에 누적
        sum = sum + input;

    }while(input >= 0);

    // do-while문 종료후 sum(합계) 출력
    printf("%d",sum);

    return 0;
}
* 지정한 조건을 만족할때 까지 코드를 반복한다
* 코드를 먼저 실행한 다음 조건을 판단한다
* 조건이 맞지 않아도 최소 한번은 실행한다
* break문으로 벗어날수 있다

2-4. continue

#include <stdio.h>
int main(){
    // 반복용 변수, 합계용 변수
    int input = 0, sum = 0;

    // input 값이 0 이상인 동안 반복
    while(input >= 0){

        // 10진수를 입력받아 input에 할당
        scanf("%d", &input);

        // 입력값이 짝수면 현재 단계 건너뛰기
        if(input % 2 == 0)
            continue;

        // 할당된 input값을 sum에 누적
        sum = sum + input;
    }

    // do-while문 종료후 sum(합계) 출력
    printf("%d",sum);

    return 0;
}
* continue 아래의 코드를 무시하고 다음 단계 반복으로 넘어간다
* break와 함께 모든 반복문에 사용가능하다

참고자료 : 이기적 환상콤비 정보처리기사

728x90

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

객체지향 기술  (0) 2022.07.07
C언어 자료구조와 포인터  (0) 2022.07.07
C언어 특징 및 입출력  (0) 2022.07.06
분산 데이터베이스 설계  (0) 2022.07.05
병행제어(Concurrency Control)와 로킹(Locking)  (0) 2022.07.05