본문 바로가기

자격증 공부/정보처리기사 실기

[흥달쌤] 깨알 C언어) IF문, SWITCH문, 반복문, FOR문, WHILE문(do~ while), 다중 FOR문

[깨알 C언어 14~20 영상]

 

[문] 다음 C 프로그램의 실행 결과는?

#include <stdio.h>

int main(){
    int a = 0, b = 1;

    switch(a){
        case 0 : printf("%d\n", b++); break;
        case 1 : printf("%d\n", ++b); break;
        default : printf("%d\n", b); break;
    }

    return 0;
}

 

0    1    2    3

 

→ ② 1

 

 

※ if문 : 조건에 따라서 다른 명령어들을 수행

  - 날씨가 비가 오면(true) 우산을 들고 감 | 비가 오지 않으면(false) 자전거를 타고 감

 

※ switch문 : 주어진 값에 맞는 명령어들을 수행

  - 어떤 값이 들어왔을 때, 자판기 버튼이라면 블랙 || 설탕 || 믹스커피 || 선택 안 함의 선택에 따라 결과 도출

    → 원하는 값만 도출하려면(연쇄 반응 X) break를 걸어야 함

 


 

[문] 다음 C 프로그램의 실행 결과로 옳은 것을 고르시오.

#include <stdio.h>

int main(){
    int j;
    int sum = 0;

    for(j = 2; j <= 70; j += 5)
        sum = sum + 1;

    printf("%d", sum);
}

 

13   ② 70   ③ 14   ④ 5

 

→ ③ 14

 

// 실행 과정 + 결과 설명

int j;
int sum = 0;

for(j = 2; j <= 70; j += 5)
    sum = sum + 1;

// j 값 변화
// 2, 7, 12, 17, 22, 27, 32, 37, 42, 47, 52, 57, 62, 67

// 다음 값은 72
// 72 <= 70 이 거짓이므로 종료

// 총 반복 횟수 = 14회

// 반복할 때마다 sum 1 증가
// sum = 0 → 14

printf("%d", sum);

// 최종 출력 결과
// 14

 


 

[문] 다음 C 프로그램의 실행 결과는?

#include <stdio.h>

int main(){
    int count = 2;
    int sum = 0;

    while(count <= 10){
        sum += count;
        count += 2;
    }

    printf("%d", sum);
}

 

① 2   ② 10   ③ 20   ④ 30

 

→ ④ 30

 

// 실행 과정 + 결과 설명

int count = 2;
int sum = 0;

while(count <= 10){
    sum += count;
    count += 2;
}

// 1회차
// sum = 0 + 2 = 2
// count = 4

// 2회차
// sum = 2 + 4 = 6
// count = 6

// 3회차
// sum = 6 + 6 = 12
// count = 8

// 4회차
// sum = 12 + 8 = 20
// count = 10

// 5회차
// sum = 20 + 10 = 30
// count = 12

// count <= 10 조건이 거짓(12 <= 10) → 종료

printf("%d", sum);

// 최종 출력 결과
// 30

// 정답: ④

 


 

[] 다음 C 프로그램의 실행 결과는?

#include <stdio.h>

void main(){
    int a, b;

    a = 2;

    while(a-- > 0){
        printf("a = %d\n", a);
    }

    for(b = 0; b < 2; b++){
        printf("a = %d\n", a++);
    }
}

 

→ ① a = 1
         a = 0
         a = -1
         a = 0

 

// 실행 과정 + 결과 설명

int a, b;

a = 2;

// while(a-- > 0)
// 후위 감소이므로 비교 후 감소

// 1회차
// 비교: 2 > 0 → 참
// a는 1이 됨
printf("a = %d\n", a);
// 출력: a = 1

// 2회차
// 비교: 1 > 0 → 참
// a는 0이 됨
printf("a = %d\n", a);
// 출력: a = 0

// 3회차
// 비교: 0 > 0 → 거짓
// 비교 후 a는 -1이 됨
// while 종료

// 현재 a = -1

for(b = 0; b < 2; b++){
    printf("a = %d\n", a++);
}

// 1회차
// a++ → 현재값 -1 출력 후 a=0
// 출력: a = -1

// 2회차
// a++ → 현재값 0 출력 후 a=1
// 출력: a = 0

/*
출력 결과

a = 1
a = 0
a = -1
a = 0
*/

// 정답: ①

 


 

※ 반복문 종류
(1) for
     • 정해진 횟수만큼 반복

for(초기식; 조건식; 증감식)
{
    수행하는 작업들
}

// 1. 초기식 실행 (최초 1회)
// 2. 조건식 검사
// 3. 조건이 참이면 실행문 수행
// 4. 증감식 수행
// 5. 다시 조건식 검사
// 6. 조건이 거짓이 될 때까지 반복


(2) while
     • 조건이 만족하는 동안 반복

int i = 0;

while(i < 3)
{
    printf("i = : %d\n", i);
    // 1회차: i=0 출력
    // 2회차: i=1 출력
    // 3회차: i=2 출력

    i++;
    // 0→1→2→3
}

// i=3이 되면 조건(i<3)이 거짓이므로 반복 종료

printf("sum = : %d\n", i);
// 현재 i=3 출력

