二级C语言真题7
(总分:100.00,做题时间:90分钟)
一、选择题(总题数:40,分数:40.00)
1.设数据结构B=(D,R),其中
D={a,b,c,d,e,f}
R={(f,A),(d,B),(e,D),(c,e),(a,c)}
该数据结构为______。
(分数:1.00)
 A.线性结构 
 B.循环队列
 C.循环链表
 D.非线性结构
解析:[解析] 数据的逻辑结构有两个要素:一是数据元素的集合,通常记为D;二是D上的关系,它反映了D中各数据元素之间的前后件关系,通常记为R。即一个数据结构可以表示成B=(D,R)。其中B表示数据结构。为了反映D中各数据元素之间的前后件关系,一般用二元组来表示。例如,假设a与b是D中的两个数据,则二元组(a,b)表示a是b的前件,b是a的后件。如果一个非空的数据结构满足下列两个条件:①有且只有一个根结点;②每一个结点最多有一个前件,也最多有一个后件。则称该数据结构为线性结构。如果一个数据结构不是线性结构,则称之为非线性结构。根据上述理论,本题中f为根结点,每个结点有一个前件和一个后件,符合线性结构的定义。故本题答案为A选项。
2.下列叙述中错误的是______。
(分数:1.00)
 A.循环队列空的条件是队头指针与队尾指针相同 
 B.若二叉树没有叶子结点,则为空二叉树
 C.带链栈的栈底指针是随栈的操作而动态变化的
 D.若带链队列中只有一个元素,则队头指针与队尾指针必定相同
解析:[解析] 在循环队列中,当front=rear时,不能确定是队列满还是队列空。在实际使用循环队列时,为了能区分队列满还是队列空,通常还需要增加一个标志s。当s=0时表示队列空,当s=1且front=rear时表示队列满。故本题答案为A选项。
3.某带链栈的初始状态为top=bottom=NULL,经过一系列正常的入栈与退栈操作后,top=bottom=20。该栈中的元素个数为______。
A.1 B.0 c)20 D.不确定

(分数:1.00)
 A. 
 B.
 C.
 D.
解析:[解析] 带链的栈是具有栈属性的链表。线性链表的存储单元是不连续的,为把存储空间中一些离散的空闲存储结点利用起来,把所有空闲的结点组织成一个带链的栈,称为可利用栈。线性链表执行删除操作运算时,被删除的结点可以“回收”到可利用栈,对应于可利用栈的入栈运算,线性链表执行插入运算时,需要一个新的结点,可以在可利用栈中取栈顶结点,对应于可利用栈的退栈运算。可利用栈的入栈运算和退栈运算只需要改动top指针即可。当top=bottom=20时链栈中的元素个数为1。故本题答案为A选项。
4.设一棵度为3的树,其中度为2,1,0的结点数分别为3,1,6。该树中度为3的结点数为______。
(分数:1.00)
 A.1 
 B.2
 C.3
 D.不可能有这样的树
解析:[解析] 根据题目有6个度为0的结点:1个度为1的结点:3个度为2的结点:因此最后度为3的结点有1个:故本题答案为A选项。
5.下面描述错误的是______。
(分数:1.00)
 A.模块的独立性与模块的信息隐蔽和局部化无关 
 B.内聚性和耦合性是模块独立程度的定性度量标准
 C.一个模块的内聚性越高则该模块的独立性越强
 D.一个模块的耦合性越高则该模块的独立性越弱
解析:[解析] 模块独立性的概念是抽象、模块化、信息隐蔽和局部化的直接结果。模块的独立性是指软件模块的编写和修改应使其具有独立功能,且与其他模块的关联尽可能少。故本题答案为A选项。
6.下面属于黑盒测试方法的是______。
(分数:1.00)
 A.错误推测法 
 B.基本路径测试
 C.判定覆盖
 D.条件覆盖
解析:[解析] 黑盒测试方法也称为功能测试或数据驱动测试。黑盒测试是对软件已经实现的功能是否满足需求进行测试和验证。黑盒测试方法主要有等价类划分法、边界值分析法、错误推测法和因果图等。白盒测试方法主要有逻辑覆盖测试(语句覆盖、路径覆盖、判断覆盖、条件覆盖)、基本路径测试等。故本题答案为A选项。
7.下面模型中为概念模型的是______。
(分数:1.00)
 A.实体-联系模型 
 B.层次模型
 C.关系模型
 D.网状模型
