全国计算机等级考试二级C语言程序设计真题.docx

上传人:b****4 文档编号:11790234 上传时间:2023-04-01 格式:DOCX 页数:79 大小:50.81KB
下载 相关 举报
全国计算机等级考试二级C语言程序设计真题.docx_第1页
第1页 / 共79页
全国计算机等级考试二级C语言程序设计真题.docx_第2页
第2页 / 共79页
全国计算机等级考试二级C语言程序设计真题.docx_第3页
第3页 / 共79页
全国计算机等级考试二级C语言程序设计真题.docx_第4页
第4页 / 共79页
全国计算机等级考试二级C语言程序设计真题.docx_第5页
第5页 / 共79页
点击查看更多>>
下载资源
资源描述

全国计算机等级考试二级C语言程序设计真题.docx

《全国计算机等级考试二级C语言程序设计真题.docx》由会员分享,可在线阅读,更多相关《全国计算机等级考试二级C语言程序设计真题.docx(79页珍藏版)》请在冰豆网上搜索。

全国计算机等级考试二级C语言程序设计真题.docx

全国计算机等级考试二级C语言程序设计真题

2017年3月全国计算机等级考试二级C语言程序设计真题

(1)

(总分:

100.00,做题时间:

120分钟)

一、选择题(总题数:

40,分数:

40.00)

1.下列叙述中正确的是(分数:

1.00)

 A.程序执行的效率与数据的存储结构密切相关 (正确答案)

 B.程序执行的效率只取决于程序的控制结构

 C.程序执行的效率只取决于所处理的数据量

 D.以上说法均错误

解析:

程序执行的效率与数据的存储结构、数据的逻辑结构、程序的控制结构、所处理的数据量等有关。

2.下列与队列结构有关联的是(分数:

1.00)

 A.函数的递归调用

 B.数组元素的引用

 C.多重循环的执行

 D.先到先服务的作业调度 (正确答案)

解析:

队列的修改是依照“先进先出”的原则进行的,故D正确。

3.对下列二叉树

进行前序遍历的结果为(分数:

1.00)

 A.DYBEAFCZX

 B.YDEBFZXCA

 C.ABDYECFXZ (正确答案)

 D.ABCDEFXYZ

解析:

前序遍历是指在访问根节点、遍历左子树与遍历右子树这三者中,首先访问根节点,然后遍历左子树,最后遍历右子树;并且在遍历左、右子树时,仍然先访问根节点,然后遍历左子树,最后遍历右子树。

因此,前序遍历可描述为:

若二叉树为空,则执行空操作。

否则:

①访问根节点;②前序遍历左子树;③前序遍历右子树。

所以C正确。

4.一个栈的初始状态为空,现将元素1,2,3,A,B,C依次入栈,然后再依次出栈,则元素出栈的顺序是(分数:

1.00)

 A.1,2,3,A,B,C

 B.C,B,A,1,2,3

 C.C,B,A,3,2,1 (正确答案)

 D.1,2,3,C,B,A

解析:

栈的修改是按照“后进先出”的原则进行的,所以顺序应与入栈顺序相反,故选C。

5.下面属于白盒测试方法的是(分数:

1.00)

 A.等价类划分法

 B.逻辑覆盖 (正确答案)

 C.边界值分析法

 D.错误推测法

解析:

白盒测试法主要有逻辑覆盖、基本路径测试等。

逻辑覆盖测试包括语句覆盖、路径覆盖、判定覆盖、条件覆盖、判断一条件覆盖,故选择B。

其余为黑盒测试法。

6.下面对对象概念描述正确的是(分数:

1.00)

 A.对象间的通信靠消息传递 (正确答案)

 B.对象是名字和方法的封装体

 C.任何对象必须有继承性

 D.对象的多态性是指一个对象有多个操作

解析:

对象之间进行通信的结构叫做消息,故A正确。

封装性是指从外面看只能看到对象的外部特征,而不知道也无须知道数据的具体结构以及实现操作,不能简单地说成是名字和方法,故B错误。

对象不一定必须有继承性,故C错误,多态性是指同一个操作可以是不同对象的行为,故D错误。

7.软件设计中模块划分应遵循的准则是(分数:

1.00)

 A.低内聚低耦合

 B.高耦合高内聚

 C.高内聚低耦合 (正确答案)

 D.以上说法均错误

解析:

根据软件设计原理提出如下优化准则:

