본문 바로가기
C/기말고사 대비(2022 1학기)

[C언어 시험대비] 16년 기말고사 기출 (1)

by Meaning_ 2022. 6. 11.
728x90
반응형

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include<stdio.h>
#include<limits.h>
 
//반례
/*
 
1) 12 1 30 2 15 3
2) 0
3) 15 20
*/
 
//전역변수 선언해줘야함
static int cnt = 0;
 
bool terminate = false;
 
void print(int* arr) {
    int ans = 1;
    for (int i = 0; i < 3; i++) {
        ans *= arr[i];
    }
 
    printf("%d\n", ans);
}
void input(int* arr) {
    
 
    for (int i = 0; i < 3; i++) {
 
        
        
        if (terminate) {
            break;
        }
        
        
        while (true) {
            
            if (cnt >=2) {
                //cnt가 2보다 크거나 같으면 바로 break때려야
                terminate = true;
                break;
            }
            //while을 써야 12 1 30 2 15 3 이런 반례들 해결가능
            scanf_s("%d"&arr[i]);
            if (arr[i] == 0) {
                terminate = true;
                break;
            }
            
            if (1 <= arr[i] && arr[i] <= 10) {
                cnt = 0;//앞에서는 범위 실패인데, 현재 turn은
                //잘 나왔으면 다시 cnt초기화
                break;
            }
            else {
                
                printf("다시!!\n");
                cnt+=1;
 
            }
 
        }
 
        
 
        
    }
    if (!terminate) {
        print(arr);
    }
        
}
 
 
 
 
int main() {
 
    int arr[3];
    input(arr);
    
 
}
 
 
 
 
 
 
cs

 

문제 풀면서 주의해야하는것 

 

1) scanf_s를 while문 안에 넣었는데 그 이유는 잘못 입력했을 때 다시 입력받기 위함 -->continue가 안먹힘

 

2) 두번 연속 범위 실패를 확인하기 위해 cnt변수를 만들어줬는데 누적 될 수있게 cnt를 전역 static변수로 선언

 

3) cnt는 범위에 해당하는 값이 나왔을때는 다시 0으로 초기화 --> 왜냐면 두번이 연속으로 실패여야지만 프로그램이 종료되기 때문.

 

4) cnt가 2 이상일때 terminate=true랑 break때려주는건 scanf_s보다 앞에 써줘야함. 그래야 cnt가 2이상일때 입력을 더이상 안받을 수 있음

 

<반례>

 

12 20

0

12 1 30 2 15 3

3 32 33

 

728x90
반응형

댓글