정보처리기사 2019년도 C언어 기출문제
업데이트:
2019년 1회
#include <stdio.h>
main(){
int input, sum=0;
scanf("%d", &input);
while(1){ // 이 while문이 종료될 때까지 무한으로 반복하라는 의미임
if( input == 0) // 입력된 값 input이 0이 될 때,
break; // break를 통해 while문에서 빠져나갈 수 있다. 그러나 그 전까지는,
sum = sum + input % 10; // ㄱ) input값에 10을 나누어 나오는 나머지를 sum값에 더하고,
input = input / 10 // ㄴ) 다시 input값을 10으로 나누어 몫을 구한 후 ㄱ)을 반복하는 루트를 밟아야 한다
}
printf("%d\n", sum); // break되어 끝난 ㄱ)과 ㄴ) 작업의 결과물 sum을 출력한다
}
1234567 입력시, 1+2+3+4+5+6+7=28 출력
%
이 나머지값을 구하고, /
은 C언어에서 보통 정수로 끝나 몫을 반환한다는 의미를 잘 파악하면 풀 수 있는 문제
while(1)
표현이 생소해서 당황하는데, 이런 기초적인 문법에 당황하지 말자
2019년 2회
#include <stdio.h>
main(){
char ch, str[] = "1234500"; // 문자형 변수 ch와 배열 str[]를 선언하고, 배열엔 값 설정
int i,j;
for(i=0; i<8; i++){ // 정수형 변수 i가 0부터 7까지 1씩 증가하며 for문으로 돌릴 때,
ch = str[i]; // 배열 str에 들어있는 값을 ch에 옮겨담은 후,
if(ch == '0') // 그 ch값이 0이 되면 break로 멈춘다 즉, 0을 판별해낸다
break; // 왜냐하면, 출력된 값을 보면 뒤의 00은 그대로이고 앞의 정수만 역순으로 정렬되어있으므로,
} // 앞의 정수까지만 골라서 아래 for문에 돌릴 필요성이 있다는 것
i--; // 위에서 판별한 자리수(4)부터 1씩 줄여나가며 아래의 for문을 실행해준다
for(j=0; j<i; j++){ // 정수형 변수 j가 0부터 i값(4)일 때,
ch = str[j]; // ch 자리에 str[0] 값인 1를 대입하고
str[j] = str[i]; // str[1] 자리에 str[4] 값인 5를 대입하여
str[i] = ch; // str[4] 자리에는 아까 ch에 대입해 둔 str[0]인 1값을 대입한다. 즉, str[1]과 str[5]값을 교환
i--; // 하고, i값을 하나 줄여 3으로 만든 후 다시 for문을 돌려준다
} // 그러면 다음엔 str[1]과 str[3]의 값을 교환하고, 다음엔 str[2]만 남게 되므로 변화없이 for문은 종료된다
printf("%s", str); // 위의 작업에 의해 만들어진 배열 str를 출력한다
}
5432100
처음에 이 문제의 답을 str[i]==0
으로 적었는데, 0을 ‘0’로 문자형 처리해주지 않으면 첫 번째 for문의 움직임이 틀리게 되고
str[i]
나 ch
는 같으므로 저렇게 쓴다고 해도 결과는 출력되지만, 바로 위에서 이미 ch=str[i]
를 대입했는데 무시하고 str[i]
를 쓰는 건 프로답지 못하므로 틀린거나 다름없다.
문제를 풀 때에는 당황하지 말고, 집중해서 세심하게 살피자! 전체 흐름을 파악해서 문제를 풀자!