2004年9月全国计算机等级考试二级C++试题及答案
一、选择题(1-40,1,41-50,2,***60)
在下面的四个选项a),b),c)和d)中,只有一个选项是正确的。
1.1MB等于
A) 1000字节
B) 1024字节
C) 1000×1000字节
D) 1024×1024字节
2.相当于十六进制数200的十进制数是
256人
B) 512
C) 1024
D) 2048年
3.所谓“*机”是指
a)单片微型计算机
b)单板计算机
c)没有任何软件的计算机
d)仅装有操作系统的计算机
4.能用高级语言编写的源程序转换成目标程序的是
a)链接程序
b)解释程序
c)编译器
d)我的程序
5.在64位计算机中,一个字长所占的字节数是
A) 64
B) 8
C) 4
D) 1
6.在Windows环境中,当应用程序窗口最小化时,应用程序
a)继续在后台运行
b)继续在前台运行。
c)操作的终止
d)暂停操作
7.在Windows环境下,可以实现窗口移动的操作有
a)用鼠标拖动窗口的任何部分。
b)用鼠标拖动窗口的边框。
c)用鼠标拖动窗口的控制按钮。
d)用鼠标拖动窗口的标题栏。
8.在Windows环境中,PrintScreen键的功能是
a)打印当前窗口的内容
b)打印屏幕内容
c)将屏幕复制到剪贴板
d)将当前窗口复制到剪贴板。
9.9的通信协议。互联网是
A) TCP/IP
B) BBS
C) WWW
D) FTP
10.下列说法是正确的
a)计算机病毒只感染可执行文件。
计算机病毒只感染文本文件。
c)计算机病毒只能通过软件复制来传播。
d)计算机病毒可以通过互联网或读写磁盘传播。
11.一个算法应该有五个特征,比如“确定性”。以下对其他四个特征的描述是错误的。
a)有零个或多个输入
b)有零个或多个输出。
贫困
d)可行性
12.下列说法是正确的
a)C语言的源程序可以不编译直接运行。
b)C语言中的每一条可执行语句,最终都会被转换成二进制的机器指令。
C) C编译C源程序形成的二进制代码可以直接运行。
d)C语言中的函数不能独立编译。
13.以下符合C语言语法的实数常量是
A) 1.2E0.5
B) 3.14.159E
C) 5E-3
D) E15
14.在以下四组用户定义的标识符中,所有合法的都是
a)_主要包括罪
b)中频-最大涡轮增压
C) txt REAL 3COM
D) int k_2 _001
15.如果正确定义了下列选项中的变量,则正确的赋值语句是
A) x1=26.8%3
B) 1+2=x2
C) x3=0x12
d)x4 = 1+2 = 3;
16.具有以下定义
int a = 0;
双b = 1.25;
char c = ' A
#定义d 2
下列说法中错误的是
a)a++;
b)b++;
c)c++;
d)d++;
17.有定义:float a=2,b=4,h = 3;以下C语言表达式与代数计算结果不一致。
A) (a+B) *h/2
B) (1/2)*(a+B) *h
C) (a+B) *h*1/2
D) h/2*(a+B)
18.有以下程序
main(){
int x=102,y = 012;
printf("-,-\n ",x,y);
}
执行后的输出结果是
A) 10,01
B) 02,12
102,10
02,10
19.以下四个选项中,不能视为陈述的是
a){;}
B) a=0,b=0,c = 0;
c)如果(a & gt0);
d)if(b = = 0)m = 1;n = 2;
20.有一个定义:int a,* pa = &;a;在下面的scanf语句中,可以正确读取变量A的数据的是
A) scanf("%d ",pA);
B) scanf("%d ",A);
C) scanf("%d ",& amppA);
D) scanf("%d ",* pA);
21.在下面的程序段中,还有语句k = a >;b?(b & gtc?1:0):0;功能等同
a)如果((a & gtb)和amp& amp(b & gtc))k = 1;
b)如果((a & gtb)| |(b & gt;C) ) k=1否则k = 0;
c)如果(a & lt= B)k = 0;
d)如果(a & gtb)k = 1;else if(bC)k = 1;否则k = 0;
22.有以下程序。
main(){
char k;int I;
for(I = 1;我& lt3;i++){
scanf("%c ",& ampk);
开关(k){
大小写“0”:printf(" another \ n ");
case ' 1 ':printf(" number \ n ");
}
}
}
程序运行时,从键盘输入:01回车>程序执行后的输出结果是
a)另一个号码
b)另一个号码
c)另一个数字另一个
d)编号编号编号
23.有以下程序。
main(){
int x=0,y=5,z = 3;
while(z->;0 & amp& amp++ x & lt;5)y = y-1;
printf("%d,%d,%d\n ",x,y,z);
}
程序执行后的输出结果是
A) 3,2,0
B) 3,2,-1
C) 4,3,-1
D) 5,-2,-5
24.有以下程序。
main(){
int i,s = 0;
for(I = 1;我& lt10;I+= 2)s+= I+1;
printf("%d\n ",s);
}
程序执行后的输出结果是
a)自然数1 ~ 9的累积和
b)自然数1 ~ 10的累计和
c)自然数1 ~ 9中奇数之和
d)自然数1 ~ 10中偶数之和。
25.有以下程序。
main(){
int i,n = 0;
for(I = 2;我& lt5;i++){
做{
如果(i%3)继续;
n++;
}while(!I);
n++;
}
printf("n=%d\n ",n);
}
程序执行后的输出是
A)n=5
B)n=2
C)n=3
D)n=4
26.如果程序中定义了以下功能。
double myadd(双a,双B){ return(a+B);}
并且放在调用语句之后,函数在调用之前要说明。以下选项中的错误解释是
a)双重myadd(双重a、B);
B)double myadd(double,double);
c)双myadd(双b,双A);
D)double myadd(双x,双y);
27.有以下程序。
char fun(char x,char y){
if(x返回y;
}
main(){
int a='9 ',b='8 ',c = ' 7
printf("%c\n ",fun(fun(a,B),fun(b,C)));
}
程序执行的结果是
a)函数调用错误
B)8
C)9
D)7
28.有定义:int n = 0,* p = &;n,* * q = & ampp;下列选项中,正确的赋值语句是
a)p = 1;
b)* q = 2;
c)q = p;
d)* p = 5;
29.有以下程序。
void f(int v,int w){
int t;
t = v;v = w;w = t;
}
main(){
int x=1,y=3,z = 2;
if(x & gt;y) f(x,y);
else if(y & gt;z) f(y,z);
else if(x,z);
printf("%d,%d,%d\n ",x,y,z);
}
执行后的输出结果是
A)1,2,3
B)3,1,2
C)1,3,2
D)2,3,1
30.有以下程序段
int a[10]={1,2,3,4,5,6,7,8,9,10},* p = & ampa[3],b;
b = p[5];
b中的值为
答)5
B)6
C)8
D)9
31.有以下程序。
main(){
char a[]="abcdefg ",b[10]= " abcdefg ";
printf("%d %d\n ",sizeof(A),sizeof(B));
}
执行后的输出结果是
A)7 7
B)8 8
8 10
D)10
32.有以下程序。
void swap1(int c[]){
int t;
t = c[0];c[0]= c[1];c[1]= t;
}
void swap2(int c0,int c1){
int t;
t = c0c0 = c 1;c 1 = t;
}
main(){
int a[2]={3,5},b[2]={3,5 };
swap 1(A);
swap2(b[0],b[1]);
printf("%d %d %d %d\n ",a[0],a[1],b[0],b[1]);
}
输出结果是
A)5 3 5 3
B)5 3 3 5
C)3 5 3 5
D)3 5 5 3
33.有以下程序。
void sum(int *A){
a[0]= a[1];
}
main(){
int aa[10]={1,2,3,4,5,6,7,8,9,10},I;
for(I = 2;我& gt=0;I-)sum(& amp;aa[I]);
printf("%d\n ",aa[0]);
}
执行后的输出是
A) 4
B) 3
C) 2
D) 1
34.有以下程序。
int f(int b[][4]){
int i,j,s = 0;
for(j = 0;j & lt4;j++){
I = j;
如果(i & gt2)I = 3-j;
s+= b[I][j];
}
返回s;
}
main(){
int a[4][4]={{1,2,3,4},{0,2,4,5},{3,6,9,12},{3,2,1,0 } };
printf("%d\n ",f(A));
}
执行后的输出是
A) 12
B) 11
C) 18
D) 16
35.有以下定义
#包括
char a[10],* b = a;
不能为数组A输入字符串的说法是
A)得到(A)
b)得到(a[0])
c)获取(& ampa[0]);
d)得到(B);
36.有以下程序。
main(){
char *p[10]={"abc "," aabdfg "," dcdbe "," abbd "," CD " };
printf("%d\n ",strlen(p[4]));
}
执行后的输出结果是
A)2
B)3
C)4
D)5
37.有以下程序。
int a = 2;
int f(int * A){ return(* A)++;}
main(){
int s = 0;
{
int a = 5;
s+= f(& amp;a);
}
s+= f(& amp;a);
printf("%d\n ",s);
}
执行后的输出结果是
A)10
B)9
C)7
D)8
38.有以下程序。
#定义f(x) x*x
main(){
int I;
I = f(4+4)/f(2+2);
printf("%d\n ",I);
}
执行后的输出结果是
A)28
B)22
C)16
D)4
39.有以下声明
typedef结构S { int g;char h;} T;
以下描述中正确的是
a)结构变量可以由s定义。
b)可以用t来定义结构变量。
S是一个struct类型的变量。
T是struct S类型的变量。
40.有以下程序。
结构学{
字符名称[10];
int num
};
void f1(结构STU C){
struct STU b={ "李四国",2042 };
c = b;
}
void f2(结构STU *C){
struct STU b={“孙丹”,2044 };
* c = b;
}
main(){
struct STU a={ "杨三",2041},b={ "王印",2043 };
f 1(A);
F2(& amp;b);
printf("%d %d\n ",a.num,b . num);
}
执行后的输出是
A)2041 2044
B)2041 2043
2042年2044年
D)2042年
41.有以下程序。
main(){
无符号字符a,b;
a = 4 | 3;
b = 4 & amp3;
printf("%d %d\n ",a,b);
}
执行后的输出结果是
A) 7 0
B) 0 7
C) 1
D) 43 0
42.以下程序的功能是输出以下金字塔图案:
*
***
*****
*******
main(){
int i,j;
for(I = 1;我& lt=4;i++){
for(j = 1;j & lt= 4-I;j++)printf(" ");
for(j = 1;j & lt=_______;j++)printf(" * ");
printf(" \ n ");
}
}
下划线里应该填的是
a)我
b)2 *识别号1
C) 2*i+1
D) i+2
43.有以下程序。
void sort(int a[],int n){
int i,j,t;
for(I = 0;I for(j = I+2;j if(a[i]}
main(){
int aa[10]={1,2,3,4,5,6,7,8,9,10},I;
排序(aa,10);
for(I = 0;我& lt10;i++) printf("%d ",aa[I]);
printf(" \ n ");
}
输出结果是
A) 1,2,3,4,5,6,7,8,9,10,
B) 10,9,8,7,6,5,4,3,21,
C) 9,2,7,4,5,6,3,8,1,10,
D) 1,10,3,8,5,6,7,4,9,2,
44.下列程序段中,不能正确赋值字符串(编译时系统会提示错误)的是
a)char s[10]= " abcdefg ";
B) char t[]="abcdefg ",* s = t;
c)char s[10];s = " abcdefg
d)char s[10];strcpy(s," abcdefg ");
45.有以下程序。
#包括
main(int argc,char *argv[]){
int i,len = 0;
for(I = 1;i printf("5d\n ",len);
}
编译链接后生成的可执行文件是ex.exe。如果在运行时输入以下带参数的命令行,
ex abcd efg h3 k44
执行后的输出结果是
A) 14
B) 12
C) 8
D) 6
46.有以下程序。
void f(int a[],int i,int j){
int t;
if(I t = a[I];a[I]= a[j];a[j]= t;
f(a,i+1,j-1);
}
}
main(){
int i,aa[5]={1,2,3,4,5 };
f(aa,0,4);
for(I = 0;我& lt5;i++) printf("%d,",aa[I]);
printf(" \ n ");
}
执行后的输出结果是
5,4,3,2,1,
5,2,3,4,1,
C) 1,2,3,4,5,
D) 1,2,3,4,5,
47.有以下程序。
结构研究{
字符名称[10];
int num
int分数;
};
main(){
struct STU s[5]={{ "杨三",20041,703},{ "李四国",20042,580},{ "王印",20043,680},{ "孙丹",20044,550},
{“鹏华”,20045,537}},*p[5],* t;
int i,j;
for(I = 0;我& lt5;i++)p[I]= & amp;s[I];
for(I = 0;我& lt4;i++)
for(j = I+1;j & lt5;j++)
if(p[I]-& gt;得分& gtp[j]-& gt;score){ t = p[I];p[I]= p[j];p[j]= t;}
printf("5d %d\n ",s[1]。Score,p[1]-& gt;分数);
}
执行后的输出结果是
550 550
680 680
580 550
580 680
48.有以下程序。
#包括
结构节点{
int num
结构节点* next
};
main(){
结构节点*p,*q,* r;
int sum = 0;
p=(结构节点*)malloc(sizeof(结构节点));
q=(结构节点*)malloc(sizeof(结构节点));
r=(结构节点*)malloc(sizeof(结构节点));
p->;num = 1;q->;num = 2;r-& gt;num = 3;
p->;next = q;q->;next = r;r-& gt;next = NULL
sum+= q-& gt;下一个-& gt;numsum+= p-& gt;num
printf("%d\n ",sum);
}
执行后的输出是
A) 3
B) 4
C) 5
D) 6
49.有以下程序。
#包括
main(){
FILE * fpint i,k=0,n = 0;
fp=fopen("d1.dat "," w ");
for(I = 1;我& lt4;i++) fprintf(fp,“%d”,I);
fclose(FP);
fp=fopen("d1.dat "," r ");
fscanf(fp," %d%d ",& ampk & amp;n);printf("%d %d\n ",k,n);
fclose(FP);
}
执行后的输出结果是
A) 1 2
123 0
1 23
D) 0 0
50.程序中有以下程序(提示:fseek (fp,-2l * sizeof (int),seek _ end);该语句的功能是将位置指针从文件末尾向前移动2*sizeof(int)字节。
#包括
main(){
FILE * fpint i,a[4]={1,2,3,4},b;
fp=fopen("data.dat "," WB ");
for(I = 0;我& lt4;i++)fwrite(& amp;a[i],sizeof(int),1,FP);
fclose(FP);
fp=fopen("data.dat "," Rb ");
fseek(fp,-2L*sizeof(int)。SEEK _ END);
弗雷德(& ampb,sizeof(int),1,FP);/*将sizeof(int)字节的数据从文件读入变量B */
fclose(FP);
printf("%d\n ",B);
}
执行后的输出结果是
A) 2
B) 1
C) 4
D) 3
二、填空(每空2分,***40分)
请将每个空的正确答案写在括号内。
1.电子邮件地址由用户名和域名组成,这两部分之间的分隔符是。
2.计算机网络分为广域网和局域网,互联网属于。
3.从Windows环境进入MS-DOS模式后,返回Windows环境的DOS命令是。
4.在Windows环境下,只需点击“开始”菜单中的选项,就可以查看最近打开的文档列表。
5.计算机的运算速度可以用MIPS来描述,1MIPS就是每秒执行指令数。
6.已知字符A的ACSII码值为65,以下语句的输出结果为
char ch = ' B
printf("%c %d\n ",ch,ch);
7.有以下几个句子片段
int n1=10,n2 = 20
printf(",n 1 . N2);
n1和n2的值需要以下列格式输出。每个输出行从第一列开始。请填空。
n1=10
n2=20
8.有以下程序
main(){
int t=1,I = 5;
for(;我& gt=0;I-)t * = I;
printf("%d\n ",t);
}
执行后的输出是。
9.有以下程序。
main(){
int n=0,m=1,x = 2;
如果(!n)x-= 1;
如果(m)x-= 2;
if(x)x-= 3;
printf("%d\n ",x);
}
执行后的输出是。
10.有以下程序
#包括
main(){
char ch1,ch2int n1,N2;
ch 1 = getchar();CH2 = getchar();
n 1 = ch 1-' 0 ';N2 = n 1 * 10+(CH2-' 0 ');
printf("%d\n ",N2);
}
程序运行时输入:12 Enter >执行后,输出结果为。
11.有以下程序。
void f( int y,int * x){ y = y+* x;* x = * x+y;}
main(){
int x=2,y = 4;
f(y & amp;x);
printf("%d %d\n ",x,y);
}
执行后的输出是。
12.fun的作用是计算xn。
double fun(double x,int n){
int I;double y = 1;
for(I = 1;我& lt= n;i++)y = y * x;
返回y;
}
变量M,A,B已经在主函数中正确定义赋值,调用fun函数计算:m=a4+b4-(a+B) 3。实现这个计算的函数调用语句是。
13.下面旋转函数的作用是将n行n列的矩阵A转置为A’,例如:
1 2 3 4 1 5 9 13
5 6 7 8 2 6 10 14
当A = 9 10 1112时,a' A'= 3 7 11 15。
13 14 15 16 4 8 12 16
请填空
#定义N 4
void rotate(int a[][N]){
int i,j,t;
for(I = 0;I for(j = 0;;j++){
t = a[I][j];
;
a[j][I]= t;
}
}
14.下面的sstrcpy()函数实现了字符串复制,即将T指向的字符串复制到S指向的内存空间中,形成新的字符串S,请填空。
void sstrcpy(char *s,char * t){ while(* s++ =);}
main(){
char str1[100],str 2[]= " abcdefgh ";
sstrcpy(str1,str 2);
printf("%s\n ",str 1);
}
15.以下程序的运行结果是:
#包括
char * ss(char * s){ return s+strlen(s)/2;}
main(){
char *p,* str = " abcdefgh
p = ss(str);printf("%s\n ",p);
}
16.以下程序的运行结果是:
int f( int a[],int n){
如果(n & gt1)返回一个[0]+f(& amp;a[1],n-1);
否则返回一个[0];
}
main(){
int aa[3]={1,2,3},s;
s = f(& amp;aa[0],3);printf("%d\n ",s);
}
17.在下面的程序中,三个双动态内存单元被分配给指针p,请填空。
#包括
main (){
双* p;
p =(double *)malloc();
p[0]= 1.5;p[1]= 2.5;p[2]= 3.5;
printf("%f%f%f\n ",p[0],p[1],p[2]);
}
18.以下程序的运行结果是
#包括
typedef结构学生{
字符名称[10];
龙sno
浮动分数;
}斯图;
main(){
STU a={ "张三",2001,95},b={ "尚贤",2002,90},c={ "安化",2003,95},d,* p = & ampd;d = a;
if(strcmp(a.name,b.name)>0)d = b;
if(strcmp(c.name,d.name)>0)d = c;
printf("%ld%s\n ",d.sno,p-& gt;姓名);
}
19.下面sum函数的作用是计算下面数列的和。
S=1+x+x2/2!+x3/3!+........+xn/n!
请为函数中的变量正确赋值初始值。
double sum( double x,int n ){
int I;双a,b,s;
;
for(I = 1;我& lt= n;i++){ a = a * x;b = b * I;s = s+a/b;}
返回s;
}