1、国家二级 C语言机试(选择题)模拟试卷 52 及答案与解析 一、选择题 1 算法的有穷性是指 ( )。 ( A)算法程序的运行时间是有限的 ( B)算法程序所处理的数据量是有限的 ( C)算法程序的长度是有限的 ( D)算法只能被有限的用户使用 2 在软件开发中,需求分析阶段产生的主要文档是 ( )。 ( A)可行性分析报告 ( B)软件需求规格说明书 ( C)概要设计说明书 ( D)集成测试计划 3 软件设计中模块划分应遵循的准则是 ( )。 ( A)低内聚低耦合 ( B)高内聚低耦合 ( C)低内聚高耦合 ( D)高内聚高耦合 4 结构化程序设计的基本原则不包括 ( )。 ( A)多态性
2、( B)自顶向下 ( C)模块化 ( D)逐步求精 5 程序流程图中带有箭头的线段表示的是 ( )。 ( A)图元关系 ( B)数据流 ( C)控制流 ( D)调用关系 6 对长度为 n的线性表排序,在最坏情况下,比较次数不是 n(n 1)/2的排序方法是 ( )。 ( A)快速排序 ( B)冒泡排序 ( C)直接插入排序 ( D)堆排序 7 下列关于栈的叙述正确的是 ( )。 ( A)栈按 “先进先出 “组织数据 ( B)栈按 “先进后出 “组织数据 ( C)只能在栈底插入数据 ( D)不能删除数据 8 在数据库设计中,将 E R图转换成关系数据模型的过程属于 ( )。 ( A)需求分析阶段
3、 ( B)概念设计阶段 ( C)逻辑设计阶段 ( D)物理设计阶段 9 设 p是指针变量,语句 p=NULL;等价于 ( )。 ( A) p = 0; ( B) p = ; ( C) p = “; ( D) p = 0; 10 设有表示学生选课的三张表,学生 S(学号,姓名,性别, 年龄,身份证号 ),课程 C(课号,课名 ),选课 SC(学号,课号,成绩 ),则表 SC的关键字 (键或码 )为( )。 ( A)课号,成绩 ( B)学号,成绩 ( C)学号,课号 ( D)学号,姓名,成绩 11 以下叙述中错误的是 ( )。 ( A) C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的
4、机器指令 ( B) C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件 ( C)用 C语言编写的程序称为源程序,它以 ASCII代码形式存放在一个文本文件中 ( D) C语言源程序经编译后 生成后缀为 .obj的目标程序 12 以下选项中,合法的一组 C语言数值常量是 ( )。 ( A) 12. 0Xa23 4.5e0 ( B) 028 .5e 3 0xf ( C) 177 4e1.5 0abc ( D) 0x8A 10,000 3.e5 13 以下选项中不合法的标识符是 ( )。 ( A) 等价 p =0; 因此 D选项正确。 10 【正确答案】 C 【试题解析】 学号是
5、学生表 S 的主键,课号是课程表 C的主键,所以选课表 SC的关键字就应该是与前两个表能够直接联系且能唯一定义的学号和课号,所以选择 C。 11 【正确答案】 A 【试题解析】 C语言中的非执行语句不会被编译,不会生成二进制的机器指令,所以 A错误。由 C语言构成的指令序列称 C源程序, C源程序经过 C语言编译程序编译之后生成一个后缀 为 .OBJ的二进制文件 (称为目标文件 );最后要由 “连接程序 “把此 .OBJ文件与 C语言提供的各种库函数连接起来生成一个后缀为 .EXE的可执行文件。 12 【正确答案】 A 【试题解析】 C语言中八进制整型常量的开头是数字 0,十六进制整型常量的开
6、头数字是 0x。 C语言中的实型常量有两种表示形式:小数形式,小数形式表示的实型常量必须要有小数点;指数形式,以 “e“或 “E“后跟一个整数来表示以 10为底数的幂数,且规定字母 e或 E 之前必须要有数字,且 e或 E后面的指数必须为整数。 B选项中 028错误,八进制中没有数 字 8。 C选项中 4e1.5中 e后面的指数不是整数。 D)选项中 3.e5小数点后面缺少数字。 13 【正确答案】 A 【试题解析】 C语言中标识符由字母、下划线、数字组成,且开头必须是字母或下划线。另外,关键字不能作为标识符。因为 C语言中区分大小写,所以 B 选项中的 “FOR“可以作为标识符来用。 A选项
7、中含有非法字符 &,所以选择 A。 14 【正确答案】 D 【试题解析】 本题考查 typedef 的使用方法, typedef 对已存在的类型使用一个新的名字,新类型可以使用小写,所以 D选项错误。 15 【正确答案】 B 【试题解析】 取模运算符 “%“,二元运算符,具有左结合性,参与运算的量均为整型。选项 B 中的 a变量是 double实型,所以 B)不符合规定。 16 【正确答案】 D 【试题解析】 C语言中利用 sizeof()函数判断数据类型长度,在 VC6.0平台中,整型 int占有 4个字节, double型数据占有 8个字节。 17 【正确答案】 D 【试题解析】 按照从键
8、盘输入的数据可以判断字符 1给了变量 a,字符 2给了变量 b,字符 即回车给了变量 c,字符 3给了变量 d。所以打印输出 的结果为 D)选项。 18 【正确答案】 A 【试题解析】 C语言的逻辑运算符比较特别,它的操作数没有明确的数据类型,可以是任意合法的表达式,所以选择 A。 19 【正确答案】 C 【试题解析】 本题中 if(a 1)b 1;与 else d 3; 之间多了语句 c 2;所以会出现 else语句的位置错误的编译失败提示。 20 【正确答案】 B 【试题解析】 case常量表达式只是起语句标号作用,并不是该处进行条件判断。在执行 switch 语句时,根据 switch
9、的表达式,找到与之匹配的 case语句,就从此case子句执行下去,不在进行判断,直到碰到 break 或函数结束为止。所以执行内层 switch(y)时只执行了 a,此时 a的值为 1。然后执行外层 case 2语句的 a; b; a为 2, b 为 1。所以结果为 B。 21 【正确答案】 C 【试题解析】 由于内层循环 for( k 1; k3; k )后面直接跟了空语句“; “所以在循环内部什么操作也不做,跳出外层循环后执行打印语句,所以打印了一个 “*“,选择 C)。 22 【正确答案】 D 【试题解析】 case常量表达式只 是起语句标号作用,并不是该处进行条件判断。在执行 swi
10、tch 语句时,根据 switch 的表达式,找到与之匹配的 case语句,就从此case子句执行下去,不再进行判断,直到碰到 break 或函数结束为止。简单的说break 是结束整个循环体,而 continue是结束单次循环。 B)选项中当产生的随机数n 为 4时要执行打印操作。 C)选项中当产生的随机数为 1和 2时分别执行 case3与case4后面语句的内容。由于存在 break 语句所以 for循环不是固定执行 8次,执行次数与产生的随机数 n 有关系。 23 【正确答案】 A 【试题解析】 第一次调用 m f(f(f(1),第二次为 m f(f(2),第三次为 mf(4),即返回
11、值为 8。 24 【正确答案】 A 【试题解析】 不能将一个整数直接赋给指针变量作为地址,所以 A是错误的。函数的返回值可以是地址,即指针。函数调用中形参值的变化不会传递给实参。 25 【正确答案】 B 【试题解析】 指针是用来存放地址的变量,用 (类型名 *指针变量名 )的形式定义。赋值时应将某个变量地址即 &x 赋给指针变量,所以选择 B。 26 【正确答案】 D 【试题解 析】 D)选项中 x23定义的是一个两行三列的二维数组,而在给数组元素赋值时却赋成了三行,所以错误。 27 【正确答案】 A 【试题解析】 本题中的函数 fun()的功能是将数组 k 中前 5个元素倒序,所以返回后数组
12、 k中的元素排列是 5,4,3,2,1,6,7,8,9,10。所以打印输出 k2到 k7元素的值,即 321678,所以选择 A。 28 【正确答案】 A 【试题解析】 本题中由 fun函数可知, b0 a00 a03 1 4 3,b1 a11 12 6 7 1, b2 a22 21 11 10 1, b3a33 31 16 13 3。所以主函数中打印 y数组元素的值为 A)选项。 29 【正确答案】 C 【试题解析】 字符串的输入不能使用 scanf(“%s“, s);而应该使用 gets(s)。 30 【正确答案】 A 【试题解析】 根据题目中的定义可以知道 sizeof(p),计算的是数
13、组 p 中所有元素所占用的字节数,而不是 char型数据所占字节数。 31 【正确答案】 A 【 试题解析】 p 是指向二维字符数组第二行 One*Dream!的数组指针,所以长度是 10,打印输出的也是该字符串。 32 【正确答案】 B 【试题解析】 本题中遇到 “字符循环结束,所以只统计 “之前的数字字符,所以为 3。 33 【正确答案】 A 【试题解析】 声明静态局部变量:函数调用结束后,其占用的存储单元不释放,在下次该函数调用时,该变量保留上一次函数调用结束时的值。本题子函数 fun中的变量 i和 m均为静态局部变量。所以第一次调用 fun 函数,返回 m的值为5,第二次再调用 fun
14、函数时 , i的值为 3, m的值已经是 5了,所以执行 i m 1, i的值变为 9, m i x y 9 1 1 11。 34 【正确答案】 C 【试题解析】 auto:函数中的局部变量,动态地分配存储空间,数据存储在动态存储区中,在调用该函数时系统会给它们分配存储空间,在函数调用结束时就自动释放这些存储空间。 register:为了提高效率, C语言允许将局部变量的值放在CPU中的寄存器中,这种变量叫 “寄存器变量 “,只有局部自动变量和形式参数可以作为寄存器变量。 extern:外部变量 (即全局变量 )是在函数的外部定义的 ,它的作用域为从变量定义处开始,到本程序文件的末尾。如果外部
15、变量不在文件的开头定义,其有效的作用范围只限于定义处到文件终了。 static:静态局部变量属于静态存储类别,在静态存储区内分配存储单元。在程序整个运行期间都不释放。 35 【正确答案】 A 【试题解析】 A)选项 struct ord int x; int y; int z; struct ord a;错误,不能在定义结构体的同时,又用结构体类型名定义变量。应该写成 B)选项或者 D)选项的格式。 36 【正确答案】 B 【试题解析】 结构体变量可以作为函数的参数和返回值。作为函数的实参时,可以实现函数的传值调用。当使用结构体变量作为函数的形参时,实参也应该是结构体变量名以实现传值调用,实参
16、将拷贝副本给形参,在被调用函数中改变形参值对于调用函数中的实参没有影响。所以选择 B。 37 【正确答案】 A 【试题解析】 预处理命令是以 “#“号开头的命令,它们不是 C语言的可执行命令,这些命令应该在函数之外书写,一般在源文件的最前面书写,但不是必须在起始位置书写,所以 B, C错误。 C语言的预处理能够实现宏定义和条件编译等功能, 所以 D错误。 38 【正确答案】 C 【试题解析】 malloc(sizeof(int)的作用是开辟一个长度为 sizeof(int)存储空间,并通过强制类型转换 (int*)将此存储空间的地址赋给了一个整型的指针变量 p。然后执行语句 *p n,使得 *
17、p 的值为 10,并通过 return返回此值,即 a的值为 10。然后在主函数中输出 a fun(10) 10 10 20。 39 【正确答案】 B 【试题解析】 无符号整型变量 a的值为 8,二进制表示为 00001000,右移 3位后为 00000001,即十 进制的 1,所以输出 1。 40 【正确答案】 D 【试题解析】 fread(void *buffer, size t size, size t count, FILE *stream);功能是从一个文件流中读数据,读取 count个元素,每个元素 size字节,如果调用成功返回 count。 buffer :用于接收数据的内存地址,大小至少是 size*count 字节; size :单个元素的大小,单位是字节; count :元素的个数,每个元素是 size字节; stream :输入流。