①划分模块时,尽量傲到高内聚、低耦合,保持模块相对独立性,并以此原则优化初始的软件结构;②一个模块的作用范围应在其控制范围之内,且判定所在的模块应与受其影响的模块在层次上尽量靠近;③软件结构的深度、宽度、扇入、扇出应适当;④模块的大小要适中。

故C正确。

8.下面描述中不属于数据库系统特点的是(分数:

1.00)

 A.数据共享

 B.数据完整性

 C.数据冗余度高 (正确答案)

 D.数据独立性高

解析:

数据库系统的特点为高共享、低冗余、独立性高、具有完整性等。

故C错误。

9.数据库设计过程不包括(分数:

1.00)

 A.概念设计

 B.逻辑设计

 C.物理设计

 D.算法设计 (正确答案)

解析:

数据库设计过程主要包括:

需求分析、概念结构设计、逻辑结构分析、数据库物理设计、数据库实施、数据库运行和维护阶段。

故答案为D。

10.有三个关系R、S和T如下:

则由关系R和S得到关系T的操作是(分数:

1.00)

 A.自然连接 (正确答案)

 B.交

 C.投影

 D.并

解析:

关系R和关系S有公共域,关系T是通过公共域的等值进行连接的结果,符合自然连接,故选A。

11.以下叙述中正确的是(分数:

1.00)

 A.程序必须包含所有三种基本结构才能称为一种算法

 B.我们所写的每条C语句,经过编译最终都将转换成二进制的机器指令 (正确答案)

 C.如果算法非常复杂,则需要使用三种基本结构之外的语句结构才能准确表达

 D.只有简单算法才能在有限的操作步骤之后结束

解析:

C语言程序可以不包含三种基本结构,也可以包含其中的一种或多种,所以A错误。

三种基本结构可以表示任何复杂的算法,所以C错误。

正确的算法,不管是简单算法还是复杂算法,都可以在有限的操作步骤之后结束,这是算法的有穷性,所以D错误。

12.以下叙述中正确的是(分数:

1.00)

 A.在算法设计时,可以把复杂任务分解成一些简单的子任务 (正确答案)

 B.在C语言程序设计中,所有函数必须保存在一个源文件中

 C.只要包含了三种基本结构的算法就是结构化程序

 D.结构化程序必须包含所有的三种基本结构,缺一不可

解析:

C语言的程序中,函数不一定都放在同一个源文件中,可以分别放在不同的源文件中,通过#include命令来引用,所以B错误。

结构化程序可以包含三种基本结构中的一种或几种,所以C、D错误。

13.以下叙述中正确的是(分数:

1.00)

 A.只能在函数体内定义变量,其他地方不允许定义变量

 B.常量的类型不能从字面形式上区分,需要根据类型名来确定

 C.预定义的标识符是C语言关键字的一种,不能另作它用

 D.整型常量和实型常量都是数值型常量 (正确答案)

解析:

变量可以定义在函数体外,也可以定义在函数体内,所以A错误。

常量的类型可以从字面形式上区分,比如1为整型常量,1.0为实型常量,a为字符型常量,所以B错误。

预定义的标识符不是C语言的关键字,所以C错误。

14.以下叙述中正确的是(分数:

1.00)

 A.在C程序中的八进制和十六进制可以是浮点数

 B.整型变量可以分为int型、short型、long型和unsigned型四种 (正确答案)

 C.八进制数的开头要使用英文字母o,否则不能与十进制区分开

 D.英文大写字母X和英文小写字母x都可以作为二进制数字的开头字符

解析:

在C语言中,浮点数只采用十进制,它有两种表示形式:

十进制数形式和指数形式,所以A错误。

八进制数以数字0开头,所以C错误。

C语言中二进制数用0和1表示,所以D错误。

15.以下叙述中正确的是(分数:

1.00)

 A.在scanf函数中的格式控制字符串是为了输入数据用的,不会输出到屏幕上 (正确答案)

 B.在使用scanf函数输入整数或实数时,输入数据之间只能用空格来分隔

 C.在printf函数中,各个输出项只能是变量

 D.使用printf函数无法输出百分号“%”

解析:

scanf函数中的格式控制字符串是为了输入数据用的,无论其中有什么字符,也不会输出到屏幕上,所以A正确。

scanf函数的格式控制串可以使用其他非空白字符,如逗号,但在输入时必须输入这些字符,以保证匹配就可以,所以B错误。

printf函数可以输出常量,也可以输出变量,所以C错误。

printf函数可以用“\%”来输出百分号“%”,所以D错误。

