全国计算机二级C++语言程序设计考试精选选择题
1.下列叙述中正确的是( )。
A.栈是“先进先出”的线性表
B.队列是“先进后出”的线性表
C.循环队列是非线性结构
D.有序线性表既可以采用顺序存储结构,也可以采用链式存储结构
2.支持子程序调用的数据结构是( )。
A.栈
B.树
C.队列
D.二叉树
3.某二叉树有5个度为2的结点,则该二叉树中的叶子结点数是( )。
A.10
B.8
C.6
D.4
4.下列排序方法中,最坏情况下比较次数最少的是( )。
A.冒泡排序
B.简单选择排序
C.直接插入排序
D.堆排序
5.软件按功能可以分为应用软件、系统软件和支撑软件(或工具软件)。下列属于应用软件的是( )。
A.编译程序
B.操作系统
C.教务管理系统
D.汇编程序
6.下列叙述中错误的是( )。
A.软件测试的目的是发现错误并改正错误
B.对被调试的程序进行“错误定位”是程序调试的必要步骤
C.程序调试通常也称为Debug
D.软件测试应严格执行测试计划。排除测试的随意性
7.耦合性和内聚性是对模块独或性度量的两个标准。下列叙述中正确的是( )。
A.提高耦合性降低内聚性有利于提高模块的独立性
B.降低耦合性提高内聚性有利于提高模块的独立性
C.耦合性是指一个模块内部各个元素间彼此结合的紧密程度
D.内聚性是指模块间互相连接的紧密程度
8.数据库应用系统中的核心问题是( )。
A.数据库设计
B.数据库系统设计
C.数据库维护
D.数据库管理员培训
9.有两个关系R、S如下所示:
由关系R通过运算得到关系S,则所使用的运算为( )。
A.选择
B.投影
C.插入
D.连接
10.将E—R图转换为关系模式时,实体和联系都可以表示为( )。
A.属性
B.键
C.关系
D.域
11.下列选项合法的标识符是( )。
A.1_1
B.1-j
C._11
D.1__
12.若函数中有定义语句“intk;”.则( )。
A.系统将自动给k赋初值0
B.这时k中的值无定义
C.系统将自动给k赋初值-l
D.这时k中无任何值
13.下列选项中,能用作数据常量的是( )。
A.o115
B.o118
C.1.5e1.5
D.115L
14.设有定义“intx=2;”,下列表达式中,值不为6的是( )。
A.X*=x+1
B.x++,2*x
C.x*=(1+x)
D.2*x,x+=2
15.程序段“intx=12;doubley=3.141593;printf(”%d%8.6’f",X,y);”的输出结果是( )。
A.123.141593
B.123.141593
C.12,3.141593
D.123.1415930
16.若有定义语句“doublex,y,*px,*Py;执行了px=&x;py=&y;”后,正确的输入语句是( )。
A.scanf("%f%f",x,y);
B.scanf("%f%f"&x,&y);
C.scanf("%If%le",px,py);
D.scanf("%lf%If"x,y);
17.下列是if语句的基本形式:
if(表达式)语句
其中“表达式”( )。
A.必须是逻辑表达式
B.必须是关系表达式
C.必须是逻辑表达式或关系表达式
D.可以是任意合法的表达式
18.有下列程序:
#include
voidmain( )
{intx;
scanf(”%d”,&x);
if(x<=3);else
if(x!=10)printf("%d\n",x);
}
程序运行时,输入的值在哪个范围才会有输出结果( )。
A.不等于10的整数
B.大于3且不等10的整数
C.大于3或等于10的整数
D.小于3的整数
19.有下列程序:
#include
voidmain( )
{inta=1,b=2,c=3,d=0;
if(a==1&&b++==2)
if(b!=2‖c--!=3)
printf("%d,%d,%d\n",a,b,c);
elseprintf("%d,%d,%d\n",a,b,c);
elseprintf("%d,%d,%d,%d\n",a,b,c);
}
程序运行后的输出结果是( )。
A.1,2,3
B.1,3,2
C.1,3,3
D.3,2,1
20.下列程序段中的变量已正确定义:
for(i=0;i<4;i++,i++)
for(k=1;k<3;k++);printf("*");
程序段的输出结果是( )。
A.********
B.****
C.**
D.*
21.有下列程序:
#include
voidmain( )
{char*s={"ABC");
do
{printf("%d",*s);s++;
}while(*s);
}
注意:字母A的ASCIl码值为65。程序运行后的输出结果是( )。
A.5670
B.656667
C.567
D.ABC
22.设变量已正确定义,下列不能统计出一行中输入字符个数(不包含回车符)的程序段是( )。
A.n=0;while((ch=getchar( ))!=’\n’)n++;
B.n=0;while(getchar( )!=’\n’)n++;
C.for(n=0;getchar( )!=’\n’;n++);
D.n=0;for(ch=getchar( );ch!=’n’;n++);
23.有下列程序:
#include
voidmain( )
{inta1,a2charc1,c2;
scanf("%d%c%d%C",&a1,&c1,&a2,&c2);
printf("%d%c%d%C",a1,c1,a2,c2);
}
若想通过键盘输入,使得a1的值为12,a2的值为34,c1的值为字符a,c2的值为字符b,程序输出结果是12,a,34.
24.有下列程序:
#includeintf(intx,inty)
{return((y-x)*x);}
voidmain( )
{inta=3,b=4,c=5,d;
d=f(f(a,b),f(a,c));
printf("%d\n",d);
}
程序运行后的输出结果是( )。
A.10
B.9
C.8
D.7
25.有下列程序:
#include
voidfun(char*s)
{while(*s)
{if(*s%2==(1)printf("%C",*s);
s+十:
}
}
voidmain( )
{chara[]={"good");
fun(a);printf("n");
}
注意:字母a的ASCIl码值为97,程序运行后的输出结果是( )。
A.d
B.go
C.god
D.good
26.有下列程序:
#include
voidfun(int*a,int*b)
{int*C;
c=a;a=b;b=C;
}
voidmain( )
{intx=3,y=5,*p=&x,*q=&y;
fun(p,q);printf("%d,%d,",*P,*q);
fun(&x,&y);printf("%d,%d\n",*P,*q)
}
程序运行后的输出结果是( )。
A.3,5,5,3
B.3,5,3,5
C.5,3,3,5
D.5,3,5,3
27.有下列程序:
#include
voidf(int*P,int*q);
voidmain( )
(intm=1,n=2,*r=&m;
f(r,&n);printf("%d,%d",m,n);
}
voidf(int*P,int*q)
{p=p+1;*q=*q+1;}
程序运行后的输出结果是( )。
A.1,3
B.2,3
C.1,4
D.1,2
28.下列函数按每行8个输出数组中的数据。
voidfun(int*W.intn)
{inti;
for(i=0;i{____
printf("%d",w[i]);
}
printf("\n")
}
下画线处应填入的语句是( )。
A.if(i/8==0)printf("\n");
B.if(i/8=0)continue;
C.if(i%8==0)printf("\n");
D.if(i%8==0)continue;
29.若有下列定义
intx[10],*pt=x;
则对x数组元素的正确引用是( )。
A.*&*[10]
B.*(x+3)
C.*(pt+10)
D.pt+3
30.设有定义“chars[8];inti=0;”,下列不能将一行(不超过80个字符)带有空格的字符国正确读入的语句或语句组是( )。
A.gets(s);
B.while((s[i++]=getchar( ))!=’\n’);s[i]=’\0’;
C.seanf("%S",s);
D.do{scanf("%C",&s[i]);}while(s[i++]!=’\n’);s[i]=’\0’;
31.有下列程序:
#include
voidmain( )
{char*a[]={"abed","ef","gh","ijk");inti;
for(i=0;i<4;i++)printf("%C",*a[i]);
}
程序运行后的输出结果是( )。
A.aegi
B.dfhk
C.abed
D.abcdcfghijk
32.下列选项中正确的语句是( )。
A.chars[];s="BOOK!";
B.char*s;S={"BOOK!");
C.chars[10];s="BOOK";
D.char*S;s="BOOK!";
33.有下列程序:
#include
intfun(intx,inyy)
{if(x==y)return(x);
elsereturn((x+y)/2);
}
voidmain( )
{inta=4,b=5,c=6;
printf("%d\n",fun(2*a,fun(b,c)));
}
程序运行后的输出结果是( )。
A.3
B.6
C.8
D.12
34.设函数中有整型变量n,为保证其在未赋初值的情况下初值为0,应选择的存储类别是( )。
A.auto
B.xegister
C.static
D.aut0或register
35.有下列程序:
#include
intb=2;
intfun(int*k)
{b=*k+b;return(b);)
voidmain( )
{inta[10]={1,2,3,4,5,6,7,8},i;
for(i=2;i<4;i++){b=fun(&a[i])+b;printf
("%d",b);}
printf("\n");
}
程序运行后的输出结果是( )。
A.1012
B.810
C.1028
D.1016
36.有下列程序:
#include
#definePT3.5;
#defineS(x)PT*x*x;
voidmain( )
(inta=1.b=2;printf("%4.1f\n",S(a+b));}
程序运行后的输出结果是( )。
A.14.0
B.31.5
C.7.5
D.程序有错,无输出结果
37.有下列程序:
#include
structord
{intx,y;}dt[2]={1,2,3,4};
voidmain( )
{structord*p=dt;
printf("%d,",++P->x);printf("%d,",++P
->y);
}
程序的运行结果是( ).
A.1,2
B.2,3
C.3,4
D.4,1
38.设有宏定义“#definelsDIV(k,n)((k%n==1?1:0)”且变量m已正确定义并赋值,则宏调用“lsDIV(m,5)&&IsDIV(m,7)”为真时所要表达的是( )。
A.判断m是否能被5或者7整除
B.判断m是甭能被5和7整除
C.判断m被5或者7整除是否余1
D.判断m被5和7整除是否都余l
39.有下列程序:
#include
voidmain( )
{inta=S,b=1,t;
t=(a<<2)|b;printf("%d\n",t);
}
程序运行后的输出结果是( )。
A.21
B.11
C.6
D.1
40.有下列程序:
#include
voidmain( )
{FILE*f;
f=fopen("filea.txt","w");
fprintf(f,"abe");
fclose(f);
}
若文本文件filea.txt中原有内容hell0,则运行以上程序后,文件Iilea.txt中的内容为( )。
A.helloabe
B.abclo
C.abe
D.abchello
选择题答案与解析
1.D。【解析】本题考查了栈、队列、循环队列的基本概念。栈的特点是先进后出;队列的特点是先进先出。根据数据结构中各数据元素之间的复杂程度,数据结构分线性结构与非线性结构两类。有序线性表即可采用顺序存储结构,也可以采用链式存储结构。
2.A。【解析】根据栈的定义,栈是一种限定在一端进行插入与删除的线性表。在主函数调用子函数时,主函数会保持当前状态,然后转去执行子函数,把子函数的运行结果返回到主函数,主函数继续向下执行,这种过程符合栈的特点。所以一般采用栈式存储方式。
3.C。【解析】根据二叉树的性质判定,在任意二叉树中,度为0的叶子结点总是比度为2的结点多一个。
4.D。【解析】本题考查排序的比较次数,冒泡排序、简单选择排序和直接插入排序在最坏的情况下比较次数为n(n-1)/2。而堆排序法在最坏的情况下需要比较的次数为O(nlog2n)。
5.C。【解析】编译程序和汇编程序缡于开发工具;操作系统属于系统软件;而教务管理系统属于应用软件。
6.A。【解析】软件测试的目的是为了发现错误及漏洞而执行程序的过程;软件测试要严格执行测试计划;程序调试通常也称Debug,对被调试的程序进行“错误”定位是程序调试的必要步骤。
7.B。【解析】耦合是指模块间相互连接的紧密程度,内聚性是指在一个模块内部各个元素彼此之间接合的紧密程序。高内聚、低耦合有利于模块的独立性。
8.A。【解析】数据库设计的目的是设计一个能满足用户要求、性能良好的数据库。所以数据库设计是数据库应用的核心。
9.B。【解析】本题考查关系的运算,一个关系R通过投影运算后仍为一个关系R’,R’是由R中投影运算所指出的引起域的列所组成的关系。选择运算主要是对关系R中选择由满足逻辑条件的元组所组成的一个新关系,所以题中关系S是由R投影所得。
10.C。【解析】在C语言中,将E—R图转换为关系模式时,实体和联系都可以表示为关系。
11.C。【解析】C语言中标识符命中的规则是:标识符只能由字母、数字和下画线组成,第一个字符必须为字母或下画线。所以选项C正确。
12.B。【解析】根据题目,若以这种方式定义变量k时,编译程序仅为k开辟存储单元,并未在存储单元中存放任何初始值,所以变量中的值无意义,称变量值“无定义”。所以正确答案为选项B。
13.D。【解析】选项A的第一个字母是O而不是数字0,所以不构成数值常量;选项B中,8不是八进制数字,八进制数为0到7;选项C中字母“e”后面的指数是小数而非整数,不合法,不是一个合法的指数形式的数值常量;在选项D中,可以在整型常量的后面加一个字母L,表示这个常量在内存中占4字节。
14.D。【解析】本题考查了复合运算符“=”和逗号表达式如何正确求值。逗号表达式的作用是用逗号将表达武连起来,其有效值为最后一个表达式的值,其运算的结合性从左到右进行运算。选项D是一个逗号表达式,其值为4。
15.A。【解析】根据输出函数printf中对输出数值格式的要求,第一个数和第二数之间没有空格或分隔号,因而此题答案为选项A。
16.C。【解析】此题主要考查输入函数的字符格式,lf和le表示以带小数点的数学形式或指数形式输入浮点数。
17.D。【解析】在C语言中if关键字后的一对圆括号中的表达式可以是c语言中任意合法的表达式。
18.B。【解析】在本题的程序中输入的数值小于等于3时,不进行任何处理。如果输入的数值大于3并且其值不等于10时,则打印输入的数值。所以本题的正确答案为选项B。
19.C。【解析】在程序中,当执行第一条if语句时,进行逻辑语句的判断,因为变量b的初值为2,所以其值加1后为3,与2不相等,所以if语句中的逻辑表达式的值为假,则程序执行最后一条elseprintf语句。输出变量为a,b,c,当前数值为1,3,3。所以正确答案为选项C。
20.D。【解析】本题中第二个for循环语句的后面有一个分号,所以两个for循环语句的执行语句为空。当两个for循环语句执行完后,再执行printf语句输出一个星号。所以正确答案为选项D。
21.C。【解析】本题考查d0…while语句,至少执行一次循环体,依次输出ABC,这三个字母的ASCIl值对10求模的余数,字母A的ASCIl值对10求模的余数为5,字母B的ASCIl值对10求模的余数为6,字母c的ASCIl值对10求模的余数为7。所以正确答案为选项C。
22.D。【解析】本题中,第一条语句对变量n赋初值时为0,在for循环中,从getchar函数得到一个输入的字符,然后判断这个字符是否为回车换行符,如果不是,则变量n加1,而在程序运行时,每次输入时是一个字符串,而不是一个字符,因而for循环语句得不到正确的执行,所以不能够统计出一行中字符的个数。所以正确答案为选项D。
23.A。【解析】从程序的输入格式控制方法判断,输入时各变量之间没有分隔符,当输入相应的变量对应的值时,相应的变量能够得到对应的值,可以输出要求的结果。
24.B。【解析】在C语言中,子函数f(intX,inty)的功能是计算y减去x的差与X之积。所以在主函数中,调用f(a,b)的值等于3,调用f(a,c)的值等于6,然后再调用f(3,6)的值等于9,所以正确答案为选项8。
25.A。【解析】在本题中,子函数fun(char*s)的功能是如果*s的ASCIl值是偶数,则输出*s,主函数中当实参的值为good时,9的ASCIl值是103,字母o的ASCIl值是111,字母d的ASCIl值是100,只有字母d的ASCIl值是偶数,所以输出字母d。
26.B。【解析】本题子函数fun(int*a,*b)的功能是交换形参a,b的值。主函数中调用子函数fun(P,q)和fun(&x,&y)后,实参P,q和&x,&y的值之间并没有发生交换,所以程序输出的结果为3,5,3,5。
27.A。【解析】本题中子函数f(int*p,*q)的功能是对指针p的值加1,*q的值加1。主函数中调用子函数f(r,&n)时,子函数的执行结果是r值加1,n的值加1。而m的值并没有发生变化,最后程序输出的结果为1,3。所以正确答案为选项A。
28.D。【解析】在程序中,fun函数的功能是每行输出8个数组中的数据,在for循环中,每次循环时,都对数组下标值8求模得到余数。如果余数等于0,则退出for循环,进行下一次循环:如果余数不等于0,则输出数组的元素w[i]。
29.B。【解析】在C语言中,数组名是一个存放地址值的指针变量名,其地址值是数组第。一个元素的地址,也是数组所占一串连续存储单元的起始地址。因为数组的下标是从0开始的,所以选项B中,X+3表示数组x[10]中的第四个元素的地址,在其前面加上星号,表示是数组x[10]中的第四个元素中的值。所以正确答案为选项B。选项A、C的地址范围超出数组x[10]中元素的地址范围,选项D表示的是地址值。
30.C。【解析】在scanf输入函数中,格式字符s的作用是输入一个字符串,直到遇到空格结束。所以选项C不能输入包含空格的字符串。正确答案为选项C。
31.A。【解析】*a[]表示一个字符串数组,for循环的作用是输出字符串数组中每一次字符串的第一个字符。所以正确答案为选项A。
32.D。【解析】在选项D中,字符指针s指向字符串常量BOOK!。故选项D正确。
33.B。【解析】在程序中子函数fun(intX,inty)的功能是如果X的值等于y的值,则返回X的值,否则返回这两个数的算术平均值,在主函数中首先计算fun(5,6),其值等于5,然后再计算fun(8,5),其值等于6。所以正确答案为选项B。
34.C。【解析】在C语言中,未赋初值的静态局部变量,编译程序自动给它赋初值0。所以选择C。
35.C。【解析】在程序中子函数fun(int*k)的作用是给静态全局变量加上形参*k的值。在主函数中进行第一次for循环执行时,fun(&a[2])的返回值为5,所以5+5=10,
因而输出结果为10,第二次for循环执行时,fun(&a[3])的返回值为14,所以14+14=28。
36.D。【解析】这个程序有错误不能通过编译。①#define宏定义后不可有分号;②用分号隔开后,int只定义了a。b要重新定义。
37.B。【解析】在本题中结构体成员访问运算符->的
优先级高于++算术运算符,所以表达式++p>x的计算过程是首先取出结构体dt[0]的成员变量X的值1,然后再对其值加1,得到2输出。表达式++p->y的计算过程是首先取出结构体dt[0]的成员变量y的值2,然后再对其值加1,得到3输出。
38.D。【解析】本题考查宏定义,宏定义IsDIV(k,n)的意思是如果k对n.求模的余数为1,其值等于1,否则其值等于0。本题中宏调用表达式是两个宏调用之间的逻辑与运算,所以选项D正确。
39.A。【解析】本题考查移位运算符在程序中对5逻辑左移2位,其值扩大4倍等于20,然后再进行按位运算,其值等于21。
40.C。【解析】把字符串abe以只写的方式写入到文件filea.txt中,覆盖掉原有的字符串hell0。
全国计算机等级考试计算机基础及Photoshop应用试题答案汇总(6套)
[Photoshop应用]2017年2月3日全国计算机等级考试四级数据库系统工程师试题及答案汇总(22套)
[数据库工程师]2017年2月2日全国计算机一级考试模拟试题及答案300题
[WPS Office应用]2017年1月22日2017年3月全国计算机等级考试报名时间及报名入口汇总
[考试动态]2017年1月3日2017全国计算机等级考试考试大纲专题
[政策大纲]2017年1月3日