1、国家二级 C语言程序设计机试(选择题)模拟试卷 4及答案与解析 一、选择题 1 下列叙述中正确的是 ( )。 ( A)程序执行的效率与数据的存储结构密切相关 ( B)程序执行的效率只取决于程序的控制结构 ( C)程序执行的效率只取决于所处理的数据量 ( D)以上说法均错误 2 软件按功能可以分为应用软件、系统软件和支撑软件 (或工具软件 )。下列各项中属于应用软件的是 ( )。 ( A)学生成绩管理系统 ( B) C语言编译程序 ( C) UNIX操作系统 ( D)数据库管理系统 3 通常软件测试 实施的步骤是 ( )。 ( A)集成测试、单元测试、确认测试 ( B)单元测试、集成测试、确认测
2、试 ( C)确认测试、集成测试、单元测试 ( D)单元测试、确认测试、集成测试 4 下列叙述中错误的是 ( )。 ( A)系统总体结构图支持软件系统的详细设计 ( B)软件设计是将软件需求转换为软件表示的过程 ( C)数据结构与数据库设计是软件设计的任务之一 ( D) PAD图是软件详细设计的表示工具 5 对长度为 n的线性表作快速排序,在最坏情况下,比较次数为 ( )。 ( A) n ( B) n一 1 ( C) n(n1) ( D) n(n一 1) 2 6 某二叉树共有 7个结点,其中叶子结点只有 1个,则该二叉树的深度为 (假设根结点在第 1层 )( )。 ( A) 3 ( B) 4 (
3、 C) 6 ( D) 7 7 下列关于栈的叙述中,正确的是 ( )。 ( A)栈顶元素最先能被删除 ( B)栈顶元素最后才能被删除 ( C)栈底元素永远不能被删除 ( D)栈底元素最先能被删除 8 在数据库中,数据模型包括数据结构、数据操作和 ( )。 ( A)数据约束 ( B)数据类型 ( C)关系运算 ( D)查 询 9 一名教师可讲授多门课程,一门课程可由多名教师讲授。则实体教师和课程间的联系是 ( )。 ( A) 1: 1联系 ( B) 1: m联系 ( C) m: 1联系 ( D) m: n联系 10 支持子程序调用的数据结构是 ( )。 ( A)栈 ( B)树 ( C)队列 ( D
4、)二叉树 11 以下正确的说法是 ( )。 ( A)用户若需要调用标准库函数,调用前必须重新定义 ( B)用户可以重新定义标准库函数,但若重新定义,该函数将失去原有意义 ( C)用户系统根本不允许用户重新定义库函数 ( D) 用户若需要调用库函数,调用前不必使用预编译命令将该函数所在文件包括到用户源文件中,系统会自动寻找该文件 12 下列叙述中错误的是 ( )。 ( A) C程序可以由一个或多个函数组成 ( B) C程序可以由多个程序文件组成 ( C)一个 C语言程序只能实现一种算法 ( D)一个 C函数可以单独作为一个 C程序文件存在 13 设有定义: int a; float b; 执行
5、scanf(” 2d f , ( C) X41; ( D) OX41 16 有以下程序: #include main() int a=3: a+=a一 =a*a: prinff(“ d n”, a); 程序的输出结果是 ( )。 ( A) 0 ( B) 9 ( C) 3 ( D)一 12 17 设有定义: char s81; int i=0; 以下不能将一行 (不超过 80个字符 )带有空格的字符串正确读入的语句或语句组是( )。 ( A) gets(s); ( B) while(si+=getchar()!= n); si= 0; ( C) scanf(“ s”, s); ( D) dosc
6、anf(“ c”, si); while(si+!= n); si= 0; 18 有以下程序: #include main() char c1, c2, c3, c4, c5, c6; scanf(“ c c c c”, &c1, &c2&c3, &c4); c5=getchar(); c6=getchar(); putchar(e1); putchar(c2); prinff(“ c e n”, c5, c6); 程序运行后,若从键盘输入 (从第 1列开始 ): 123 45678 则输出结果是 ( )。 ( A) 1256 ( B) 1245 ( C) 1278 ( D) 1267 19
7、有以下程序: #include main( ) im a, b; for(a=0; a,则输出结果是 ( )。 ( A) 2 3 3 4 5 6 ( B) 2 3 4 ( C) 2 2 3 4 4 4 ( D) 2 3 4 3 4 4 20 对于 if(表达式 )语句,以下叙述中正确的是 ( )。 ( A) “表达式 ”的值可以是任意合法的数值 ( B)变量不 能出现在 “表达式 ”中 ( C)常量不能出现在 “表达式 ”中 ( D)如果 “表达式 ”的值不是逻辑值,程序会出编译错误 21 若有以下程序: #include main() int c; c=13 115; printf(“ d
8、n”, c); 则程序的输出结果是 ( )。 ( A) 13 ( B) 15 ( C) 18 ( D) 5 22 有以下程序: #include main() int a=1, b=0; if(一一 a)b+; else if(a=0)b+=2; else b+=3; printf(“ d n”, b); 程序运行后的输出结果是 ( )。 ( A) 0 ( B) 1 ( C) 2 ( D) 3 23 有以下程序: #include main( ) int i, array6=1, 5, 0, 4; for(i=0; i main() int a=3: d0 printf(“ d, ”, a一
9、=2); while(!(一一 a); printf(“ n”); 程序运行后的输出结果是 ( )。 ( A) 1,一 3, ( B) 1,一 2, ( C) 3, 0, ( D) 1, 0, 28 若有定义: char s30=0; 运行时输入: This is a string 则以下不能正确读入整个字符串 This is a string到字符数组 s中的语句组是 ( )。 ( A) scanf(“ s”, s); ( B) gets(s); ( C) for(i=0; (c=getchar()!= n; +)si=c; ( D) i=0; while(C=getchar()!= n)j
10、i+=c; 29 有以下程序: #include main() int X; for(X=3; X void fun(int a, int b) int t; t=a; a=b; b=t; main() int c10=1, 2, 3, 4, 5, 6, 7, 8,9, 0, i; for(i=0; i int fun(int n) int a; if(n=1)return 1; a=n+fun(n一 1); return(a); main() printf(“ d n”, fun(5); 程序的输出结果是 ( )。 ( A) 10 ( B) 14 ( C) 15 ( D) 9 32 以下选项
11、中,没有编译错误的是 ( )。 ( A) char str3=d, e, b, u, g, 0; ( B) char strl5=“pass”, str26; str2=strl: ( C) char name10; name=“china”; ( D) char str4; str4=“hello world”; 33 有以下程序: #include int add(int a, int b) return(a+b); main() int k, (*f)(), a=5, b=10; f=add; 则以下函数调用语句中错误的是 ( )。 ( A) k=*f(a, b); ( B) k=add
12、(a, b); ( C) k=(*f)(a, b); ( D) k=f(a, b); 34 以下关于 C语言函数参数传递方式的叙述中正确的是 ( )。 ( A)数据只能从实参单向传递给形参 ( B)数据可以在实参和形参之间双向传递 ( C)数据只能 从形参单向传递给实参 ( D) C语言的函数参数既可以从实参单向传递给形参,也可以在实参和形参之间双向传递,可视情况选择使用 35 设已有定义: float x; 则以下对指针变量 P进行定义且赋初值的语句中正确的是 ( )。 ( A) float*p=&; x; ( B) int*P=(float)x; ( C) float p=&; x; (
13、D) float*P=1024: 36 以下叙述中正确的是 ( )。 ( A)在 C语言中,预处理命令行都以 #开头 ( B)预处理命令行必须位于 C源程序的起始位置 ( C) #include必须放在 C程序的开头 ( D) C语言的预处理不能实现宏定义和条件编译的功能 37 有以下程序: #include int funl(int a, int b) return a+b; int flun2(int a, int b) retum ab; int fun(int(*t)(int, int), int x, int y) return(*t)(x, y); main() int x; x=
14、fun(funl, 9, 3); x+=fun(fun2, 8, 3); printf(“ d n”, x); 程序运行后的输出结果是 ( )。 ( A) 24 ( B) 23 ( C) 17 ( D) 22 38 有以下程序: #include void sp(int*a) int b=2; a= b: *a=*a*2: prinff(“ d, ”, *a); main() int k=3, *p=&k; sp(p); pfinff(“ d, d n”, k, *p); 则程序的输出结果是 ( )。 ( A) 4, 3, 3 ( B) 4, 3, 4 ( C) 6, 3, 6 ( D) 6,
15、 6, 6 39 有以下程序: #include void my() char ch: ch=getchar(); if(ch!=c)my(); putchaur(ch); main() my(); 执行时,输入 abc,则输出结果是 ( )。 ( A) abc ( B) ababc ( C) bca ( D) cba 40 有以下程序: #include mmn() unsigned chaur a=8, c; c=a3: pnnff(“ d n”, c); 程序运行后的输出结果是 ( )。 ( A) 32 ( B) 16 ( C) 1 ( D) 0 国家二级 C语言程序设计机试(选择题)模
16、拟试卷 4答案与解析 一、选择题 1 【正确答案】 A 【试题解析】 程序执行的效率与数据的存储结构、数据的逻辑结构、程序的控制结构以及所处理的数据量等有关。 2 【正确答案】 A 【试题解析】 软件按功能可以分为:应用软件、系统软件、支撑软件。操作系统、编译程序、汇编程序、网络软件、数据库管理系统都属于系统软件。所以B、 C、 D选项都是系统软件,只有 A选项是应用软件。 3 【正确答案】 B 【试题解析】 软件测试过程一般按 4个步骤进行,即单 元测试、集成测试、验收测试 (确认测试 )和系统测试。故答案应该选 B。 4 【正确答案】 A 【试题解析】 详细设计的任务是为软件结构图而非总体
17、结构图中的每一个模块确定实现算法和局部数据结构、用某种选定的表达工具表示算法和数据结构的细节,因此 A选项描述错误。 5 【正确答案】 D 【试题解析】 快速排序最坏情况就是每次选的基准数都和其他数做过比较,共需比较 (n一 1)+(n一 2)+1=n(n 一 1) 2,故 D选项正确。 6 【正确答案】 D 【试题解析】 根据二叉树的基本性质:在任 意一棵二叉树中,度为 0的叶子结点总比度为 2的结点多一个,因此本题中度为 2的结点为 11=0个,据此可以知道本题中的二叉树的每一个结点都有一个分支,所以共有 7个结点、共 7层,即深度为 7,选择 D。 7 【正确答案】 A 【试题解析】 栈
18、是 “先进后出 ”的数据结构,因此栈顶元素最后入栈却最先被删除,栈底元素最先入栈却最后被删除,答案为 A。 8 【正确答案】 A 【试题解析】 数据模型是数据特征的抽象,从抽象层次上描述了系统的静态特征、动态行为和约束条件,为数据库系统的信息表示和操作提供一个抽象的 框架,即描述了数据结构、数据操作及数据约束。故正确答案为 A。 9 【正确答案】 D 【试题解析】 因为一名教师可讲授多门课程,而一门课程又能由多名教师讲授,所以教师和课程之间是多对多的关系,可以表示为 m: n,选择 D。 10 【正确答案】 A 【试题解析】 栈支持子程序调用。栈是一种只能在一端进行插入或删除的线性表。在主程序
19、调用子函数时要首先保存主程序当前的状态,然后转去执行子程序,最终把子程序的执行结果返回到主程序中调用子程序的位置,继续向下执行,这种调用符合栈的特点,所以 A选项正确。 11 【正确答案】 D 【试题解析】 无论是标准库函数,还是别的函数,都属于函数的范畴,都允许用户重新定义和使用,使用的时候: include命令必须以 “#”号开头,文件名用一对双引号或一对尖括号括起来,系统提供的头文件是以 h作为文件后缀。 12 【正确答案】 C 【试题解析】 一个 C程序可以有一个或多个程序文件,也可以有一个或多个函数,所以一个 C语言程序可以实现多种算法,答案选 C。 13 【正确答案】 A 【试题解
20、析】 scanf()函数的一般形式为: scan(格式控制,地址 表列 )。其中, “格式控制 ”是用双引号括起来的字符串,也称为 “转换控制字符串 ”,它包括两种信息: 格式说明,由 “ ”和格式字符组成; 普通字符,即需要原样输入的字符。 “地址表列 ”是需要接收输入数据的一系列变量的地址。本题中的 “格式控制 ”是 “ 2d f”, “ 2d”的意思是要输入一个整数,但该整数最宽只占 2个字符,而“ 2d”是要输入一个浮点数。题目要求输入的是 876空格 543 0,所以 scanf()函数将 87赋给 a,将 6赋给 b。 14 【正确答案】 B 【试题解析】 取余操作数只能是整数,
21、x+n和 数值 5不能作为赋值的左值,所以 A、 C、 D选项错误。 15 【正确答案】 A 【试题解析】 xhh表示 1到 2位十六进制所代表的字符,故答案为 A。 16 【正确答案】 D 【试题解析】 等号 “=”运算符是从右到左,且与 “+、一、 *”运算符比,优先级较低。首先计算 a*a,结果为 9,执行 a=a一 9后 a的值为一 6,然后执行 a+=a,即a=a+a=一 6+(一 6),所以值为一 12。 17 【正确答案】 C 【试题解析】 函数 scanf()输入字符串时默认空格为间隔符,所以不能输入空格, 答案选 C。 18 【正确答案】 B 【试题解析】 对于字符型数据的输
22、入而言,从键盘上输入的字符,不管是否可以输出,都会被读入字符型变量中。因此, c1=1, c2=2, c3=3, c4=, c5=4,c6=5,输出 c1, c2, c5, c6的结果为 1245,答案选 B。 19 【正确答案】 A 【试题解析】 这是一个循环结构嵌套选择结构,按照外层循环,内层选择一步一步处理即可。本题重点注意, switch语句中并没有出现 break语句,所以内层循环是不会跳出的。 20 【正确答案】 A 【试题解析】 B、 C、 D选项描述比较片面。 21 【正确答案】 B 【试题解析】 本题考查位运算中按位或运算符,或运算只要两个比较的位中有一个为 1,其结果是 1
23、,否则结果为 0。 13用二进制表示为 00001101, 15用二进制表示为 00001111,或运算后结果为 00001111,即 15,故 B选项正确。 22 【正确答案】 C 【试题解析】 “+”和 “一一 ”运算,当以前缀形式出现时,则先进行加 1或减 1操作,再进行其他运算;当以后缀形式出现时,则先进行其他运算,再进行加 1或减 1操作。 a初始 定义为 1, b为 0,执行一一 a, a的值变为 0,即 if判断为假,执行 b+=2,输出 b的值为 2。 23 【正确答案】 B 【试题解析】 本题主要考查一维数组的输出。由于数组中有 6个元素,但初始化数组的时候只给出 4个元素,
24、所以 array5=0, array6=0,前面几位元素依次输出,不够位数补 0,所以选项 B正确。 24 【正确答案】 C 【试题解析】 同类元素的集合称为数组,数组元素在内存中占据连续的存储空间, C选项正确。方括号中可以为整型变量或者常量表达式, A选项错误。在使用逗号运算符 的情况下,一条语句可以定义多个数组, B选项错误。数组元素在数组中的下标为整型常量或者变量构成的整型表达式,不能为浮点数, D选项错误。答案选 C。 25 【正确答案】 C 【试题解析】 考查二维数组的初始化。初始化二维数组的时候,若给数组的全部元素均赋初值,此时第一维的元素个数可以不指定,部分赋值时,最后一行元素
25、不写完整,此时数组第一维元素个数仍然可以不指定。题中为按行给数组 m赋值,最后一行只有部分赋初值,答案选 C。 26 【正确答案】 A 【试题解析】 A选项正确, char c1, c2, *c3, c440表示定义了两个字符变量c1、 c2,一个字符指针 c3,一个字符数组 c4。数组的下限永远为 0,选项 B、 C、D错,答案选 A。 27 【正确答案】 B 【试题解析】 本题重点考查 dowhile 语句,该循环语句的特点是,先执行循环中的语句,然后再判断表达式是否为真,如果为真则继续循环;如果为假,则终止循环。因此, dowhile 循环至少要执行一次循环语句。变量 a赋初值为 3,每
26、循环一次需执行语句 a一 =2一次,同时循环条件使变量 a自减 1,所以第一次循环后变量 a变为 1,第 2次循环后变量 a变为一 2。故 B选项正确。 28 【正确答案】 A 【试题解析】 考查基本的字符串输入控制语句。 29 【正确答案】 A 【试题解析】 条件运算符组成条件表达式的一般形式为:表达式 1?表达式 2:表达式 3。其求值规则为:表达式 1值为真,则以表达式 2的值作为条件表达式的值,否则以表达式 3的值作为整个条件表达式的值。本题中语句 printf(x2)?(“* dt): (“# dI, x);含义为变量 x对 2求余,如果结果为真,则按照 “*d”出,否则按照 “#
27、d”出。故 A选项正确。 30 【正确答案 】 A 【试题解析】 函数 fun()属于值传参,形参的变化不会影响实参,所以函数调用结束后,数组 c没有任何变化,输出结果为选项 A。 31 【正确答案】 C 【试题解析】 考查递归函数。函数 fun()的功能是计算 1到 n之间的数字之和,所以计算结果为 15,答案选 C。 32 【正确答案】 A 【试题解析】 B选项中,不能直接将字符数组名直接赋值给另一个字符数组名。C选项赋值错误,不能将一个字符串常量赋值给一个字符指针。 D选项定义 str4时需要定义其长度。故 A选项正确。 33 【正确答 案】 A 【试题解析】 int(*f)()为一个函
28、数指针变量,返回值为整型, f为一个指针变量,指向一个已经定义的函数,在调用该函数的时候需要把参数写在相应的小括号内,即 (*指针名 )(参数或参数列表 ),所以选项 A调用错误,答案选 A。 34 【正确答案】 A 【试题解析】 数据只能由实参单向传递给形参称为 “值传递 ”,而不能由形参传回来给实参, A选项正确;数组名、指针等作参数,实参传递给形参地是地址值,这样形参和实参就指向同一段内存单元,在函数体内对形参数据的改变也将影响到实参。实参和形参之间不可 双向传递, BD选项错误。数据不能从形参传递给实参, C选项错误。 35 【正确答案】 A 【试题解析】 考查指针变量的初始化。只能把
29、对应类型的变量的地址赋值给指针,选项 B错误;定义指针时要加上 “*”标明该变量为一个指针变量,选项 C错误;不能把一个整数直接赋值给指针变量,选项 D错误;所以答案选 A。 36 【正确答案】 A 【试题解析】 c语言中,凡是以 “#”开头的都被称为编译预处理行,选项 A正确;预处理行可以放在 C源程序的任何位置,习惯放在起始位置,选项 B错误;语句 “#include”必须放在使用文件 stdio h中相关方法的语句之前,但是不一定非要放在 C程序开头,选项 C错误;预处理包括宏定义、文件包含和条件编译等,选项 D错误。答案选 A。 37 【正确答案】 C 【试题解析】 本题主要考查函数作
30、为形参时的使用,由 x=fun(funl, 9, 3);可得到 x=9+3=12,而后直接传入函数 flin2, x=x+83=12+5=17。故 C选项正确。 38 【正确答案】 A 【试题解析】 首先在主函数中给整型变量 k赋值为 3,将变量 k的地址赋给指针变量 p,调用 sp函数 ,将实参 p的值传给形参 a,在 sp函数中,指针变量 a又获得变量 b的地址,通过运算后,输出 a的值为 4,返回主函数,输出 k的值和 p的值为 3和 3。故 A选项正确。 39 【正确答案】 D 【试题解析】 my()递归,直到输入了 c开始返回。递归使用的是栈的思想,因此最后输入进去的最先返回并输出。所以结果是 cba。 40 【正确答案】 C 【试题解析】 字符常量与其 ASC 码值一一对应,在计算的时候,可以使用该字符的 ASC 码参与运算,输出时会根据格式控制符输出对应的字符或者 ASC码。右移运算符 “”的运算规则是把左边运算数的各二进制位全部右移 n位, n取决于 “”右边的数值。字符 a的 ASC 码值为 8,对应二进制为 1000,所以a3=1,输出的字符 c的 ASC 码值为 1,答案选 C。