16.以下叙述中正确的是(分数:

1.00)

 A.在scanf函数的格式串中,必须有与输入项一一对应的格式转换说明符 (正确答案)

 B.只能在printf函数中指定输入数据的宽度,而不能在scanf函数中指定输入数据的宽度

 C.scanf函数中的字符串,是提示程序员的,输入数据时不必管它

 D.复合语句也被称为语句块,它至少要包含两条语句

解析:

在printf和scanf函数中都可以指定数据的宽度,所以B错误。

scanf函数的格式控制串可以使用其他非空白字符,如逗号,但在输入时必须输入这些字符,以保证匹配,所以C错误。

复合语句可以由任意多条语句构成,也可以一条都没有,所以D错误。

17.以下叙述中正确的是(分数:

1.00)

 A.逻辑“或”(即运算符“||”)的运算级别比算术运算符要高

 B.C语言的关系表达式:

0<x<10完全等价于:

(0<x)&&(x<10)

 C.逻辑“非”(即运算符“!

”)的运算级别是最低的

 D.由&&构成的逻辑表达式与由||构成的逻辑表达式都有“短路”现象 (正确答案)

解析:

B选项中,(x>0)&&(x<10)的值是1或0,条件是x>0并且x<10。

但是0<x<10这种写法的结果任何时候都是1。

因为0<x为真时的值为1,为假时值为0,但无论是1还是0都是小于10的。

C选项中,逻辑“非”(即运算符“!

”)的运算级别是最高的。

D选项中所谓的“短路”现象是指一旦能够明确无误地确定整个表达式的值,就不再计算表达式的值,也不再计算表达式余下的部分,即整个逻辑表达式靠后的部分有可能不会被运算。

因此D选项正确。

18.以下叙述中正确的是(分数:

1.00)

 A.if语句只能嵌套一层

 B.if子句和else子句中可以是任意的合法的C语句 (正确答案)

 C.不能在else子句中再嵌套if语句

 D.改变if-else语句的缩进格式,会改变程序的执行流程

解析:

A选项中,if语句的嵌套没有规定层数;C选项中,可以在else子句中再嵌套if语句;D选项中,改变if-else语句的缩进格式,不会改变程序的执行流程,但需要注意if和else的配对问题。

因此B选项正确。

19.以下叙述中正确的是(分数:

1.00)

 A.只要适当地修改代码,就可以将do-while与while相互转换 (正确答案)

 B.对于“for(表达式1;表达式2;表达式3)循环体”首先要计算表达式2的值,以便决定是否开始循环

 C.对于“for(表达式1;表达式2;表达式3)循环体”,只在个别情况下才能转换成while语句

 D.如果根据算法需要使用无限循环(即通常所称的“死循环”),则只能使用while语句

解析:

B选项中,for语句中需要先求解表达式1;C选项中,for语句使用最为灵活,它完全可以取代、while语句;D选项中,对于死循环,也可以使用for语句。

因此A选项正确。

20.以下叙述中正确的是(分数:

1.00)

 A.只能在循环体内和switch语句体内使用break语句 (正确答案)

 B.当break出现在循环体中的switch语句体内时,其作用是跳出该switch语句体,并终止循环体的执行

 C.continue语句的作用是:

在执行完本次循环体中剩余语句后终止循环

 D.在while语句和do-while语句中无法使用continue语句

解析:

break语句通常用在循环语句和开关语句中。

当break用于开关语句switch中时,可使程序跳出switch而执行switch以后的语句;当break语句用于do-while、for、while循环语句中时,可使程序终止循环而执行循环后面的语句,即满足条件时便跳出循环。

continue语句的作用是跳过循环体中剩余的语句而强行执行下一次循环,因此C错误。

break只跳出该switch语句体,并不能终止循环,至于大循环的终止与否与其无关,因此B错。

while和do-while语句可以使用contince语句跳法本次循环,因此D错误。

21.以下叙述中正确的是(分数:

1.00)

 A.´\0´表示字符0

 B."a"表示一个字符常量

 C.表达式:

´a´>´b´的结果是“假” (正确答案)

 D.´\´t´是非法的

解析:

A选项中,´\0´表示结束;B选项中,字符常量是用单引号括起来的一个字符;D选项中,“\”是双引号符。

因此C选项正确。

22.以下叙述中正确的是(分数:

1.00)

 A.字符变量在定义时不能赋初值

 B.字符常量可以参与任何整数运算 (正确答案)

 C.同一英文字母的大写和小写形式代表的是同一个字符常量

 D.转义字符用@符号开头

解析:

A选项中,字符变量在定义时可以赋初值;C选项中,同一英文字母的大写和小写形式代表的是不同的字符常量;D选项中,转义字符是以反斜线“\”开头的。

