전산능력검정시험 2급 C언어 기출문제 및 답변
2010년 9월 컴퓨터 국가시험 2급 C언어 필기시험 문제 및 정답
1. 객관식 문제 ((1)~(10) 각 2점, (11)~ (50) 각 질문당 1점.***60점))
(1) 다음 옵션 중 소프트웨어 라이프사이클 개발 단계 작업에 속하지 않는 것은 무엇입니까
A ) 세부 설계 B) 개요 설계 C) 소프트웨어 유지 관리 D) 소프트웨어 테스트
(2) 트리는 노드의 모음이고 루트 노드의 수는
A) 있습니다 1 B ) 1 이상 1 C) 0 또는 1 D) 최소 2
(3) 객체 지향 방법에서 정보 은닉은
A) 객체 상속 B) 객체 다형성 C) 객체 캡슐화 D) 객체 분류
(4) 프로그래밍 언어의 기본 구성 요소는 데이터 구성 요소, 작업 구성 요소, 제어 구성 요소 및
A) 명령문 구성요소 B) 변수 구성요소 C) 객체 구성요소 D) 전송 구성요소
(5) 버블 정렬의 최악의 경우 비교 횟수는 다음과 같습니다.
A) n/2 B) nlog2n C) n (n-1)/2 D) n (n 1)/2
(6) 다음 설명 중 역할에 속하지 않는 것은 무엇입니까? 소프트웨어 요구사항 명세?
A) 확인 테스트 및 승인을 위한 기초로
B) 사용자 문제의 구조를 반영하여 소프트웨어 개발 작업의 기초 및 기반으로 사용될 수 있습니다.
C) 사용자와 개발자가 쉽게 이해하고 소통할 수 있습니다.
D) 개발자가 수요 분석을 수행할 수 있도록 지원합니다.
(7) 다음 중 무엇입니까? 문이 잘못되었습니다
A) C 언어 프로그램은 하나만 구현할 수 있습니다. 알고리즘 B) C 프로그램은 여러 프로그램 파일로 구성될 수 있습니다
C) C 프로그램은 하나 이상의 프로그램 파일로 구성될 수 있습니다 함수 D) 함수는 C 프로그램 파일로 단독으로 존재할 수 있습니다.
(8) 다음 중 소프트웨어 엔지니어링의 세 가지 요소에 속하지 않는 것은 무엇입니까?
A) 방법 B) 프로세스 C ) 도구 D) 환경
(9) 다음 중 올바른 설명은 무엇입니까?
A) 데이터베이스 시스템은 독립적인 시스템이며 운영 체제의 지원이 필요하지 않습니다.
B) 데이터베이스 기술의 기본 목표는 데이터 공유 문제를 해결하는 것입니다.
C) 데이터베이스 관리 시스템은 데이터베이스 시스템입니다
D) 없음 위의 세 가지 진술은 정확합니다
(10) 다음 중 올바른 진술은 무엇입니까
A) 각 C 프로그램 파일에는 main() 함수가 있어야 합니다
B) C 프로그램의 함수 내에서는 다른 함수를 정의할 수 없습니다
C) C 프로그램은 하나의 함수로 구성되거나 여러 함수로 구성될 수 있습니다
D) 함수의 위치 C 프로그램의 main() 함수는 고정
(11) E-R 다이어그램을 관계형 모델로 변환할 때 엔터티와 관계를 모두 다음과 같이 표현할 수 있다
A) 속성 B ) 관계 C) 키 D) 도메인
(12) 다음 중 변수를 정의하는 설명이 잘못된 것은 무엇입니까?
A) double int_ B) int _int C) char For D) float USS
(13) 다음 중 올바른 설명은 무엇입니까
A) C 언어는 컴파일할 때 구문을 확인하지 않습니다. B) C 언어에는 프로시저와 프로시저라는 두 가지 유형의 서브루틴이 있습니다. 함수
C) C 언어 함수는 정의에 중첩될 수 있습니다 D) C 언어 함수는 호출에 중첩될 수 있습니다
(14) 다음 옵션은 C 언어 숫자 상수의 합법적인 집합입니다.
A) 0x8A입니다
B)12 C).177 D) 028
(15) 다음 중 올바른 설명은 무엇입니까
A) C 프로그램을 구성하는 기본 단위는 함수입니다
B) 함수 내에서 다른 함수를 정의할 수 있습니다.
C) main() 함수는 다른 함수 앞에 배치되어야 합니다.
D) 호출되는 모든 함수는 앞에 호출되어야 합니다. 정의
(16) 정의문: int a, b, c, *p=amp; c; 다음에 다음 옵션의 문을 실행하면 올바르게 실행될 수 있는 문은 다음과 같습니다.
A) scanf("d",amp;p); B)scanf("ddd",a,b,c);
C)scanf("d", p); D) scanf("d", a, b, c);
(17) 다음 프로그램이 있습니다
main()
{int x, y , z;
x=y=1;
z=x , y , y
printf("d, d, d\n", x, y, z);
}
프로그램 실행 후 출력 결과는 다음과 같습니다.
A) 2, 2, 3 B ) 2, 2, 2 C) 2, 3, 1 D) 2, 1, 1
(18) 정의된 경우: int a=25, b=14, c=19; (?:) 구성된 문 alt;=25amp;amp;b--lt;=2amp;amp;c?printf("***a=d, b=d, c=d\n", a, b, c): printf("###a=d, b=d, c=d\n", a, b, c) 프로그램의 결과는 다음과 같습니다.
A; ) ***a= 25, b=13, c=19 B) ***a=26, b=14, c=19
C) ### a=25, b=13 , c=19 D) ### a=26, b=14, c=19
(19) 다음 프로그램 세그먼트의 출력 결과는
int a=1234입니다. ;
float b=123.456;
double c=12345.54321;
printf ("-, 2.1f, 2.1f", a, b, c) ;
A) 출력 없음 B) 12, 123.5, 12345.5 C) 1234, 123.5, 12345.5 D) 1234, 123.4, 1234.5
(20) 다음 프로그램이 있습니다 p>
main() p>
{int a=0, b=0;
a=10; /*a에 값 할당
b=20; b*/에 값 할당
printf("a b=d\n", a b) /* 계산 결과 출력*/
}
프로그램 실행 후 출력 결과는
A) 30 B) a b=30 C) a b=0 D) Error
(21) ADescriptor를 입력하면 (Enter를 의미) 다음 프로그램을 실행할 때 키보드에서 다음 프로그램의 실행 결과는 Yes가 됩니다.
#include
main()
{ char c;
int v0=1, v1=0, v2=0
do{ 스위치(c
=getchar())
{ 케이스 ′a′: 케이스 ′A′:
케이스 ′e′: 케이스 ′E′:
케이스 ′i ′: 케이스 ′I′:
케이스 ′o′: 케이스 ′O′:
케이스 ′u′: 케이스 ′U′: v1 =1; p>기본값: v0 =1; v2 =1;
}
} while (c!=′\n′)
printf ("v0 =d, v1=d, v2=d\n", v0, v1, v2);
}
A) v0=11, v1=4, v2=11 B ) v0=8, v1=4, v2=8
C) v0=7, v1=4, v2=7 D) v0=13, v1=4, v2=12
(22) 다음 프로그램이 있습니다.
#include
main()
{int y=9;
for ( ygt ;0;y--)
if(y3= =0) printf("d",--y);
}
실행 프로그램의 결과는 다음과 같습니다.
A) 732 B) 433 C) 852 D) 874
(23) 다음 프로그램 세그먼트가 제공됩니다.
int x =0, s= 0;
while (!x!=0) s = x
printf ("d", s);
A) 프로그램 세그먼트 실행 후 출력 0 B) 프로그램 세그먼트 실행 후 출력 1
C) 프로그램 세그먼트의 제어 표현식이 불법입니다 D) 프로그램 세그먼트가 실행됩니다 무제한
(24) 다음 프로그램이 있습니다
fun(int x, int y){return(x y);}
main()
{int a= 1, b=2, c=3, sum;
sum=fun((a,b b,ab),c);
printf("d\n",sum );
}
실행 후 출력 결과는 다음과 같습니다.
A) 5 B) 7 C) 8 D ) 3
( 25) 다음 프로그램 세그먼트를 실행한 후 변수 k의 값은
int k=3, s[2]
s입니다. [0]=k; k=s[ 1]*10;
A) 정의되지 않은 값 B) 35 C) 31 D) 20
(26) 다음 중 어느 것입니까? 잘못되었습니다
A ) 함수 매개변수의 값을 변경해도 해당 실제 매개변수의 값은 변경되지 않습니다.
B) 함수는 주소 값을 반환할 수 있습니다
C) 포인터 변수에 주소 값으로 정수를 할당할 수 있다
D) 프로그램 시작 부분에 stdio.h 파일을 포함시키면 포인터 변수에 NULL을 할당할 수 있다
D) p>
(27) 다음 프로그램 세그먼트의 설명은 정확합니다.
x=-1
do
{x=x*x; ;} while (!x);
A) 무한 루프입니다 B) 루프가 두 번 실행됩니다 C) 루프가 한 번 실행됩니다 D) 구문 오류가 있습니다
( 28) 다음 프로그램이 있습니다
fun(int x, int
y)
{정적 int m=0, i=2;
i =m 1; return m; >
main()
{int j=1, m=I, k;
k=fun(j, m); ;
k=fun(j,m); printf("d\n",k)
}
실행 후 출력 결과는 다음과 같습니다. p>
p>
A) 5, 5 B) 5, 11 C) 11, 11 D) 11, 5
(29)에는 다음 프로그램이 있습니다
fun(int x)
{int p;
if(x==0║x= =1) return(3);
p= x-fun(x= 2);
retum p;
}main()
{ prinf("d\n", fun(7) );}
실행 후 출력 결과는
A) 7 B) 3 C) 3 D) 0
(30) 16비트에서 컴파일 시스템에서는 p;를 실행한 후 오른쪽에 int가 정의되어 있습니다. a[ ]={10, 20, 30}, *p=amp a;, 다음 중 잘못된 문장은 무엇인가요?
A) p는 상위 주소로 1바이트 이동 B )p는 하나의 저장 단위를 상위 주소로 이동
C) p는 상위 주소로 2바이트 이동 D) p는 1과 동일
(31) 다음 프로그램이 있습니다
main()
{int a=1, b=3, c=5
int *p1; =amp; a, *p2=amp ;b, *p=&c;
*p=*p1*(*p2);
printf("d\n", c);
}
실행 후 출력 결과는
A) 1 B) 2 C) 3 D) 4
(32) 다음 프로그램이 실행된 후 출력 결과는
void func1 (int i)
void func2 (int i); []="안녕하세요, 친구!"
void func1 (int i)
{ printf ("c", st[i]); if (ilt; 3) {i = 2; func2(i);}
}
void func2(int i)
{ printf("c ",st[i]);
if(ilt;3){i=2;func1(i);}
}
main()
{ int i=0; func1(i); printf("\n");}
A) 안녕하세요 B) hel C) hlo D) hlm
(33) 다음 프로그램에서 igt를 판단하면 j***가 실행되는 횟수는
main()
{ int i=0, j=입니다. 10, k=2, s=0;
p>
for (;;)
{ i =k
if (igt; j)
{ 피
rintf("d",s);
break;
} s =i
}
A) 4 B) 7 C) 5 D) 6
(34) 다음 함수는
가 가리키는 배열에서 최대값의 아래 첨자 값을 반환합니다. fun(int *a, int n)
{ int i, j=0, p
p=j; iif (a [i]gt; a[p]);
return (p);
}
밑줄 친 내용은
A) i=p B) a[p]=a[i] C) p=j D) p=i
(35) 실행 후 출력 결과 다음 프로그램은 p>
main()
{ int a[3][3],*p,i
p=amp;a[0] [0];
for (i=1; ilt; 9; i )p[i]=i 1
printf ("d\n", a[1] [2]);
}
A) 3 B) 6 C) 9 D) 난수
(36)에는 다음 프로그램이 있습니다
#include
void fun(int *a, int n)/*fun 함수의 기능은 a가 가리키는 배열 요소를 큰 것에서 작은 것으로 정렬하는 것입니다*/
{int t, i, j;
for(i=0; ifor(j=i 1;jif (a}
main()
{int c[10]= {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, i
fun(c 4, 6); /p>
for (i= 0;ilt;10;i) printf("d,",c);
printf("\n");
}
프로그램이 실행됩니다. 결과는
A) 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, B) 0, 9, 8 , 7, 6, 5, 1, 2, 3, 4,
C) 0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 라) 1, 2, 3, 4, 9, 8, 7, 6 , 5, 0,
(37) 다음 프로그램의 출력 결과는 #include
void prt (int *x, int*y, int*z)
{ printf ("d, d, d\n", *x, *y, *(z));}
main( )
{ int a=10 , b=40, c=20;
prt (amp; a, amp; b, amp; c); >prt (amp; a, amp; b, amp; c)
}
A) 11, 42, 31
12, 22, 41
B) 11, 41, 20
12, 42, 20
C) 11, 21, 40
11, 21 , 21
D) 11, 41, 21
12, 42, 22
(38) 다음과 같은 절차가 있습니다.
#include
void fun(char * t, char *s)
{<
/p>
while(*t!=0)t;
while((*t =*s )!=0);
}
main()
{
char ss[10]=”acc”, aa[10]=”bbxxyy”;
fun(ss, aa);
printf(“s, s\n”, ss, aa);
}
프로그램의 결과는 다음과 같습니다.
A) accxyy, bbxxyy B) acc, bbxxyy
C) accxxyy, bbxxyy D) accbbxxyy, bbxxyy
(39) 다음과 같은 프로그램이 있습니다
#include
main()
{ FILE *fp; int i=20, j=30, k, n
fp=fopen( "d1.dat", "w");
fprintf (fp, "d\n", i) fprintf (fp, "d\n", j); >fclose(fp );
fp=fopen ("d1.dat", "r")
fscanf (fp, "dd", amp; k, amp; n ); printf ( "d d\n", k, n);
fclose(fp)
}
프로그램 실행 후 출력 결과 is
A) 20 30 B) 20 50 C) 30 50 D) 30 20
(40)에는 다음 프로그램이 있습니다
main() p>
{int x[3][2]={0},I;
for(I=0;Ilt;3;I) scanf("d",x[i] );
printf("3d3d3d\n", x[0][0], x[0][1], x[1][0])
}
런타임 중에 246을 입력하면 출력 결과는
A) 2 0 0 B) 2 0 4 C) 2 4 0 D) 2 4 6
(41) 다음 프로그램이 있습니다
int add(int a, int b){return b};}
main()
{int k, (*f)() , a=5, b=10;
f=추가
…
}
다음 함수 호출 문이 잘못되었습니다. 예
A) k=(*f)(a, b) B) k=add(a, b) C) k=*f( a, b); D) k=f (a, b);
(41)에는 다음 프로그램이 있습니다.
#include
main(int argc , char *argv[])
{int i=1, n=0;
while(ilt; arge){n=n strlen(argv[i]); ;}
printf( "d\n", n);
}
이 프로그램에 의해 생성된 실행 파일의 이름은 proc.exe입니다.
실행할 때 명령줄을 입력하면:
proc 123 45 67
프로그램의 출력 결과는 다음과 같습니다.
A) 3 B) 5 C) 7 D) 11
(42)에는 다음 프로그램이 있습니다.
void fun2(char a, char b){printi(“bc”, a, b);}
char a= 'A', b= 'B';
void fun1( ){ a= 'C'l b= 'D' }
메인 ( )
{ fun1( )
printf( "cc", a, b)
fun2('E', 'F'); /p>
}
프로그램 실행 결과는 다음과 같습니다.
A) CDEF B) ABEF C) ABCD D) CDAB
(43) 다음 프로그램이 있습니다
#include
#define N 5
#define M N 1
#define f(x) ( x*M)
main()
{int i1, i2
i1=f(2); f(1 1);
printf(“d d\n”, i1, i2)
}
프로그램의 결과는 다음과 같습니다. >
A) 12 12 B) 11 7 C) 11 11 D) 12 7
(44)에는 다음과 같은 문장이 있습니다.
typedef struct TT
{char c; int a[4] ;}CIN;
다음 설명은 정확합니다.
A) TT는 구조 변수를 정의하는 데 사용할 수 있습니다. B) TT는 다음의 변수입니다. struct type
C ) CIN을 사용하여 구조 변수를 정의할 수 있습니다 D) CIN은 struct TT 유형의 변수입니다
(45) 구조 설명, 변수 정의 및 할당은 다음과 같습니다. 명령문
struct STD
{char name[10]
int age; > }s[5], *ps;
ps=amp; s[0];
그러면 다음 scanf 함수 호출 문이 구조 변수 멤버를 잘못 참조합니다.
A) scanf("s", s[0].name); B) scanf("d", amp; s[0].age)
C) scanf("c ", amp; (psgt; sex)); D) scanf("d", psgt; age);
(46) 다음과 같은 정의와 진술이 있는 경우
Union data
{ int i; char c; float f;}x;
int y;
그러면 다음 문장이 맞습니다.
A) x=10.5; B) x.c=101; C) y=x; D) printf(“d\n”, x);
(47) 변수가 올바르게 정의된 경우 다음 명령문의 출력 결과는 다음과 같습니다.
s =32; s^=32; printf(“d”, s);
A)-1 B) 0 C) 1
D) 32
(48) 프로그램에 매크로 정의 라인이 있는 경우: #define N 100, 다음 명령문은 정확합니다.
A) 식별자 N은 다음에 정의되어 있습니다. 매크로 정의 줄 값은 정수 100입니다.
B) 컴파일러가 C 소스 프로그램을 전처리할 때 식별자 N을 100으로 바꿉니다.
C) C를 컴파일할 때 식별자 N을 100으로 바꿉니다. 소스 프로그램 식별자 N
D) 런타임에 식별자 N을 100으로 바꿉니다
(49) 다음 중 올바른 설명은 무엇입니까
A) C 언어에서 파일은 스트리밍 파일이므로 순차적으로만 데이터에 액세스할 수 있습니다.
B) 기존 파일을 열고 쓰기 작업을 수행한 후에는 원본 파일의 모든 데이터를 덮어쓰게 됩니다.
C ) 프로그램에서 파일에 쓴 후에는 파일을 닫았다가 다시 열어야 첫 번째 데이터를 읽을 수 있습니다
D) 파일을 읽을(쓰기) 시 작업이 완료된 후 반드시 닫히지 않으면 데이터 손실이 발생할 수 있습니다.
(50) 다음 프로그램이 있습니다
#include
main()
{FILE *fp; int i;
char ch[]=”abcd”,t;
fp=fopen(“abc.dat”,”wb”) ;
for(i=0;ilt;4;i)fwriteramp;ch[],1,1fp;
fseek(fp,-2L,SEEK_END);
fread (amp; t, 1, 1, fp);
fclose(fp)
printf(“c\n”, t)
}
프로그램 실행 후 출력 결과는 다음과 같습니다.
A) d B) c C) b D) a
2. 빈칸을 채워주세요( 2 공백 하나당 점수 40점)
(1) 객체 지향 방법에서는 클래스 간에 속성과 작업을 공유하는 메커니즘을 1이라고 합니다.
(2) 관계형 테이블의 행을 2라고 합니다.
(3) 결합과 응집은 모듈 독립성을 평가하는 두 가지 주요 기준이며, 여기서 3은 모듈 내 구성 요소 간의 연결을 반영합니다.
(4) 선형 테이블의 저장 구조는 크게 순차 저장 구조와 체인 저장 구조로 구분됩니다. 큐는 특수한 선형 테이블이고 순환 큐는 큐의 4가지 저장 구조입니다.
(5) 5의 임무는 프로그램의 오류를 진단하고 수정하는 것입니다.
(6) 다음 프로그램의 출력 결과는 6입니다.
#include
main()
{ int n= 12345, d;
while(n!=0){ d=n10; printf("d",d) n/=10;}
}
(7) 다음 프로그램을 실행한 후의 출력 결과는 7입니다.
main()
{
int m=011, n=11
printf("d d\n", m , n );
}
(8) 동작 중에 키보드로 18, 11을 입력하면 프로그램 출력 결과는 8이 됩니다.
main()
{ int a, b
printf("a, b를 입력하세요: ") scanf("d, d", amp; ;a,amp;b);
while(a!=b)
{ while(agt;b) a-=b;
while( bgt; a) b-=a;
}
printf("3d3d\n", a, b)
}
(9) 다음 프로그램 세그먼트가 있으며 변수는 올바르게 정의되고 할당되었습니다.
for(s=1.0, k=1;klt;=n;k) s=s 1.0/ (k*( k 1));
printf("s=f\n\n", s);
다음 기능이 작동하도록 빈칸을 채워주세요 프로그램 세그먼트는 정확히 동일합니다
s=1.0;k=1;
while(_9_______){ s=s 1.0/(k*(k 1)) _10________;}
printf(" s=f\n\n", s);
(10) 다음 프로그램을 실행한 결과는 11______입니다.
#include
main()
{ int i, n[4]={1};
for(i=1; ilt; =3; i )
{ n= n[i-1]*2 1; printf("d",n) }
}
(11) 다음 프로그램에서 함수 f의 함수는 배열 x에 있습니다. n개의 숫자 중에서 가장 큰 숫자와 가장 작은 숫자를 찾고(n개의 숫자가 서로 다르다고 가정), 가장 작은 숫자를 첫 번째 숫자와 바꾸고, 가장 큰 숫자를 마지막 숫자를 채워주세요.
#include
viod f(int x[], int n)
{ int p0, p1, i, j, t, m;
i=j=x[0] p0=p1=0;
for(m=0;m{ if(x[m ]gt;i) {i=x[m]; p0 =m;}
else if(x[m]}
t=x[p0]; x[p0 ]=x[n-1]; x[n-1 ]=t;
t=x[p1]; x[p1]= 13______=t;
}
main()
{ int a[10],u;
for(u=0;ult;10;u) scanf("d ",amp;a);
f(a,10);
for(u=0;ult;10;u) printf("d",a);
printf("\n");
}
(12) 다음 프로그램의 strcpy2() 함수는 문자열의 두 복사본을 실현합니다. , t가 가리키는 문자열을 s가 가리키는 메모리 공간에 두 번 복사하고 결합하여 새로운 문자열을 형성합니다. 예를 들어 t가 가리키는 문자열이 efgh라면 strcpy2를 호출한 후 s가 가리키는 문자열은 efghefgh가 됩니다. 빈칸을 채워주세요.
#include
#include
void strcpy2(char *s, char *t)
{ char *p=t;
while(*s =*t);
s= 14;
while( 15 =*p);
main()
{ char str1[100]="abcd", str2[]="efgh";
strcpy2(str1, str2); printf("s\n", str1);
}
(13) 다음 프로그램은 터미널에 입력된 문자의 대문자 개수를 계산하여 num[0] 문자 A의 개수, num[1]의 문자 B 개수 등. #으로 입력을 끝내고, 빈칸을 채워주세요.
#include
#include
main()
{ int num[26]={0}, i; char c;
while((_16_______) !='#')
if(isupper(c)) num[c-'A'] = 17_______;
for(i=0;ilt;26;i)
Printf("c:d\n",i 'A',num);
}
(14) 다음 프로그램에서 함수는 fun은 x2-2x 6을 계산하는 것입니다. fun 함수는 기본 함수에서 호출되어 다음을 계산합니다:
y1=(x 8)2-2(x 8) 6
y2=sin2(x)-2sin(x) 6
빈칸을 채워주세요.
#include "math.h"
double fun(double x) { return(x*x-2*x 6) }
main( )
{
double x, y1, y2;
printf("x를 입력하세요: "); scanf("lf", amp; x);
y1=재미( 18 );
y2=재미( 19 )
printf("y1=lf, y2=lf\n", y1 , y2);
}
(15) 다음 프로그램의 출력 결과는 _20______입니다.
#include
#define M 5
#define N M
main()
{ int k
k=N*N*5; " d\n", k);
}
1. 객관식 질문에 대한 답변:
1-10: CACDC DADBA 11-20: BDDBA CCCCB 21-30: DCBCA CCBCA
31-40: CCDAB DCDAB 41-50: CABCD BBBDB
2. 빈칸 채우기 질문에 대한 답변:
1. 상속 2. 튜플 3. 응집력 4. 시퀀스 5. 프로그램 디버깅
6. 54321 7.10 11 8. 1 9.klt;=n k
10. 3 7 5 11.x[0] x[0] 12.s--, *s 13.c=getchar() 14. (x 8), sin(x) 15.55
그렇기를 바랍니다. 도움이 되세요