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이 된다.
'자격증 > 정보처리기사 실기 문제 풀이' 카테고리의 다른 글
흥달쌤 정보처리기사 실기 프로그램 문제(C언어 문제 21~30) (0) | 2023.04.09 |
---|---|
흥달쌤 정보처리기사 실기 프로그램 문제(C언어 문제11~20) (0) | 2023.04.08 |
흥달쌤 정보처리기사 실기 데이터베이스 문제(DML(Data Manipulation Language)) (0) | 2023.04.06 |
흥달쌤 정보처리기사 실기 데이터베이스 문제(DCL) (0) | 2023.04.05 |
흥달쌤 정보처리기사 실기 데이터베이스 문제(DDL(Date Definition Language)) (0) | 2023.04.05 |