因此B选项正确。

23.以下叙述中正确的是(分数:

1.00)

 A.函数名允许用数字开头

 B.函数调用时,不必区分函数名称的大小写

 C.调用函数时,函数名必须与被调用的函数名完全一致 (正确答案)

 D.在函数体中只能出现一次return语句

解析:

A选项中,函数名不允许以数字开头;B选项中,函数调用时,函数名称是需要区分大小写的;D选项中,在函数中允许有多个。

return语句,但每次调用只能有一个return语句被执行。

因此C选项正确。

24.以下叙述中正确的是(分数:

1.00)

 A.如果p是指针变量,则&p是不合法的表达式

 B.如果p是指针变量,则*p表示变量p的地址值

 C.在对指针进行加、减算术运算时,数字1表示1个存储单元的长度 (正确答案)

 D.如果p是指针变量,则*p+1和*(p+1)的效果是一样的

解析:

A选项中,如果p是指针变量,则&p表示变量p的地址;B选项中,如果p是指针变量,则*p表示变量p所指向的地址的值;D选项中,如果p是指针变量,*p+1表示将p所指的值加上1,而*(p+1)表示的是先将指针右移一位再取所指向变量的值。

因此C选项正确。

25.以下叙述中正确的是(分数:

1.00)

 A.基类型不同的指针变量可以相互混用

 B.函数的类型不能是指针类型

 C.函数的形参类型不能是指针类型

 D.设有指针变量为double*p,则p+1将指针p移动8个字节 (正确答案)

解析:

A选项中,虽然不同基类型的指针变量占用字节数是相同的,但是不能混用。

B选项中,所谓函数类型是指函数返回值的类型。

在C语言中允许一个函数的返回值是一个指针(即地址),这种返回指针值的函数称为指针型函数。

C选项中,函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型。

因此D选项正确。

26.如果定义

floata[10],x;

则以下叙述中正确的是(分数:

1.00)

 A.语句a=&x;是非法的 (正确答案)

 B.表达式a+1是非法的

 C.三个表达式a[1]、*(a+1)、*&a[1]表示的意思完全不同

 D.表达式*&a[1]是非法的,应该写成*(&(a[1]))

解析:

B选项中,表达式a+1不是非法的;C选项中,*(a+1)即指a[1];D选项中,*&a[1]不是非法的。

因此A选项正确。

27.有以下程序:

#include<stdio.h>

main()

{

inta[]={2,4,6,8},*p=a,i;

for(i=0;i<4;i++)

a[i]=*p++;

printf("%d\n",a[2]);

}

程序的输出结果是(分数:

1.00)

 A.2

 B.8

 C.4

 D.6 (正确答案)

解析:

本题通过语句“*p=a”将一维数组a的首地址的值赋值给变量p,即p的值为2。

执行for循环,a[i]=*p++,指将p的值赋给a[i]后,再进行自增操作,因此4次循环后a[2]的值为6。

因此D选项正确。

28.以下叙述中正确的是(分数:

1.00)

 A.语句“inta[4][3]={{1,2},{4,5}}};”是错误的初始化形式

 B.语句“inta[4][3]={1,2,4,5};”是错误的初始化形式

 C.语句“inta[][3]={1,2,4,5};”是错误的初始化形式

 D.在逻辑上,可以把二维数组看成是一个具有行和列的表格或矩阵 (正确答案)

解析:

二维数组在初始化时,可以省略第1维,但是不可以省略第2维。

可以为部分数组元素初始化。

A选项、B选项和C选项内的初始化都没有错误。

因此D选项正确。

29.以下叙述中正确的是(分数:

1.00)

 A.字符串常量“Hello”会被隐含处理成一个无名字符型数组,它有5个元素

 B.不能用字符串常量对字符数组名进行整体赋值操作 (正确答案)

 C.charstr[7]="string!

";在语法上是合法的,运行也是安全的

 D.char*str;str="Hello";与charstr[];str="Hello";效果是一样的

解析:

字符串中的字符依次存储在内存中一块连续的区域内,并且把空字符´\0´自动附加到字符串的尾部作为字符串的结束标志。

故字符个数为n的字符串在内存中应占(n+1)个字节。

选项A中有6个元素,其中包含结尾字符。

C选项中字符串常量包含8个字符,所以不能赋值在str[7]中。

D选项中,后者赋值错误。

30.以下叙述中正确的是(分数:

1.00)

 A.在语句“charstr[]="string!