/*
출력 결과

i = : 0
i = : 1
i = : 2
sum = : 3
*/


(3) do ~ while
     • 무조건 한 번 수행 후 조건이 만족하는 동안 반복

int i = 3;

do
{
    printf("i = %d\n", i);
    // do~while은 조건 검사 전에 먼저 실행
    // i = 3 출력

    i++;
    // i = 4
}
while(i < 3);
// 4 < 3 → 거짓(false)
// 반복 종료

printf("sum = %d\n", i);
// 현재 i = 4 출력

/*
출력 결과

i = 3
sum = 4
*/

 


 

[] 다음 C 프로그램의 실행 결과로 옳은 것은?

#include <stdio.h>

int main(){
    int a=120, b=45;

    while(a != b){
        if(a > b) a = a - b;
        else b = b - a;
    }

    printf("%d", a);
}

 

5    15    20    25

 

→ ② 15

 

// 실행 과정 + 결과 설명

int a=120, b=45;

while(a != b){
    if(a > b) a = a - b;
    else b = b - a;
}

// a=120, b=45 → a>b → a=120-45=75
// a=75,  b=45 → a>b → a=75-45=30
// a=30,  b=45 → a<b → b=45-30=15
// a=30,  b=15 → a>b → a=30-15=15
// a=15,  b=15 → a==b → 반복 종료

printf("%d", a);
// 출력 결과: 15
// 정답: ②

 


 

[] 다음 C 프로그램의 실행 결과로 옳은 것은?

#include <stdio.h>

int main(){
    int i, sum=0;

    for(i=1; i<=10; i+=2){
        if(i % 2 && i % 3) continue;
        sum += i;
    }

    printf("%d", sum);
    return 0;
}

 

6    12    25    55

 

→ ② 12

 

int i, sum=0;

for(i=1; i<=10; i+=2){
// i 값: 1, 3, 5, 7, 9

    if(i % 2 && i % 3) continue;
    // i%2 : 홀수면 대부분 1
    // i%3 : 3의 배수가 아니면 1 또는 2

    // && 결과가 참이면 continue 실행
    // continue → 아래 sum += i 실행 안함

    sum += i;
}

// i=1
// 1%2=1, 1%3=1 → true && true → continue

// i=3
// 3%2=1, 3%3=0 → true && false → false
// sum = 0 + 3 = 3

// i=5
// 5%2=1, 5%3=2 → true && true → continue

// i=7
// 7%2=1, 7%3=1 → true && true → continue

// i=9
// 9%2=1, 9%3=0 → true && false → false
// sum = 3 + 9 = 12

printf("%d", sum);

// 최종 출력 결과
// 12

// 정답: ②

 


 

※ 반복문 옵션

(1) continue
     • 더이상 아래 문장을 실행하지 않고, 반복문 처음으로 돌아감
(2) break
     • 반복문을 빠져나감

 

다중 반복문

for(i = 0; i < 2; i++){
    for(j = 0; j < 2; j++){
        printf("i : %d, j : %d", i, j);
    }
}
// 실행 과정 + 결과 설명

for(i = 0; i < 2; i++){
// 바깥 반복문(i)

// i=0
    for(j = 0; j < 2; j++){
    // 안쪽 반복문(j)

    // j=0 → 출력
    // i:0, j:0

    // j=1 → 출력
    // i:0, j:1
    }

// i=1
    for(j = 0; j < 2; j++){

    // j=0 → 출력
    // i:1, j:0

    // j=1 → 출력
    // i:1, j:1
    }
}

/*
출력 순서

i : 0, j : 0
i : 0, j : 1
i : 1, j : 0
i : 1, j : 1
*/

 

continue

for(i = 0; i < 3; i++){
    if(i == 1) continue;

    sum++;
}
// 실행 과정 + 결과 설명

sum = 0;

// i=0
// i==1 ? false
// continue 실행 안됨
// sum++ 실행 → sum=1

// i=1
// i==1 ? true
// continue 실행
// 아래 sum++ 건너뜀
// sum 변화 없음 → sum=1

// i=2
// i==1 ? false
// sum++ 실행 → sum=2

/*
최종 값

i = 3
sum = 2
*/

 


 

[] 다음 C 프로그램의 실행 결과는?

#include <stdio.h>
void main(){
    int i, j, sum=0;

    for(i = 1; i < 10; i++){
        for(j = 1; j < 10; j++){
            if(j % 3 == 0) continue;
            if(i % 4 == 0) break;
            sum++;
        }
    }
    printf("%d", sum);
}

 

42    81    27    12

 

→ ① 42

 

// 실행 과정 + 결과 설명

// i = 1~9

// i=4,8 일 때 break 발생
// → 해당 i에서는 내부 반복문 바로 종료

// 나머지 i
// i=1,2,3,5,6,7,9 → 총 7개

// 각 i마다 j 흐름
// j=1 → sum++
// j=2 → sum++
// j=3 → continue
// j=4 → sum++
// j=5 → sum++
// j=6 → continue
// j=7 → sum++
// j=8 → sum++
// j=9 → continue

// 각 i당 sum 6 증가

// 7 * 6 = 42

// 최종 결과
// 42