全国计算机二级C语言模拟测试含详细解析 18Word文档格式.docx
《全国计算机二级C语言模拟测试含详细解析 18Word文档格式.docx》由会员分享,可在线阅读,更多相关《全国计算机二级C语言模拟测试含详细解析 18Word文档格式.docx(29页珍藏版)》请在冰点文库上搜索。
D.F,G,H,I,J,E,D,C,B,A
D你的答案:
【解析】栈称为“后进先出”表或“先进后出”的线性表;
队列称为“先进先出”或“后进后出”的线性表。
F,G,H,I,J依次入队,则依次出队顺序为F,G,H,I,J;
A,B,C,D,E依次入栈,则依次出栈顺序为E,D,C,B,A。
故输出顺序为F,G,H,I,J,E,D,C,B,A。
故本题选择D选项。
5.下面不属于软件工程三要素的是()。
A.环境
B.工具
C.过程
D.方法
【解析】软件工程包含3个要素:
方法、工具和过程。
6.程序流程图是()。
A.总体设计阶段使用的表达工具
B.详细设计阶段使用的表达工具
C.编码阶段使用的表达工具
D.测试阶段使用的表达工具
【解析】详细设计阶段常见的工具有程序流程图、N-S图、PAD图、HIPO图、判定表等。
7.下面属于“对象”成份之一的是()。
A.封装
B.规则
C.属性
D.继承
【解析】面向对象方法中的对象由两部分组成:
①数据,也称为属性,即对象所包含的信息,表示对象的状态;
②方法,也称为操作,即对象所能执行的功能、所能具有的行为。
8.数据库管理系统能实现对数据库中数据的查询、插入、修改和删除,这类功能称为()。
A.数据控制功能
B.数据定义功能
C.数据存储功能
D.数据操纵功能
【解析】数据定义功能:
负责数据的模式定义与数据的物理存取构建。
数据操纵功能:
负责数据的操纵,包括查询与增、删、改等操作。
数据控制功能:
负责数据完整性、安全性的定义与检查以及并发控制、故障恢复等功能。
9.实体电影和实体演员之间的联系是()。
A.一对一
B.多对多
C.多对一
D.一对多
【解析】一部电影可由多名演员参演,一名演员可以参演多部电影,因此实体电影和实体演员之间的联系是多对多。
10.定义学生的关系模式如下:
S(S#,Sn,Sex,Age,D#,Da)(其属性分别为学号、姓名、性别、年龄、所属学院、院长)
该关系的范式最高是()。
A.1NF
B.2NF
C.3NF
D.BCNF
【解析】关系数据库中的关系是要满足一定要求的,满足不同程度要求的为不同的范式。
满足最低要求的叫第一范式,简称1NF。
在满足第一范式的基础上,进一步满足更多要求规范则是第二范式。
然后在满足第二范式的基础上,还可以再满足第三范式,以此类推。
对于关系模式,若其中的每个属性都已不能再分为简单项,则它属于第一范式。
若某个关系R为第一范式,并且R中每一个非主属性完全依赖于R的某个候选键,则称其为第二范式。
第二范式消除了非主属性对主键的部分依赖。
如果关系R是第二范式,并且每个非主属性都不传递依赖于R的候选键,则称R为第三范式。
(传递依赖:
在关系模式中,如果Y→X,X→A,且X不决定Y和A不属于X,那么Y→A是传递依赖)。
本题中,关系S满足第一范式和第二范式,但是S#→D#,D#→Da,存在传递依赖,因此不满足第三范式。
该关系的范式最高是2NF。
11.下面叙述中正确的是()。
A.用计算机汇编语言书写的程序是计算机可以直接执行的
B.程序是用纯粹的英文所表示的人们头脑中解决问题或进行计算的步骤
C.算法仅仅是用计算机高级语言书写的计算机解题的步骤
D.用任何计算机高级语言书写的程序都必须转换为计算机指令序列才能执行
【解析】计算机只能识别机器语言,选项A错误;
程序不仅仅由纯粹的英文书写,还包括数字和一些特殊符号,选项B错误;
算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,并不仅仅是解题步骤,选项C错误;
计算机只能识别执行计算机指令序列,任何程序都需要转换成指令序列才能被计算机执行,选项D正确;
本题答案为D。
12.下面叙述中错误的是()。
A.C语言的函数可以直接使用,无需事先定义或声明
B.C语言程序是由函数组成的
C.C语言的函数就是一段程序
D.C语言的函数可以单独编译
A你的答案:
【解析】C语言要求,在程序中用到的所有函数,必须“先定义,后使用”,选项A错误;
一个源程序文件由一个或多个函数以及其他同有关内容(如指令、数据声明与定义)组成,选项B正确;
函数就是一段具有特定功能的程序,选项C正确;
C语言中的函数可以单独进行编译,编译为目标文件,要链接成可执行文件时,选项D正确;
本题答案为A。
13.若有定义:
inta=100;
则语句printf("
%d%d%d\n"
sizeof("
a"
),sizeof(a),sizeof(3.14));
的输出是()。
A.328
B.248
C.238
D.421
【解析】sizeof是C/C++中的一个操作符(如++、--),作用就是返回一个对象或者类型所占的内存字节数。
sizeof(char)为1,sizeof(int)为4,sizeof(double)为8。
当操作数是具体的字符串或者数值时,会根据具体的类型进行相应转化,sizeof("
),转化为数组型,注意要加上后面的‘\0’,字节数为2;
sizeof(a)即为sizeof(100),等价于sizeof(int)所以返回值为4;
sizeof(3.14)其中3.14是double型,所以返回值为8,选项B正确;
本题答案为B。
14.若有定义:
inta=3,b;
,则执行语句:
b=(a++,a++,a++);
后,变量a和b的值分别是()。
A.6,5
B.8,7
C.6,3
D.5,6
【解析】C语言中“++”为单目运算符,优先级最高,a++表示在使用a之后使a的值加1,逗号表达式从左到右按顺序执行,并返回最右表达式的值,所以最后a自增了3次,结果为6,因为a++为使用后加1,所以在第三个a++时,返回最右表达式的值,a此时的值为5,赋值给b,赋值结束后执行第三次自增,所以最后a的值为6,b的值为5,选项A正确;
本题答案为A
15.有以下程序段
b=a+3;
{
intc=2;
a*=c+1;
}
printf("
%d\n"
a);
下面关于此段程序的说法,正确的是()。
A.这段程序的输出是9
B.这段程序中存在有语法错误的语句
C.这段程序的输出是7
D.可执行语句b=a+3后,不能再定义变量c
【解析】C语言中变量的定义可以在复合语句的开头,所以可以定义变量c,选项D错误;
此段程序不存在语法错误,选项B错误;
C语言中运算符*=(/=、+=、-=),例如a*=b(a/=b、a+=b、a-=b)等价于a=a*b(a=a/b、a=a+b、a=a-b),此段程序开始a=3,b没有赋初值,执行b=a+3后b为6,定义变量c并赋初值2,执行a*=c+1,等价于a=a*(c+1),结果为9,选项A正确,选项C错误;
16.以下叙述中正确的是()。
A.在C语言中,常量名也要遵守标识符的命名规则
B.对单目运算符来说,运算对象一定在其右侧
C.标识符的首字符必须是下划线、字母,其他字符可以是任意的键盘可键入字符
D.变量占用内存,常量不占用内存
【解析】C语言中,用来对变量、符号常量名、函数、数组、类型等命名的有效字符序列统称为标识符,常量名也要遵守标识命名规则,选项A正确;
单目运算符的运算对象可以在其左侧或者右侧,如i++或++i,选项B错误;
C语言规定标识符只能由字母、数字、下划线组成,选项C错误;
一般来说,基本类型(整型、字符型等)常量会在编译阶段被编译成立即数,占的是代码段的内存,而字符串常量或基本类型的常量数组占用的是数据段内存。
当然,占代码段的内存一般不在我们常说的“占内存”范围中,选项D错误;
17.若有定义:
inta=3,b=2;
,则下面表达式中,值为真的选项是()。
A.!
b||!
a
B.!
(a/b)
C.!
(b/a)
D.!
a&
&
!
b
【解析】C语言中“!
:
叫“取非”运算符,属于逻辑算符,只有两种状态,“真”和“假”,C语言规定非0为“真”,0为“假”。
a=2,b=3,!
2、!
3为0,即为假,||为或运算符,左右两个表达式有一个为真及整个表达式为真,0||0为0,值为假,选项A错误;
a/b为1.5,又因为a、b都为int型,自动转换,丢弃小数部分,所以a/b的值为1,!
1为0,为假,选项B错误;
b/a为0.6666...,丢弃小数部分,其值为0,!
0为真,所以选项C正确;
3为0,即为假,&
为与表达式,左右两个表达式全为真时整个表达式才为真,0&
0为假,选项D错误;
本题答案为C。
18.若要求:
当数学式3<
x<
7成立时,使得y=1,且设x、y为int型变量,则以下能够实现这一要求的选项是()。
A.if(x>
3)if(x<
7)y=1;
B.if(x>
3||x<
C.if(x<
3)y=1;
elseif(x<
D.if(!
(x<
=3))y=1;
elseif(7>
x)y=1;
【解析】要求为当X>
3且X<
7时使得y=1。
当X>
7时使得y=1,选项A正确;
||为或运算符,选项B错误;
当X<
3时y=1或X<
7时y=1,选项C错误;
当!
(X<
=3)即当X>
3时,y=1,或者X<
7时y=1,选项D错误;
19.有下列程序
#include<
stdio.h>
main()
{
charc,d;
c=getchar();
d=getchar();
switch(c-'
0'
)
{
case1:
switch(d%'
printf("
*"
);
case2:
@"
}
#"
"
若运行时输入:
21<
回车>
,程序的输出结果是()。
A.*@#&
B.&
C.@#&
D.#&
【解析】switch为多分支选择语句,其后面括号内的值应为整型类型(包括字符类型),将switch后括号的值与case中给定的值相比较,如果和其中之一相匹配,则执行该case后的语句,若都不匹配,则执行default语句,若没有default语句,则不执行任何语句,流程转到switch下一个语句,每一个case语句后应加上break,使流程跳出switch语句,若不加break,在执行完相匹配的case语句后会顺序执行完该case语句下的所有case语句。
键盘输入21,2赋值给c,1赋值给d,第一层switch语句为switch
(2),执行case2语句,第二层switch为switch
(1),执行case1语句输出#,继续顺序执行case1语句下面的语句case2,输出&
,执行完毕,跳出switch语句,输出结果为#&
,选项D正确;
20.有下列程序
inti,a,b,c;
a=b=c=0;
for(i=0;
i<
3;
i++)
switch(i%3)
case0:
a++;
break;
b++;
c++;
if(i%3==0)
%d%d%d\n"
a,b,c);
程序执行后的输出结果是()。
A.201
B.111
C.100
D.210
【解析】switch为多分支选择语句,其后面括号内的值应为整型类型(包括字符类型),将switch后括号的值与case中给定的值相比较,如果和其中之一相匹配,则执行该case后的语句,若都不匹配,则执行default语句,若没有default语句,则不执行任何语句,流程转到switch下一个语句,每一个case语句后应加上break,使流程跳出switch语句若不加break,在执行完相匹配的case语句后会顺序执行完该case语句下的所有case语句。
定义变量,a、b、c初值为0,执行循环语句:
i=0,%为取余运算符,如a%b,结果为a/b的余数,0%3值为0,执行case0语句,执行完该语句此时a的值为1;
向下执行if语句,判断i%3==0,结果为真,执行if语句内的break,跳出switch语句,输出a、b、c的值,此时a的值为1,b、c的值仍为0,选项C正确;
21.有下列程序
inti,j,a,b;
a=b=j=0;
while(j<
3)
j++;
if(j==1)continue;
if(i>
1)break;
a=a*10+i;
if(i<
1)b=a;
%d%d\n"
a,b);
A.10101
B.101101
C.100
D.10110
【解析】C语言中当continue和break用在循环语句的循环体时,break用于立即退出本层循环,而continue仅仅结束本次循环,本次循环体内不执行continue语句后的其它语句,但下一次循环还会继续执行,如果有多层循环时,break只会跳出本层循环,不会跳出其他层的循环。
两层循环嵌套,外循环循环一次,内循环需要执行其所有循环。
程序开始a、b、j都为0,j=0<
3,执行while循环,执行j++,j为1,(j==1)为真,执行if语句,continue,结束本次循环,j=1<
3为真,再次执行while循环,j此时值为2,(j==1)为假,不执行if语句,向下执行for循环,i=0,a=0*10+0=0,b=a=0,i++;
i=1,a=0*10+1=1,b=0;
i=2>
1,执行break语句,跳出for循环,此时a=1,b=0,j=2<
3为真,再次执行while语句,j=3,不执行if语句,向下执行for循环,i=0,a=1*10+0=10,b=a=10,i++;
i=1,a=10*10+1=101,b=10;
1,执行break语句,跳出for循环,此时a=101,b=10,j=3<
3为假,退出while循环,输出a、b,a=101,b=10,选项D正确;
22.有下列程序
charc,i;
{
%c,"
(c-'
A'
+5)%26+'
a'
\n"
若程序运行时输入:
APE<
,则输出结果是()。
A.E,T,I,
B.F,U,J,
C.f,u,j,
D.E,t,I,
【解析】根据ASCII码表,A-Z对应的是65-90,a-z对应的是97-122,字符型可以和数字相互比较,依次从键盘输入APE,A-'
+5=5,5%26=5,5+'
,即为a往后第五个字母,即为f,同理先将字符转换成对应的ASCII码进行计算,最后再转换成对应的字符输出,最后输出结果为f,u,j,选项C正确;
23.库函数rand()的功能是产生一个在0~32767之间的随机数。
若要用此函数随机产生一个0~99.99(2位小数)之间的数,以下能实现此要求的表达式是()。
A.(rand()%10000)/100.0
B.(rand()%10000)/100
C.(rand()%9000+1000.0)/100.0
D.(rand()%100)/100.0
【解析】要得到两位小数,应除以小数,使其转换成浮点数,所以应除以100.0,选项B错误;
因为rand()的功能是产生一个0~32767之间的随机数,且要求随机产生一个0~99.99(2位小数)之间的数,因此先得到0~9999之间的数然后在除以100.0,rand()%10000,当随机数在1~9999时,结果都为其本身,当随机数在9999以上时,结果为0~9999,选项A正确;
rand()%9000只能得到0~8999的数,加上1000.0以后只能得到1000.0~9999.0的数,选项C错误;
rand()%100只能得到0~99之间的随机数,选项D错误;
24.若想定义一个求x的n次方的函数,设传给函数的幂次n为整数,则以下四个函数中正确的是()。
A.doublemypow(doublex,intn){intsignednum,i;
doublemul=1.0;
if(n>
=0)signednum=1;
else{signednum=-1;
n=-n;
}for(i=1;
=n;
i++)mul*=x;
if(signednum==-1)mul=1.0/mul;
returnmul;
}
B.doublemypow(doublex,intn){inti;
doublemul=1.0;
n=fabs(n);
for(i=1;
C.doublemypow(doublex,intn){inti;
if(n>
0){for(i=1;
}else{for(i=n;
i>
=0;
i--)mul*=1.0/x;
}returnmul;
D.doublemypow(doublex,intn){inti;
=0){for(i=0;
i--)mul*=1.0/x;
【解析】求一个数的n次方时,先判断是正次方还是负次方,选项A中,先定义一个标识变量signednum,若为正次方则给该变量赋值为1,若为负次方则给该变量赋值为-1,再利用循环将需要求次方的数进行累乘操作,再通过条件语句判断标识变量signednum,当检测到该标识变量为正时,直接输出累乘后的值,当检测到该标识变量为负时,将累乘结果取倒后输出,本题答案为A选项。
25.下面关于指针基类型的叙述正确的是()。
A.基类型不同的指针,其地址值不能相同
B.指针的基类型决定通过该指针访问的每个内存单元包含多少个字节
C.基类型相同的指针,可以进行加、减、乘、除运算
D.基类型为void的指针,可以存取任何类型的数据
【解析】基类型不同的指针地址值可以相同,选项A错误;
指针的基类型决定通过该指针访问的每个内存单元包含多少个字节,选项B正确;
两个指针变量之间可以比较大小,也可以赋值,相减以后得到的使两指针的位移偏量,不能做加运算、乘运算、除运算,指针表示两个地址,相加、相乘、相除没有任何意义,选项C错误;
void类型指针中的数据不能访问,如果非要访问的话,可以通过显式转换将void类型指针转换为与所指向的数据类型相符的类型,选项D错误;
26.有下列程序
intfun(chara,char*s)
inttemp;
temp=a;
a=*s;
*s=temp;
returna;
voidmain()
chara='
3'
b='
6'
c;
c=fun(a,&
b);
%c,%c,%c\n"
程序执行后的输出