";"中,数组str的大小等于字符串的长度

 B.语句“charstr[10]="string!

";"和"charstr[10]={"string!

"};”并不等价

 C.对于一维字符数组,不能使用字符串常量来赋初值

 D.对于字符串常量“string!

”,系统已自动在最后加入了´\0´字符,表示串结尾 (正确答案)

解析:

字符串中的字符依次存储在内存中一块连续的区域内,并且把空字符´\0´自动附加到字符串的尾部作为字符串的结束标志。

故字符个数为n的字符串在内存中应占(n+1)个字节。

A选项中数组长度比字符串长度小一个字节,因为字符串中包含隐含的结尾符。

B选项中两者等价。

C选项中,可以使用字符串常量来给一维字符数组赋值,就像B选项中一样。

31.设有定义

charstr[]="Hello";

则语句

printf("%d%d",sizeof(str),strlen(str));

的输出结果是(分数:

1.00)

 A.55

 B.66

 C.65 (正确答案)

 D.56

解析:

本题考查sizeof和strlen函数对字符串处理的不同之处。

sizeof求出字符串的字符个数,包括结尾符。

strlen求出字符串的实际字符,不包括结尾符。

所以答案为C选项。

32.在32位编译器上,设有定义

char*str1="Hello",str2[]="Hello";,

则以下语句

printf("%d%d",sizeof(str1),sizeof(str2));

的输出结果是(分数:

1.00)

 A.56

 B.55

 C.66

 D.46 (正确答案)

解析:

本题主要考查指向字符串的指针和字符数组。

str1为一个字符指针,所以sizeof为4;str2为字符数组,其中包含6个字符,所以答案为D选项。

33.以下叙述中正确的是(分数:

1.00)

 A.任何情况下都不能用函数名作为实参

 B.函数既可以直接调用自己,也可以间接调用自己 (正确答案)

 C.函数的递归调用不需要额外开销,所以效率很高

 D.简单递归不需要明确的结束递归的条件

解析:

在某些情况下,函数名可以作为实参传递,所以A选项错误。

函数递归调用使用栈区来递归,需要额外开销,并且效率不高,所以C选项错误。

递归调用需要明确指出递归结束条件,否则就陷入死循环了,所以D选项错误。

34.以下叙述中正确的是(分数:

1.00)

 A.函数的形式参数不属于局部变量

 B.对于变量而言,“定义”和“说明”这两个词实际上是同一个意思

 C.在复合语句中不能定义变量

 D.全局变量的存储类别可以是静态类 (正确答案)

解析:

函数的形参属于局部变量,所以A选项错误。

声明变量不分配空间,定义变量要分配空间,所以B选项错误。

复合语句中可以定义变量,所以C选项错误。

35.以下叙述中正确的是(分数:

1.00)

 A.在一个程序中,允许使用任意数量的#include命令行 (正确答案)

 B.在包含文件中,不得再包含其他文件

 C.#include命令行不能出现在程序文件的中间

 D.虽然包含文件被修改了,包含该文件的源程序也可以不重新进行编译和连接

解析:

本题考查预处理中文件包含的概念。

包含文件中可以包含其他文件,故B选项错误;#include可以出现在程序文件的中间,故C选项错误;包含文件被修改了,包含该文件的源程序必须重新进行编译和连接,故D选项错误。

36.以下叙述中正确的是(分数:

1.00)

 A.函数的返回值不能是结构体类型

 B.在调用函数时,可以将结构体变量作为实参传给函数 (正确答案)

 C.函数的返回值不能是结构体指针类型

 D.结构体数组不能作为参数传给函数

解析:

本题考查结构体变量作为函数参数。

函数返回可以是结构体类型,也可以是结构体类型的指针。

结构体数组可以作为参数传给函数。

37.以下叙述中正确的是(分数:

1.00)

 A.结构体数组名不能作为实参传给函数

 B.结构体变量的地址不能作为实参传给函数

 C.结构体中可以含有指向本结构体的指针成员 (正确答案)

 D.即使是同类型的结构体变量,也不能进行整体赋值

解析:

本题考查结构体变量作为函数参数。

结构体变量的地址可以作为参数传给函数,故A错误;结构体数组名就是一个地址,可以传给函数,故B错误;如果是同类型的结构体变量,可以整体赋值,故D错误。

38.设有如下的说明和定义:

struct{

inta;

char*s;

}x,*p=&x;

x.a=4;

x.s="hello";

则以下叙述中正确的是(分数:

1.00)

 A.(p++)->a与p++->a都是合

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1