解析:[解析] 数据模型按照不同的应用层次分为3种类型:概念数据模型、逻辑数据模型、物理数据模型。概念数据模型有实体联系模型(E-R模型)、面向对象模型及谓词模型;逻辑数据模型有层次模型、网状模型、关系模型和面向对象模型。故本题答案为A选项。
8.学生关系模式中有D(D#,Dn,Dl,DAddr)(其属性分别为系编号、系名称、系主任和系地址)和S(S#,Sn,SG,Date,Maj,D#)(其属性分别为学号、姓名、性别、入学日期、专业和系编号)两个关系,关系S的主键(码)是S#,关系S的外键(码)是______。
(分数:1.00)
 A..D# 
 B.Maj
 C.Dl
 D.Dn
解析:[解析] 在二维表中凡能唯一标识元组的最小属性集称为该表的键或码。表A中的某属性集是某表B的键,则称该属性集为A的外键或外码。故本题答案为A选项。
9.关系的实体完整性要求关系中不能为空的属性是______。
(分数:1.00)
 A.主键属性 
 B.外键属性
 C.全部属性
 D.候选键属性
解析:[解析] 关系模型中可以有3类完整性约束:实体完整性约束、参照完整性约束和用户定义的完整性约束。实体完整性约束是指若属性M是关系的主键,则属性M中的属性值不能为空值。故本题答案为A选项。
10.学生选修课程的关系模式为SC(S#,Sn,Sd,Sa,C#,G)(其属性分别为学号、姓名、所在系、年龄、课程号和成绩);C(C#,Cn,P#)(其属性分别为课程号、课程名、先选课)。关系模式中包含对主属性部分依赖的是______。
(分数:1.00)
 A.S#→Sd 
 B.(S#,C#)→G
 C.C#→Cn
 D.C#→P#
解析:[解析] 若X→Y,但Y不完全函数依赖于X,则称Y对X部分依赖。关系模式Sc中,主键
为(S#,C#),但显然有S#→Sd,S#→Sa,存在非主属性对主属性的部分依赖。故本题答案为A选项。
11.以下叙述中错误的是______。
(分数:1.00)
 A.main()是C语言主函数的起始
 B.main()作为主函数必须位于源程序的起始位置行 
 C.main()是C程序执行的起始行
 D.main是不可替代的主函数名
解析:[解析] C语言规定必须用main作为主函数名,选项D正确;main()是C语言中主函数的起始行,也是C程序执行的起始行,选项A、C正确;main()作为主函数可以在源程序的任意位置,但是程序执行必须从main()函数开始,选项B错误,本题答案为B
12.以下叙述中错误的是______。关于printf函数正确的是
(分数:1.00)
 A.在一个程序中,每个模块均可以独立编译运行 
 B.程序“模块化”有利于任务的分解简化
 C.允许对函数单独进行编译,是C语言实现“模块化”的基础
 D.采用模块化结构,可以提高编程效率
解析:[解析] 在程序设计时,用一个个小模块来实现不同的功能,每个程序设计人员分别完成一个或多个小模块,称这样的程序设计方法为“模块化”。由一个个功能模块构成的程序结构称为模块化结构,使用模块化结构程序设计,有利于任务的分解简化,选项B正确;C语言允许对函数单独进行编译,从而可以实现模块化,选项C正确;采用模块化结构,可以使不同模块的程序员分别编写和调试,大大提高了编程效率,选项D正确;在C语言程序中,每个模块并不一定能够单独编译运行,选项A错误,本题答案A。
13.以下关于注释的叙述中错误的是______。
(分数:1.00)
 A.注释的边界符号“/”和“*”之间不允许加入空格
 B.C语言允许注释出现在程序中任意合适的地方
 C.注释的内容仅用于阅读,对程序的运行不起作用
 D.注释的边界符号“/*”和“*/”必须成对出现且可以嵌套 
解析:[解析] 在编写程序时可以在程序中加入注释,以说明变量的含义,在添加注释时,注释内容必须放在符号“/*”和“*/”之间,“/*”和“*/”必须成对出现,“/”与“*”之间不可以有空格,选项A正确;注释可以用英文,可以用中文,可以出现在程序中任意合适的地方,选项B正确;注释部分只是用于阅读,对程序的运行不起作用,选项C正确;使用“/*”和“*/”的注释之间不可再嵌套“/*”和“*/”,选项D错误,本题答案为D。
14.以下是正确C语言标识符的是______。
(分数:1.00)
 A._8_ 
 B.^8^
 C.~8~
 D.-8-
解析:[解析] 合法C语言的标识符的命名规则是:标识符可以由字母、数字和下划线组成,并且第一个字符必须是字母或下划线,选项A正确;^符号不合法,选项B错误;~符号不合法,选项C错误;-符号不合法,选项D错误;本题答案为A。
15.算术运算符和圆括号有不同的运算优先级,对于表达式:a+b+c*(d+e),关于执行顺序,以下说法正确的是______。
(分数:1.00)
 A.先执行(d+e)得r2,再执行c*r2得r3,再执行a+b得r1,最后执行r1+r3得表达式最后结果
 B.先执行a+b得r1,再执行(d+e)得r2,再执行c*r2得r3,最后执行r1+r3得表达式最后结果 
 C.先执行(d+e)得r2,再执行c*r2得r3,再执行b+r3得14,最后执行a+r4得表达式最后结果
 D.先执行a+b得r1,再执行r1+c得r5,再执行(d+e)得r2,最后执行r5*r2得表达式最后结果
解析:[解析] 题意表达式中,圆括号的优先级最高,乘法运算符次之,加法运算符最低,同优先级中,加法运算符的结合性从左向右结合,所以题意中的表达式执行顺序是:先执行a+b得r1,再执行(d+e)得r2,再执行c*r2得r3,最后执行r1+r3得表达式最后结果,本题答案为B。
16.设有定义语句:
double x=123.456;
则语句
printf("%6.2f,%3.0f/n",x,x);
的输出结果是______。
(分数:1.00)
 A.123.46,123.0
 B.123.45,123
 C.123.46,123 
 D.123.45,123.
解析:[解析] 对于double类型的实数,可以在printf()函数的格式化字符串中使用“n 1 .n 2 ”的形式来指定输出宽度(n 1 和n 2 分别代表一个整常数),其中n 1 指定输出数据的宽度(包括小数点),n 2 指定小数点后小数位的位数,n 2 也称为精度;对于格式字符%f,当输出数据的小数位多余n 2 位时,截取右边多余的小数,并对截取部分的第一位小数做四舍五入处理;当输出数据小数位少于n 2 时,在小数的最右边补0,使得输出数据的小数部分宽度为n 2 ;如果指定“n 1 .0”格式,则不输出小数点和小数部分;题意中,%6.2f表示输出6位宽度,2位小数,所以被截取的小数位:0.006四舍五入,结果为123.46;%3.0f表示输出3位宽度,0位小数,结果为123,本题答案为C