본문 바로가기
자격증/정보처리기사 실기 문제 풀이

흥달쌤 정보처리기사 실기 프로그램 문제(C언어 문제 1~10)

by 리드민 2023. 4. 7.
반응형

Q 01) 입력 안내에 따라 두 사람의 나이를 입력받고, 그 합을 구하는 C 프로그램을 작성하려고 한다.

ㄱ. scanf("%d%d", &age1, &age2);
ㄴ. result = age1 + age2;
ㄷ. int age1, age2, result
ㄹ. printf("나이의 합은 %d살입니다. \n", result);
ㅁ. printf("철수와 영희의 나이를 입력하세요.");

A)

ㄷ -> ㅁ -> ㄱ -> ㄴ ->ㄹ

해설)

프로그램 작성을 할 때는 선언, 입력, 처리, 출력 순으로 진행된다.

 

Q 02) C 프로그램을 컴파일 하면 아래와 같은 것들이 실행된다. 수행 순서를 올바르게 나열하시오.

ㄱ. 링커(linker)
ㄴ. 어셈브러(assembler)
ㄷ. 전처리기(preprocessor)
ㄹ. 컴파일러(compiler)

A)

ㄷ -> ㄹ -> ㄴ -> ㄱ

해설)

전처리기 -> 컴파일러 -> 어셈블러 -> 링커

 

Q 03) 다음 보기의 설명과 관계가 있는 C언어 변수들의 종류를 쓰시오.

프로그램의 실행 시작 시점에 기억장소를 할당받아 실행이 끝날 때까지 지속적으로 기억장소를 유지한다.

A)

전역변수, 정적변수

해설)

지역변수는 스택 영역에 저장되며, 범위를 벗어나거나 함수가 종료되면 사라진다. 동적변수는 힙 영역에 저장되며, 프로그램 실행 중에 메모리에 할당된다.

 

Q 04) 다음 C 프로그램의 실행 결과를 쓰시오.

void main(void) {
int a = 1, b = 2, c =3;
{
int b = 4, c = 5;
a = b;
{
int c;
c = b;
}
printf("%d %d %d\n", a, b, c);
}
}

A)

4 4 5

해설)

main 영역에서 a, b, c 함수를 선언한다.
첫 번째 중괄호 영역에 b, c 변수를 선언하고, a 변수에 b 값을 대입한다.
이때 a 변수는 첫 번째 중괄호에 없기 때문에, main 영역에 선언된 a 변수에 5값을 대입한다.
두 번째 중괄호 영역에 c 변수를 선언하고, c 변수에 b 값을 대입한다.
두 번째 중괄호 영역이 끝나면 두 번째 중괄호에서 선언된 지역변수 c는 메모리에서 사라진다.
출력 구문 첫 번째, a는 main 영역의 a 변수를 참조하여 4를 출력한다.
두 번째, b는 첫 번째 중괄호 안에 있는 변수의 값 4를 출력한다.
세 번째, c는 첫 번째 중괄호 안에 있는 변수의 값 5를 출력한다.

 Q 05) 아래 프로그램의 실행 결과는?

#include<stdio.h>
void main() {
int a, b;
a = 4 * (1/2);
b = a++;
printf("%d", b);
}

A)

0

해설)

a 변수에는 4 * 0 의 값 0이 대입된다. (정수 / 정수 = 정수)
b 변수에는 a의 값을 먼저 대입한 후 a 값을 증가시키기 때문에 b에는 0이 저장되고, a는 1 증가하여 1이 저장도니다.

 

Q 06) 다음과 같은 C 언어 문장에서 모든 변수가 int형이라고 가정할 때, 문장을 실행한 결과 각 변수들의 값은 얼마인가?

y = 3 + 2 * ( x = 7/2);

A)

x = 3, y = 9

해설)

연산자 우선 순위에 의해 괄호 안의 시을 먼저 계산하여,
x 변수에는 3이 대입된다. (정수/정수 = 정수)
그 이후 수식을 보면
3 + 2 * 3 이 되기 대문에 y에는 9가 대입된다.


Q 07) 아래 C 프로그램의 실행 결과는?

#include <stdio.h>
void main() {
int a = 5, b = 5;
a *= 3 + b++;
printf("%d, %d", a, b);
}

A)

40, 6

해설)

 a *= 3 + b++;의 처리 순서는

먼저 3 + b 수행 후, b 변수의 값을 1 증가시킨다.

마지막으로 대입 연산자가 수행된다.

 

Q 08) C 프로그램에서 한 행의 수식 a=++b*c;을 수행으로 표현하시오.

A)

b=b+1;

a=b*c;

해설)

++b 증감 연산은 먼저 증가시키라는 의미이기 때문에, b = b+1을 먼저 수행한 후 b*c의 값을 a에 대입하게 된다.

 

Q 09) 아래 C 프로그램의 실행 결과는?

#include<stdio.h>
void main() {
int a = (10, 20);
printf("%d, ",a)'

int b = ( 10, 20, 30);
printf("%d, ", b);

int c = ( 10, (20, 30), 40 );
printf("%d", c);

}

A)

20, 30 ,40

해설)

콤마연산자는 맨 오른쪽의 값을 참조하게 된다.

 

Q 10) 아래 C 프로그램의 출력은?

#include<stdio.h>
int main()
{
int j = 3;
int j = 4;
if( (++i > j--) && (i++ < --j) ) i=i-- + ++j;
else j = i-- - --j;
printf("%d %d\n", i, j);
}

A) 3 2

해설) 첫 번째 조건에서 ++i > j--를 수행한다.

i는 전위 연산이기 때문에 4를 가지고 비교하고, j는 후위연산이기 때문에 현재값 4를 가지고 비교하고, 1을 감소시킨다.

4 > 4 라는 조건이 성립이 되고 거짓값이 된다.

이후에 우항을 실행해야 하지만, && 논리연산은 좌항과 우항 모두 참이 되어야 하는 연산자이고,

이미 좌항에서 거짓값이 나왔기 때문에 우항의 연산을 실행하지 않고 종료한다.

else 구문에서 j 에 i-- - --j를 수행하게 되면

4 - 2를 하여 j에 2값을 대입하고, i 값은 후위연산이기 때문에 3이 된다.

 

반응형