全国计算机等级考试二级C语言程序设计模拟试题4真含答案与解析交互96.docx
《全国计算机等级考试二级C语言程序设计模拟试题4真含答案与解析交互96.docx》由会员分享,可在线阅读,更多相关《全国计算机等级考试二级C语言程序设计模拟试题4真含答案与解析交互96.docx(33页珍藏版)》请在冰豆网上搜索。
全国计算机等级考试二级C语言程序设计模拟试题4真含答案与解析交互96
全国计算机等级考试2019年二级C语言程序设计模拟试题4
(总分100,做题时间120分钟)
选择题
(每题1分,共40分)
1.
设栈的顺序存储空间为S(0:
49),栈底指针bottom=49,栈顶指针top=30(指向栈顶元素)。
则栈中的元素个数为( )。
A
30
B
29
C
20
D
19
分值:
1
答案:
C
栈是一种特殊的线性表,它所有的插入与删除都限定在表的同一端进行。
入栈运算即在栈顶位置插入一个新元素,退栈运算即是取出栈顶元素赋予指定变量。
在内存中,栈的增大方向是递减,元素依次存储在单元30:
49中,个数为:
49-30+1=20个。
2.
设数据元素的集合D={1,2,3,4,5},则满足下列关系R的数据结构中为线性结构的是( )。
A
R={(1,2),(3,4),(5,1)}
B
R={(1,3),(4,1),(3,2),(5,4)}
C
R={(1,2),(2,3),(4,5)}
D
R={(1,3),(2,4),(3,5)}
分值:
1
答案:
B
一个非空的数据结构如果满足以下两个条件:
有且只有一个根节点;每一个节点最多有一个前件,也最多有一个后件,称为线性结构。
不同时满足以上两个条件的数据结构就称为非线性结构。
A项中有两个根节点3和5,错误;B项根节点为5,排列顺序为54132,正确;C项有两个根节点1和4,错误;D项有两个根节点1和2,错误。
3.
下列叙述中错误的是( )。
A
在带链队列中,队头指针和队尾指针都是在动态变化的
B
在带链栈中,栈顶指针和栈底指针都是在动态变化的
C
在带链栈中,栈顶指针是在动态变化的,但栈底指针是不变的
D
在带链队列中,队头指针和队尾指针可以指向同一个位置
分值:
1
答案:
B
带链的队列就是用一个单链表来表示队列,队列中的每一个元素对应链表中的一个节点,在入队和退队过程中,队头指针和队尾指针都是在动态变化的,A项叙述正确,循环队列中当队列满或者空时,队头指针和队尾指针指向同一个位置,D项叙述正确。
栈也可以采用链式存储结构表示,把栈组织成一个单链表,这种数据结构可称为带链的栈,入栈和退栈过程中栈底指针不变,栈顶指针随之变化,B项叙述错误,C项叙述正确。
4.
深度为7的完全二叉树中共有125个结点,则该完全二叉树中的叶子结点数为( )。
A
62
B
63
C
64
D
65
分值:
1
答案:
B
在树结构中,定义一棵树的根节点所在的层次为1,其他节点所在的层次等于它的父节点所在的层次加1,树的最大层次称为树的深度。
完全二叉树指除最后一层外,每一层上的节点数均达到最大值,在最后一层上只缺少右边的若干节点。
深度为6的满二叉树,节点个数为26-1=63,则第7层共有125-63=62个叶子节点,分别挂在第6层的左边62个节点上,加上第6层的最后1个叶子节点,该完全二叉树共有63个叶子节点。
5.
计算机软件的构成是( )。
A
源代码
B
程序和数据
C
程序和文档
D
程序、数据及相关文档
分值:
1
答案:
D
计算机软件是程序、数据及相关文档的完整集合。
答案选择D选项。
6.
软件设计中模块划分应遵循的准则是( )。
A
低耦合低内聚
B
高耦合高内聚
C
低耦合高内聚
D
内聚与耦合无关
分值:
1
答案:
C
模块的独立程度可以由两个定性标准度量:
内聚性和耦合性。
耦合衡量不同模块彼此间互相依赖(连接)的紧密程度。
内聚衡量一个模块内部各个元素彼此结合的紧密程度。
一般来说,要求模块之间的耦合尽可能弱,即模块尽可能独立,且要求模块的内聚程度尽可能高。
内聚性和耦合性是一个问题的两个方面,耦合性程度字的模块,其内聚程度一定高。
7.
使用白盒测试方法时,设计测试用例应根据( )。
A
程序的内部逻辑
B
程序的复杂结构
C
程序的功能
D
使用说明书
分值:
1
答案:
A
白盒测试又称为结构测试或逻辑驱动测试,它允许测试人员利用程序内部的逻辑结构及有关信息来设计或选择测试用例,对程序所有的逻辑路径进行测试。
8.
逻辑模型是面向数据库系统的模型,下面属于逻辑模型的是( )。
A
关系模型
B
谓词模型
C
物理模型
D
实体一联系模型
分值:
1
答案:
A
逻辑数据模型也称数据模型,是面向数据库系统的模型,着重于在数据库系统一级的实现。
成熟并大量使用的数据模型有层次模型、网状模型、关系模型和面向对象模型等。
9.
设有关系表学生表S(学号,姓名,性别,年龄,身份证号),每个学生学号唯一。
除属性学号外,也可以作为键的是( )。
A
姓名
B
身份证号
C
姓名,性别,年龄
D
学号,姓名
分值:
1
答案:
B
候选键是二维表中能唯一标识元组的最小属性集。
一个二维表有多个候选码,则选定其中一个作为主键供用户使用。
学生学号与身份证号均是唯一的,都可以作为主键。
10.
有三个关系表R、S和T如下,其中三个关系对应的关键字分别为A,B和复合关键字(A,B)。
表T的记录项(b,q,4)违反了( )。
A
实体完整性约束
B
参照完整性约束
C
用户定义的完整性约束
D
关系完整性约束
分值:
1
答案:
B
关系模型中可以有3类完整性约束:
实体完整性约束、参照完整性约束和用户定义的完整性约束。
实体完整性约束是指,若属性M是关系的主键,则属性M中的属性值不能为空值。
T中主键不为空,A项错误。
参照完整性约束是指,若属性(或属性组)A是关系M的外键,它与关系M的主码相对应,则对于关系M中的每个元组在A上的值必须为:
要么取空值,要么等于关系M中某个元组的主码值。
表1中属性B为关系S的外键,它与关系S的主键相对应,则T中元组在B上应该为空或者与S中主键值相等,题目中不相等,违反参照完整性约束,B项正确。
此题关系中无语义要求,C项错误。
11.
以下选项中叙述正确的是( )。
A
C程序中的语句要经过编译才能转换成二进制机器指令
B
算法需要包含所有三种基本结构
C
有些算法不能用三种基本结构来表达
D
简单算法的操作步骤不能超过20步
分值:
1
答案:
A
编译就是把高级语言变成计算机可以识别的二进制语言,不经过编译的源程序是不能运行的,A项正确。
算法不一定要包含所有三种基本结构,也可以只包含一种或两种,B项错误。
结构化程序主要由3种基本控制结构组成,循环结构、选择结构、顺序结构,它们组成的算法结构可以解决任何复杂的问题,C项错误。
算法的复杂程序不是由操作步骤多少决定的,而是按时间复杂度与空间复杂度来衡量,D项错误。
12.
以下叙述错误的是( )。
A
在进行模块化程序设计的时候,应首先完成每个模块的编写调试,再集中考虑主程序中的算法
B
同一程序各模块可由一组人员同时进行编写调试,可提高编写程序的效率
C
模块化的程序设计是采用自顶向下、逐步细化的原则
D
程序的每个模块都可通过三种基本结构实现
分值:
1
答案:
A
结构化程序设计把一个复杂问题的求解过程分阶段进行,需要保证自顶向下、逐步细化、模块化设计、结构化编码。
进行模块化设计时,首先设计框架,并定义和调试好各个模块之间的输入输出关系,然后完成各个模块的编写调试后再集中编译,模块化的程序设计采用自顶向下、逐步细化的原则,A项叙述错误,C项叙述正确。
各个模块可以由不同人员同时进行编写调试,提高编写程序的效率,B项叙述正确。
结构化程序主要由3种基本控制结构组成,顺序结构、选择结构、循环结构,这三种基本结构可以解决任何复杂的问题,D项叙述正确。
13.
以下选项中,合法的实数是( )。
A
1.5E2
B
E1.1
C
2.10E
D
1.9E1.4
分值:
1
答案:
A
E表示“10的幂次”,E的右侧必须是整数,排除BCD三项。
14.
以下叙述正确的是( )。
A
C程序总是以main()作为程序执行的起始行
B
main()函数若不带参数,其后面的一对圆括号可省略
C
函数体内的定义语句和可执行语句允许任意穿插出现
D
C语言中的语句之间必须用分号作为分隔符
分值:
1
答案:
A
main()函数后面的括号告诉编译器这是一个函数,不可以省略,排除B项;在复合语句中,不仅可以有执行语句,还可以有定义语句,定义语句应该出现在执行语句的前面,故排除C项;C语言中的某些语句可以不用分号,例如if语句,宏定义,故D项错误;答案为A项。
15.
设有以下程序段:
inty:
y=rand( )%30+1;
则变量y的取值范围是( )。
A
0≤y≤30
B
0C
1D
1 分值:
1
答案:
B
rand( )产生随机整数,任何整数对30求余得到的整数范围为0~29,则y的取值范围为1≤y≤30或者说016.
若变量已正确定义
for(x=0,y=0;(y!
=99&&x<4);x++)
则以上for循环( )。
A
执行4次
B
执行3次
C
执行次数不确定
D
执行123次
分值:
1
答案:
A
该循环分别在x取值为0、1、2、3时各执行一次,所以本题答案为A。
17.
有以下程序:
程序运行后的输出结果是( )。
A
INT:
14
B
INT:
13
C
INT:
12
D
INT:
20
分值:
1
答案:
D
0x13是十六进制数,%d需要输出十进制数,换算成十进制:
16×1+16°×3=16+3=19,输出INT=x+1=20。
18.
有如下程序:
程序运行后的输出结果是( )。
A
Ta=0,b=1
B
Fa=1,b=2
C
Ta=1,b=2
D
Fa=0,b=2
分值:
1
答案:
C
程序执行过程为:
判断++a==b++是否成立,++a前置运算先加1,则a=1,b++后置运算先取值,则b=1,也即是判断1==1,成立,输出T,之后b=2,输出a=1,b=2。
19.
有如下程序:
#include
main( )
程序运行时,从键盘输入:
3<回车>后,程序输出结果为( )。
A
3,4,
B
0,1,
C
3,4,5,
D
0,1,2,3,
分值:
1
答案:
D
break语句作用是结束整个循环过程,不再判断执行循环的条件是否成立,且在嵌套循环中,其只跳出最内层的一层循环。
本题执行过程为:
输入3,则data=3;执行for循环,在i<=3时,if条件不成立,执行语句printf("%d,",i);依次输出i值,0,1,2,3;直到i=4时,if条件成立,执行break退出for循环。
20.
以下程序的功能是判断输入的一个整数是否能被3或7整除,若能整除,输出YES,否则输出NO。
在下划线处应填入的选项是( )。
A
(k%3==0)||(k%7==0))
B
(k/3==0)||(k/7==0)
C
((k%3=0)||(k%7=0))
D
(k%3==0)&&(k%7==0))
分值:
1
答案:
A
求余运算符为%,是否能被3或7整除表达式(k%3==0)||(k%7==0),A项正确。
B项“/”为除号,错误。
C项中“=”为赋值运算符,不是逻辑运算符“==”,错误。
D项“&&”为逻辑与,本题应该为逻辑或“||”,错误。
21.
有以下程序:
程序运行后的输出结果是( )。
A
1
B
123
C
23
D
3
分值:
1
答案:
A
‘\0’是转义字符,表示空字符,故'\0'==0成立,输出1;‘0’是字符常量和0不等,‘a’和‘b’都是字符常量,因为'b'>'a',不执行if后面的语句,所以最后输出只有1。
22.
有以下程序:
#include
main()
{
inti,k;
intarray[4][2]={{1,0},{0},{2,9},{3}};
for(i=0;i<2;i++)
for(k=0;k<3;k++)
{
printf(“%d,”,array[k][i]);
}
printf(“\n”);
}
程序运行后的输出结果是( )。
A
1,0,2,0,0,9,
B
1,2,4,9,6,0,
C
2,9,0,0,1,4,
D
1,2,0,1,4,1,
分值:
1
答案:
A
本题定义一个4行2列数组,其中赋值6个数,其余自动为0,根据for循环,第一次输出第一列前三行数,分别是1,0,2;第二次输出第二列前三行数,分别是0,0,9。
23.
有如下程序:
程序运行后的输出结果是( )。
A
2.0
B
1.7
C
2
D
1
分值:
1
答案:
D
在类型转换过程中,如果较高类型转换成较低类型,直接忽略多余位数。
在程序执行过程为:
调用函数sub(3.8,2.1),3.8-2.1=1.7(double类型),(int)强制转换将1.7转换成int类型1,然后返回1并输出。
24.
以下关于指针的叙述正确是( )。
A
所有类型的指针变量所占内存的大小是一样的
B
指针变量所占内存的大小与其类型有关,char型指针变量只占1个字节,double型指针变量占8个字节
C
指针变量可直接指向任何类型的变量,而不会出现编译或运行错误
D
指针变量既可以直接指向结构体,也可直接指向结构体中某个成员,而不会出现编译或运行错误
分值:
1
答案:
A
专门用来存放变量地址的变量称为“指针变量”,所有地址值所占字节都是一样的,故指针变量所占内存大小一样,A项正确,B项错误。
由于一个变量的地址(指针)还隐含有这个变量的类型信息,所以不能随意把一个地址存放到任何一个指针变量中去,只能把具有相同类型的变量的地址,存放到这个指针变量中,结构体变量与某个成员类型不同,不能用同样的指针指向它们,CD两项错误。
25.
有以下程序段:
int*p1,*p2,a[10];
p1=a;
p2=&a[5];
则p2-p1的值为( )。
A
5
B
10
C
12
D
无法确定
分值:
1
答案:
A
当直接用数组名给指针赋初始化值时,表示把数组首地址的值赋给指针,p1=a,表示把a[0]地址赋给p1,p2=&a[5],表示将数组第5个元素地址赋给p2,p2-p1=5。
26.
有以下程序:
程序的运行结果是( )。
A
0123456345
B
0123453456
C
0123456666
D
0123454569
分值:
1
答案:
B
程序的执行过程为:
定义数组m,并为其赋初值,数组长度为10。
调用函数fun(m,6,3)将数组首地址传人函数,函数实现将数组下标值从6到3的元素依次向下标值大的方向移动三个位置,for循环结束之后数组为m={0,1,2,3,4,5,3,4,5,6}。
依次输出数组元素,结果为0123453456。
27.
有以下程序:
程序运行后的输出结果是( )。
A
ABCDEFGHIJKLMNOP
B
ABCDEFGHHKL
C
ABCD
D
AEIM
分值:
1
答案:
D
28.
设有一个M*N的矩阵已经存放在一个M行N列的数组x中,且有以下程序段:
sum=0;
for(i=0;ifor(j=1;j以上程序段计算的是( )。
A
矩阵两条对角线元素之和
B
矩阵所有不靠边元素之和
C
矩阵所有元素之和
D
矩阵所有靠边元素之和
分值:
1
答案:
D
程序执行过程为:
第一个for循环实现对第一列和第N列求和。
第二个for循环在上一个for循环结果上实现对第一行和第M行从第二个元素到第N-1个元素的求和,总体来说,就是矩阵所有靠边元素之和。
29.
当没有指定C语言中函数形参的存储类别时,函数形参的存储类别是( )。
A
外部(extern)
B
静态(static)
C
寄存器(register)
D
自动(auto)
分值:
1
答案:
D
auto变量又称为自动变量,函数定义变量时,如果没有指定存储类别,系统就认为所定义的变量具有自动类别,D选项正确。
static变量又称为静态变量,编译时为其分配的内存在静态存储区中。
register变量又称为寄存器变量,变量的值保留在CPU的寄存器中,而不是像一般变量那样占内存单元。
当定义一个函数时,若在函数返回值的类型前加上说明符extern时,称此函数为外部函数,外部函数在整个源程序中都有效。
30.
有以下程序:
程序的运行结果是( )。
A
grameamee
B
gae
C
programe
D
无输出字符
分值:
1
答案:
A
定义两个指针变量p1、p2,分别指向数组s1、s2首地址,在for循环中,比较两个指针对应地址的元素是否相等,如果相等,则输出当前指针指向地址的字符串。
31.
有以下程序:
程序的运行结果是( )。
A
flqv
B
agmrw
C
ekpuy
D
flqvz
分值:
1
答案:
A
puts()函数将数组中存放的字符串输出到输出设备中,用“\n”取代字符串结束符“\0”。
strlen()函数是求字符串的实际长度(不包含结束标志),并且作为函数值返回。
程序中for循环实现,将第i个字符串最后一个字符放入w数组下标值为i的位置,即a[i][5]。
最后将数组最后一个字符赋值为“\0”,输出字符串W为flqv。
32.
有以下程序:
程序运行后的输出结果是( )。
A
6,1
B
1,1
C
7,1
D
7,2
分值:
1
答案:
C
表达式c=(13>>1)|1中,>>是右移符号,数字13换算成二进制后右移1位,再和1进行按位或运算,结果为7;表达式d=(13>1)||1中,首先判断13是否大于1,此时条件成立返回1后,再和1进行或运算,结果为1。
33.
有如下程序:
程序运行时,输入1234<回车>,则输出结果是( )。
A
1234
B
4321
C
4444
D
1111
分值:
1
答案:
B
在调用一个函数的过程中又出现直接或间接的调用该函数本身,称为函数的递归调用。
本题程序的执行过程为:
在输入1234<回车>的情况下,调用get_put()函数,getehar()读入1,在这次调用中的局部变量ch='1',if条件成立->调用get_put()函数,读入2,局部变量ch='2'->调用get_put()函数,读入3,局部变量ch='3'->调用get_put()函数,读入4,局部变量ch='4'->调用get_put()函数,读入回车,if条件不成立,返回执行每次调用函数中if语句后的输出语句,即依次输出4321。
34.
以下叙述错误的是( )。
A
未经赋值的全局变量值不确定
B
未经赋值的auto变量值不确定
C
未经赋值的register变量值不确定
D
未经赋值的静态局部变量值为0
分值:
1
答案:
A
C语言中,系统将未经赋初值的全局变量默认为0。
35.
有如下程序:
程序运行后的输出结果是( )。
A
25
B
13
C
9
D
12
分值:
1
答案:
B
带参数的宏定义不是进行简单的字符串替换,而是要进行参数替换。
替换过程是:
用宏调用提供的实参字符串,直接置换宏定义命令行中相应形参字符串,非形参字符保持不变。
调用函数D(i+j),进行替换为4*i+j+1=13,输出13。
36.
有以下程序:
程序的运行结果是( )。
A
1,2
B
3,6
C
4,7
D
变量的地址值
分值:
1
答案:
B
程序的执行过程为:
定义整型数组x1,x2并进行初始化,两个数组长度均为2。
定义结