1、国家二级 C语言机试(选择题)模拟试卷 48及答案与解析 一、选择题 1 下列链表中,其逻辑结构属于非线性结构的是 ( A)二叉链表 ( B)循环链表 ( C)双向链表 ( D)带链的栈 2 设循环队列的存储空间为 Q(1:35),初始状态为 front=rear=35。现经过一系列入队与退队运算后, front=15, rear=15,则循环队列中的元素个数为 ( A) 15 ( B) 16 ( C) 20 ( D) 0或 35 3 下列关于栈的叙述中,正确的是 ( A)栈底元素一定是最后入栈的元素 ( B)栈顶 元素一定是最先入栈的元素 ( C)栈操作遵循先进后出的原则 ( D)以上说法均
2、错误 4 在关系数据库中,用来表示实体间联系的是 ( A)属性 ( B)二维表 ( C)网状结构 ( D)树状结构 5 公司中有多个部门和多名职员,每个职员只能属于一个部门,一个部门可以有多名职员。则实体部门和职员间的联系是 ( A) 1: 1联系 ( B) m: 1联系 ( C) 1: m联系 ( D) m: n联系 6 有两个关系 R和 S如下: 则由关系 R得到关系 S的操作是 ( A)选择 ( B)投影 ( C)自然连接 ( D)并 7 数据字典( DD)所定义的对象都包含于 ( A)数据流图( DFD图 ) ( B)程序流程图 ( C)软件结构图 ( D)方框图 8 软件需求规格说明
3、书的作用不包括 ( A)软件验收的依据 ( B)用户与开发人员对软件要做什么的共同理解 ( C)软件设计的依据 ( D)软件可行性研究的依据 9 下面属于黑盒测试方法的是 ( A)语句覆盖 ( B)逻辑覆盖 ( C)边界值分析 ( D)路径覆盖 10 下面不属于软件设计阶段任务的是 ( A)软件总体设计 ( B)算法设计 ( C)制定软件确认测试计 划 ( D)数据库设计 11 以下叙述中正确的是 ( A) N S流程图只能描述简单的顺序结构的程序 ( B)程序的算法只能使用流程图来描述 ( C)结构化程序的三种基本结构是循环结构、选择结构、顺序结构 ( D)计算机可以直接处理 C语言程序,不
4、必进行任何转换 12 以下叙述中正确的是 ( A)书写源程序时,必须注意缩进格式,否则程序会有编译错误 ( B)程序的主函数名除 main外,也可以使用 Main或 _main ( C)程序可以包含多个主函数,但总是从第一个主函数处开始执行 ( D)在 C程序中,模块 化主要是通过函数来实现的 13 C语言中 double类型数据占字节数为 ( A) 4 ( B) 8 ( C) 12 ( D) 16 14 以下叙述中正确的是 ( A)语言中的关键字不能作变量名,但可以作为函数名 ( B)标识符的长度不能任意长,最多只能包含 16个字符 ( C)标识符总是由字母、数字和下划线组成,且第一个字符不
5、得为数字 ( D)用户自定义的标识符必须 “见名知义 “,如果随意定义,则会出编译错误 15 以下叙述中正确的是 ( A)由 printf输出的数据都隐含左对齐 ( B) scanf和 printf是 C语言提供的输入和输出语句 ( C)赋值语句是一种执行语句,必须放在函数的可执行部分 ( D)由 printf输出的数据的实际精度是由格式控制中的域宽和小数的域宽来完全决定的 16 以下叙述中正确的是 ( A)复合语句在语法上包含多条语句,其中不能定义局部变量 ( B)花括号对 只能用来表示函数的开头和结尾,不能用于其他目的 ( C)空语句就是指程序中的空行 ( D)当用 scanf从键盘输入数
6、据时,每行数据在没按下回车键( Enter键 ) 前,可以任意修改 17 以下叙述中正确的是 ( A)在 C语言中,逻辑真值和假值分别对应 1和 0 ( B)关系运算符两边的运算对象可以是语言中任意合法的表达式 ( C)对于浮点变量 x和 y,表达式: x=y 是非法的,会出编译错误 ( D)分支结构是根据算术表达式的结果来判断流程走向的 18 以下叙述中正确的是 ( A)对于逻辑表达式: a+ | b+,设 a的值为 1,则求解表达式的值后, b的值会发生改变 ( B)对于逻辑表达式: a+ int * p2; int *p3;都是合法的定义指针变量的语句 ( B)指针变量只能通过求地址运算
7、符( 与 p=0;是等价的语句 ( D)语句 p=NULL;执行后,指针 p指向地址为 0的存储单元 25 以下叙述中正确的是 ( A)即使不进行强制类型转换,在进行指针赋值运算时,指针变量的基类型也可以不同 ( B)如果企图通过一 个空指针来访问一个存储单元,将会得到一个出错信息 ( C)设变量 p是一个指针变量,则语句 p=0;是非法的,应该使用 p=NULL; ( D)指针变量之间不能用关系运算符进行比较 26 以下叙述中正确的是 ( A)一条语句只能定义一个数组 ( B)每个数组包含一组具有同一类型的变量,这些变量在内存中占有连续的存储单元 ( C)数组说明符的一对方括号中只能使用整型
8、常量,而不能使用表达式 ( D)在引用数组元素时,下标表达式可以使用浮点数 27 以下叙述中正确的是 ( A)数组下标的下限是 1 ( B)数组下 标的下限由数组中第一个非零元素的位置决定 ( C)数组下标的下限由数组中第一个被赋值元素的位置决定 ( D) char c1, c2, *c3, c440;是合法的变量定义语句 28 以下叙述中正确的是 ( A)语句 int a8 = 0; 是合法的 ( B)语句 int a = 0;是不合法的,遗漏了数组的大小 ( C)语句 char a2 = “A“, “B“; 是合法的,定义了一个包含两个字符的数组 ( D)语句 char a3; a = “
9、AB“; 是合法的,因为数组 有三个字符空间的容量,可以保存两个字符 29 下面选项中的程序段,没有编译错误的是 ( A) char* sp, s10; sp = “Hello“; ( B) char* sp, s10; s = “Hello“; ( C) char str110 = “computer“, str210; str2 = str1; ( D) char mark; mark = “PROGRAM“; 30 以下叙述中正确的是 ( A)字符串常量 “str1“的类型是 :字符串数据类型 ( B)有定义语句: char str1 = “str1“; ,数组 str1将包含 4个元素
10、 ( C)下面的语句用赋初值方式来定义字符串,其中 ,0是必须的 char str1 = s, t, r, 1, 0; ( D)字符数组的每个元素可存放一个字符,并且最后一个元素必须是 0字符 31 以下叙述中正确的是 ( A)字符串数组,是指数组中的每个元素都是一个存放字符串的一维数组 ( B) char ca35 = “A“, “BB“, “CCC“; 是不合语法的 ( C) char ca 5 = “A“, “BB“, “CCC“; 是不合语法的 ( D) char *ca3 = “A“, “BB“, “CCC“; 是不合语法的 32 以下叙述中正确的是 ( A)两个字符串可以用关系运算
11、符进行大小比较 ( B)函数调用 strlen(s);会返回字符串 s实际占用内存的大小(以字节为单位 ) ( C) C语言本身没有提供对字符串进行整体操作的运算符 ( D)当拼接两个字符串时,结果字符串占用的内存空间是两个原串占用空间的和 33 以下叙述中正确的是 ( A)如果 函数带有参数,就不能调用自己 ( B)所有函数均不能接受函数名作为实参传入 ( C)函数体中的语句不能出现对自己的调用 ( D)函数名代表该函数的入口地址 34 以下叙述中正确的是 ( A)局部变量不能被说明为 static ( B)只有全局变量才有自己的作用域,函数中的局部变量没有作用域 ( C)只有在函数内部定义
12、的变量才是局部变量 ( D)只要是用户定义的标识符,都有一个有效的作用域 35 下面选项中关于编译预处理的叙述正确的是 ( A)预处理命令行必须使用分号结尾 ( B)凡是以 #号开头的行,都 被称为编译预处理命令行 ( C)预处理命令行不能出现在程序的最后一行 ( D)预处理命令行的作用域是到最近的函数结束处 36 以下叙述中正确的是 ( A)使用 typedef说明新类型名时,其格式是: typedef 新类型名 原类型名 ; ( B)在程序中,允许用 typedef来说明一种新的类型名 ( C)使用 typedef 说明新类型名时,后面不能加分号 ( D)在使用 typedef改变原类型的
13、名称后,只能使用新的类型名 37 以下叙述中正确的是 ( A)结构体类型中各个成分的类型必须是一致的 ( B)结构体类型中的成分只能是 C语言中预先定义的基本数据类型 ( C)在定义结构体类型时,编译程序就为它分配了内存空间 ( D)一个结构体类型可以由多个称为成员(或域 ) 的成分组成 38 以下叙述中正确的是 ( A)使用 typedef定义新类型名后,新类型名与原类型名实际上是等价的 ( B)结构体类型中的各个成分均不能是数组或指针 ( C)结构体类型的变量,不能在声明结构体类型组成时一起定义 ( D)元素为结构体类型的数组,只能在声明过结构体类型之后,单独进行定义 39 下面选项中关于
14、位运算的叙述正确 的是 ( A)位运算的对象只能是整型或字符型数据 ( B)位运算符都需要两个操作数 ( C)左移运算的结果总是原操作数据 2倍 ( D)右移运算时,高位总是补 0 40 下面选项中关于 “文件指针 “概念的叙述正确的是 ( A)文件指针是程序中用 FILE定义的指针变量 ( B)文件指针就是文件位置指针,表示当前读写数据的位置 ( C)文件指针指向文件在计算机中的存储位置 ( D)把文件指针传给 fscanf函数,就可以向文本文件中写入任意的字符 国家二级 C语言机试(选择题)模拟试卷 48答案与解析 一、选择题 1 【正确答案】 A 【试题解析】 在定义的链表中,若只含有一
15、个指针域来存放下一个元素地址,称这样的链表为单链表或线性链表。带链的栈可以用来收集计算机存储空间中所有空闲的存储结点,是线性表。在单链表中的结点中增加一个指针域指向它的直接前件,这样的链表,就称为双向链表(一个结点中含有两个指针),也是线性链表。循环链表具有单链表的特征,但又不需要增加额外的存贮空间,仅对表的链接方式稍做改变,使得对表的处理更加方便灵活,属于线性链表。二叉链表是二叉树的物理实现,是一种存储结构,不属于线性结 构。答案为 A选项。 2 【正确答案】 D 【试题解析】 在循环队列中,用队尾指针 rear指向队列中的队尾元素,用排头指针 front指向排头元素的前一个位置。在循环队列
16、中进行出队、入队操作时,头尾指针仍要加,朝前移动。只不过当头尾指针指向向量上界时,其加操作的结果是指向向量的下界。由于入队时尾指针向前追赶头指针,出队时头指针向前追赶尾指针,故队空和队满时,头尾指针均相等。答案为 D选项。 3 【正确答案】 C 【试题解析】 栈顶元素总是后被插入的元素,从而也是最先被删除的元素;栈底元素 总是最先被插入的元素,从而也是最后才能被删除的元素。栈的修改是按后进先出的原则进行的。因此,栈称为先进后出表,或 “后进先出 “表,所以选择C。 4 【正确答案】 B 【试题解析】 关系模型实体间的联系采用二维表来表示,简称表。选项 C为网状模型实体间的联系,选项 D为层次模
17、型实体间的联系,选项 A属性刻画了实体。 5 【正确答案】 C 【试题解析】 两个实体集间的联系实际上是实体集间的函数关系,主要有一对一联系( 1:1)、一对多联系( 1:m)、多对一联系( m:1)、多对多联系( m:n)。对于每一 个实体部门,都有多名职员,则其对应的联系为一对多联系( 1:m),答案选 C。 6 【正确答案】 A 【试题解析】 由关系 R到关系 S为一元运算,排除 C和 D。关系 S是关系 R的一部分,是通过选择之后的结果,因此选 A。 7 【正确答案】 A 【试题解析】 在数据流图中,对所有元素都进行了命名,所有名字的定义集中起来就构成了数据字典。因此选 A,而 B,
18、C, D都不符合。 8 【正确答案】 D 【试题解析】 软件需求规格说明书是需求分析阶段的最后成果,是软件开发的重要文档之一。 软件需求 规格说明书有以下几个方面的作用。 便于用户、开发人员进行理解和交流, B正确; 反映出用户问题的结构,可以作为软件开发工作的基础和依据, C正确; 作为确认测试和验收的依据, A正确。 9 【正确答案】 C 【试题解析】 黑盒测试不关心程序内部的逻辑,只是根据程序的功能说明来设计测试用例。在使用黑盒测试法时,手头只需要有程序功能说明就可以了。黑盒测试法分等价类划分法、边界值分析法和错误推测法,答案为 C。而 A、 B、 D均为白盒测试方法。 10 【正确答案
19、】 C 【试题 解析】 从技术观点上看,软件设计包括软件结构设计、数据设计、接口设计、过程设计。所以 A、 B、 D正确, C为软件测试阶段的任务。 11 【正确答案】 C 【试题解析】 N-S流程图是可以描述循环结构、选择结构、顺序结构等多种结构的程序 ,所以 A选项错误。程序的算法可以用流程图、伪代码、 N-S结构图等方法表示 ,所以 B选项错误。计算机只能处理二进制表示的目标程序 ,不能直接执行由 C语言编写的源程序 ,所以 D选项错误。 12 【正确答案】 D 【试题解析】 C语言的源程序中对缩进没有要求 ,所以 A选项错误 。 C语言中区分大小写 ,main函数不能写成 Main或
20、_main,所以 B选项错误。一个 C程序有且只有一个主函数 ,所以 C选项错误。 13 【正确答案】 B 【试题解析】 double型数据在内存中占 8个字节 ,float型数据占 4个字节 ,int型数据占 2个字节 ,char型数据占 1个字节。所以选择 B。 14 【正确答案】 C 【试题解析】 C语言中的关键字即不能做变量名也不能做用户函数名 ,所以 A错误。标识符的命名规则 ,即由下划线字母数字组成 ,且必须以下划线和字母开始 ,也不能和关键字一致。不同 C语 言规定标识符的有效长度可能会不同 ,但没有限制最大长度 ,所以 B错误。用户定义的标识符只要满足标识符命名规则没有特殊要求
21、 ,不必一定 “见名知义 “,所以 D错误。 15 【正确答案】 C 【试题解析】 scanf和 printf是 C语言提供的输入输出函数 ,所以 B错误。由printf输出的数据都隐含右对齐 ,所以 A错误。 Printf输出数据所占的宽度由系统决定 ,所以 D错误。 16 【正确答案】 D 【试题解析】 复合语句可以包含多条语句 ,在其中可以定义局部变量 ,所以 A错误。花括号对 不仅用来表示函数的 开头和结尾 ,也可以用于表示复合语句 ,所以 B错误。 C语言中的语句必须以分号 “;“结束 ,所以空语句表示为 “;“,不是空行 ,所以 C错误。 17 【正确答案】 B 【试题解析】 A选
22、项中,在 C语言中,逻辑真值对应非 0; C选项中,表达式:x=y 是合法的; D选项中,分支结构的流程走向是根据表达式的值,并不仅仅是算数表达式的值。因此 B选项正确。 18 【正确答案】 C 【试题解析】 B选项和 A选项中,对于逻辑表达式,其中 b的值不会因为表达式的结果发生改变; D选项中,关系运算符的结果有 “真 “和 “假 “两种。因此 C选项正确。 19 【正确答案】 C 【试题解析】 break语句通常用在循环语句和开关语句中。当 break用于开关语句 switch中时 ,可使程序跳出 switch而执行 switch以后的语句;当 break语句用于do-while、 fo
23、r、 while循环语句中时 ,可使程序终止循环而执行循环后面的语句,即满足条件时便跳出循环。 continue语句的作用是跳过循环体中剩余的语句而强行执行下一次循环。 A、 B和 D三个选项中均有错误。因此 C选项正确。 20 【正确答案】 B 【试题解析】 A选项中,循环发生嵌套时,没有规定层数; C选项中,循环嵌套时,书写代码时没有要求必须缩进; D选项中, for语句的圆括号中的表达式都可以省略掉。因此 B选项正确。 21 【正确答案】 B 【试题解析】 字符常量是用单引号括起来的一个字符。 A选项中,使用双引号,所以是错误的; C选项中, abc是字符串,字符常量只能是单个字符,不能
24、是字符串; D选项中,以反斜线 “开头的是转义字符。因此 B选项正确。 22 【正确答案】 C 【试题解析】 B选项中,字符常量在内存中占 1个字节; A选项中,转 义字符是以反斜线 “开头,后跟一个或几个字符; D选项中,字符常量可以进行关系运算,不能参与数值运算。因此 C选项正确。 23 【正确答案】 B 【试题解析】 A选项中, “用户自己定义的函数只能调用库函数 “描述是不正确的,也可以调用自定义函数; C选项中,对于不同函数的形式参数可以使用相同名称的标识符; D选项中,关于函数的定义不可以嵌套 ,但函数的调用可以嵌套。因此 B选项正确。 24 【正确答案】 A 【试题解析】 B选项
25、描述不正确,指针变量可以通过求地址运算符( 执行后,指针 p并不是指向地址为 0的存储单元,而是具有一个确定的值 -“空 “。因此 A选项正确。 25 【正确答案】 B 【试题解析】 A选项描述不正确,指针变量的赋值只能赋予地址, 决不能赋予任何其它数据,否则将引起错误; C选项中, p=NULL;和 p=0;是等价的; D选项中,指向同一数组的两指针变量进行关系运算可表示它们所值数组元素之间的关系。因此 B选项正确。 26 【正确答案】 B 【试题解析】 A选项中,一条语句只能定义一个数组是不准确的,可以通过一条语句定义多个数组; C选项中,数组说明符的一对方括号中可以是整型常量,可以是整型
26、常量表达式; D选项中,在引用数组元素时,下标表达式必须是整型的。因此 B选项正确。 27 【正确答案】 D 【试题解析】 数组下标的下限是 0。因此 D选项正确。 28 【正确答案】 A 【试题解析】 B选项中,如给全部元素赋值,则在数组说明中, 可以不给出数组元素的个数; C选项中, char a2 = “A“, “B“;不合法,应为 char a2 = A, B;; D选项中,用字符串方式赋值比用字符逐个赋值要多占 1个字节,在该选项中应为 3个字节。因此 A选项正确。 29 【正确答案】 A 【试题解析】 本题考查字符数组的初始化以及指向字符串的指针, B选项不能直接将字符串赋值给数组
27、名, C选项不能将两个字符数组直接互相赋值, D选项中不能这样定义 char mark,必须指定长度或者直接初始化。 30 【正确答案】 C 【试题解析】 本题考查字符数组的相关操作, B选项中数组 str1包含了 5个元素,其中有结尾符, A选项中 str1的类型不是字符串类型,字符数组的最后一个元素可以不是 0字符。 31 【正确答案】 A 【试题解析】 本题考查字符串数组的相关知识,选项 B、 C、 D都是合语法的。 32 【正确答案】 C 【试题解析】 本题考查字符串处理函数 strlen、 strcat、 strcmp。 B选项中 strlen返回的是字符串 s实际占用内存大小加上结
28、尾符, A选项中不能用关系运算符进行大小比较,可以使用 strcmp。 D选项当使用连接函数 strcat时,内存空间会减少一个字符位置 。 33 【正确答案】 D 【试题解析】 本题考查函数调用相关知识, B选项中函数可以接受函数名作为实参传入,引用函数名也是指针, C、 A选项是错误的,因为递归函数就能调用自己。 34 【正确答案】 D 【试题解析】 本题考查局部变量和全局变量作用域, B选项中局部变量也有作用域, C选项中,函数内部定义的也可能是全局变量, A选项错误,因为可以定义个静态局部变量。 35 【正确答案】 B 【试题解析】 本题考查预编译的预编译处理命令行,预处理命令行不能以
29、分号结尾,所以 A选项错误,预处理 命令行可以出现在程序的最后一行,预处理命令行作用域是整个文件。 36 【正确答案】 B 【试题解析】 本题考查 typedef的使用方法, typedef对已存在的类型使用一个新的名字,选项 A总新类型名应该在原类型名之后, C选项中后面要加分号, D选项中可以使用原类型名。 37 【正确答案】 D 【试题解析】 本题考查结构体类型,结构体类型中的成分可以是结构体,所以 B选项错误,定义结构体时编译程序并不会给它分配内存空间,所以 C选项错误,结构体中各个成分的类型可以是不一样的,所以 A选项错误。 38 【正确答案】 A 【试题解析】 本题考查 typed
30、ef的使用方法, typedef对已存在的类型使用一个新的名字,结构体类型中的成分可以是数组和指针,所以 B选项错误,结构体类型的变量可以在声明结构体的时候一起定义, C选项错误, D选项中可以一起定义。 39 【正确答案】 A 【试题解析】 本题考查位运算。按位取反只需要一个操作数,所以 B选项错误,左移一位是原操作数的 2倍,其他情况不是,比如左移两位就是原操作数的 4倍,所以 C选项错误,右移运算时,高位在某些情况下不是补 0。 40 【正确 答案】 A 【试题解析】 在 C语言中用一个指针变量指向一个文件,这个指针称为文件指针。通过文件指针就可对它所指的文件进行各种操作。文件指针不是文件位置指针,所以 BC选项错误, D选项中不可以写入任意的字符。