정보처리기사 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]를 쓰는 건 프로답지 못하므로 틀린거나 다름없다.
문제를 풀 때에는 당황하지 말고, 집중해서 세심하게 살피자! 전체 흐름을 파악해서 문제를 풀자!