1、国家二级( C语言)笔试模拟试卷 273 及答案与解析 1 简单的交换排序方法是 ( )。 ( A)快速排序 ( B)选择排序 ( C)堆排序 ( D)冒泡排序 2 有以下程序: main() int i=1, j=2, k=3; if(i+=1 程序运行后的输出结果是 _。 ( A) 1 2 3 ( B) 2 3 4 ( C) 2 2 3 ( D) 2 3 3 3 已知数据表 A中每个元素距其最终位置不远,为了节省时间,应采用的算法是( )。 ( A)堆排序 ( B)直接插入排序 ( C)快速排序 ( D)直接选择排序 4 在结构化程序设计中,模块划分的原则是 ( A)各模块应包括尽量多的功
2、能 ( B)各模块的规模应尽量大 ( C)各模块之间的联系应尽量紧密 ( D)模块内具有高内聚度、模块间具有低耦合度 5 在面向对象方法中, ( )描述的是具有相似属性与操作的一组对象。 ( A)属性 ( B)事件 ( C)方 法 ( D)类 6 下面不属于需求分析阶段任务的是 ( A)确定软件系统的功能需求 ( B)确定软件系统的性能需求 ( C)需求规格说明书评审 ( D)制定软件集成测试计划 7 需求分析阶段的任务是确定 ( A)软件开发方法 ( B)软件开发工具 ( C)软件开发费用 ( D)软件系统功能 8 对表进行水平方向和垂直方向的分割,分别对应的关系运算是 ( ) ( A)选择
3、和投影 ( B)投影和选择 ( C)选择和联接 ( D)投影和联接 9 下列特征中不是面向对象方法的主要特征的是 ( )。 ( A)多态性 ( B)继承 ( C)封装性 ( D)模块化 10 在 Windows环境下,单击当前窗口中的按钮 “ ”,其功能是 ( A)将当前应用程序转为后台运行 ( B)退出 Windows后再关机 ( C)终止当前应用程序的运行 ( D)退出 Windows后重新启动计算机 11 下列是用户自定义标识符的是 ( A) _w1 ( B) 3_xy ( C) int ( D) LINE-3 12 下列叙述中正确的是 ( )。 ( A)程序的执行效率与数据的存储 结构
4、密切相关 ( B)程序的执行效率只取决于程序的控制结构 ( C)程序的执行效率只取决于所处理的数据量 ( D)以上三种说法都不对 13 下列选项中不是字符常量的是 ( )。 ( A) v ( B) x2a ( C) a ( D) 0 14 sizeof(float)是 ( )。 ( A)一个双精度型表达式 ( B)一个整型表达式 ( C)一种函数调用 ( D)一个不合法的表达式 15 以下叙述不正确的是 _。 ( A)分号是 C语言的必要组成部分 ( B) C程序的注释 可以写在句的后面 ( C)函数是 C程序的基本单位 ( D)主函数的名字不一定用 main表示 16 下列程序的输出结果,是
5、 _。 main() int a=0,b=0,c=0; if(+a0|+b 0)+c; printf(“na=%d,b=%d,c=%d“,a,b,c); ( A) a=0,b=0,c=0 ( B) a=1,b=1,c=1 ( C) a=1,b=0,c=1 ( D) a=0,b=1,c=1 17 若变量 a是 int类型,并 执行了语句: a=A+1.6;则正确的叙述是 ( A) a的值是字符 C ( B) a的值是浮点型 ( C)不允许字符型和浮点型相加 ( D) a的值是字符 A的 ASCII值加上 1。 18 十六进制数 FF.1转换成十进制数是 ( ) ( A) 255.625 ( B)
6、 250.1625 ( C) 255.0625 ( D) 250.0625 19 有下列程序: fun(int x, int y) return (x+y); main() int a =1,b=2,c=3,sum; sum=fun(a+, b+, a+b), c+); printf(“%dn“, sum); 执行后的输出结果是 ( )。 ( A) 6 ( B) 7 ( C) 8 ( D) 9 20 若有定义语句: doub1e x,y,*px,*py;执行了 px=py=之后,正确的输入语句是 _。 ( A) scanf(“%f%f“ ( B) scanf(“%f%f“ ( C) scanf
7、(“%1f%lf“,px,y); ( D) scanf(“%lf%lf“,x,y); 21 有以下程序 #include main() char s=“012xy 08s34f4w2”; int i, n=0: for(i=0; si!=0; i+) if(si=0 si=9)n+: printf(“ d n”, n): 程序运行后的输出结果是 ( A) 0 ( B) 3 ( C) 7 ( D) 8 22 下面程序的功能是输出以下 形式的金字塔图案: * * * * * * * * * * * * * * * * main() int i,j; for(i=1;i =4;i+;) for(j=
8、1;j =4-i;j+)printf(“ “); for(j=1; ;j =_;j+)printf(“*“); printf(“n“); 在下划线处应填入的是 _。 ( A) i ( B) 2*i-1 ( C) 2*i+1 ( D) i+2 23 下列函数定义中,会出现编译错误的是 _。 ( A) max(int x,int y,int *z) *z=x y? x:y; ( B) int max(int x,y) int z; z=x y? x;y; return z; ( C) max(int x,int y) int z; z=x y? x:y; return(z); ( D) int m
9、ax(int x,int y) return(x y?x:y); 24 若变量已正确定义,有以下程序段: i=0; do printf(“%d, “, i);while(i+); printf(“%dh“, i); 其输出结果是 ( )。 ( A) 0, 0 ( B) 0, 1 ( C) 1, 1 ( D)程序进入无限循环 25 若有以下程序 #include stdio.h int a =2,4,6,8; main( ) int i; int *p=a; for(i=0;i 4;i+) ai=*p; printf(“%dn“,a2); 上面程序的输出结果是 ( A) 6 ( B) 8 ( C
10、) 4 ( D) 2 26 在 “文件包含 ”预处理语句的使用形式中,当 #include后面的文件名用 (尖括号 ) 括起时,寻找被包含文件的方式是 ( ) ( A)仅仅搜索当前目录 ( B)仅 仅搜索源程序所在目录 ( C)在标准目录下查找指定的文件 ( D)先在源程序所在目录搜索,如查找不到,再按系统指定的标准目录查找 27 下列程序的运行结果是 ( )。 main() int a 2,b 3,c 4; if(a b) if0 0)c 0; elsec+ 1; printf(“%dh”,c); ( A) 2 ( B) 3 ( C) 5 ( D) 4 28 可以在 C语言程序中用做用户标识
11、符的一组标识符是 ( )。 ( A) void ( B) aa 123 abc BBN cas ( C) as+b3 ( D) 6f -123 Do If SIG 29 若调用 fputc()函数输出字符不成功,则其返回值是 _。 ( A) EOF ( B) NULL ( C)非 0值 ( D)输出的字符 30 有下列程序: main() int i; for(i=1;i =40;i+) if(i+%5= =0) if(+ +i%8= =0)printf(“%d“,i); printf(“n“); 执行后的输出结果是( )。 ( A) 5 ( B) 24 ( C) 32 ( D) 40 31
12、以下能正确定义一维数组的选项是 ( )。 ( A) int a5 =0,1,2,3,4,5; ( B) char a = 0,1,2,3,4,5; ( C) char a = A,B,C ; ( D) int a5 = “0123“; 32 以下叙述中错误的是 ( A) gets函数用于从终端读入字符串 ( B) getchar函数用于从磁盘文件读入字符 ( C) fputs函数用于把字符串输出到文件 ( D) fwrite函数用于以二进制形式输出数据到文件 33 有以下程序 int fa(int x) return x*x; int fb(int x) return x*x*x; int f
13、(int (*f1)(),int (*f2)(),int x) return f2(x)-f1(x); main() int i; i-f(fa, fb,2); printf(“%d n“,i); 程序运行后的输出结果是 ( A) 4 ( B) 1 ( C) 4 ( D) 8 34 有以下程序: main() int k=5; while(-k) printf(“%d“, k-=3); printf(“n“); 执行后的输出结果是 ( )。 ( A) 1 ( B) 2 ( C) 4 ( D)死循环 35 下列程序执行后的输出结果是 _。 main () int x=f; printf(“%c
14、n“,A+(x-a+l); ( A) G ( B) H ( C) I ( D) J 36 能正确表示逻辑关系 “a10或 a0“的 C 语言表达式是 _。 ( A) a =100 or a =0 ( B) a =0|a =10 ( C) a 10 char h; T; 则下面叙述中正确的是( )。 ( A)可以用 S定义结构体变量 ( B)可以用 T定义结构体变量 ( C) S是 struct类型的变量 ( D) T是 stnictS类型的变量 39 设有如下定义 struct ss char name10; int age; char sex; std3, *p=std; 下面各输入语句中错
15、误的是 ( A) scanf(“%d“, for(i=1;i 7;i+) sum+=i; printf(“%d“,sum); 52 若有定义 int a=10,b=9,c=8;,接着顺序执行下列语句,变量 b中 的值是【 】。 c=(a-=(b-5); c=(a%11)+(b=3); 53 以下程序的输出结果是【 】。 #define MAX(x,y) (x) (y)?(x):(y) main() int a=5, b=2, c=3, d=3, t; t=MAX(a+b, c+d) *10; printf(“%dn“,t); 54 以下程序运行后的输出结果是【 】。 main() int p=
16、30; printf(“%dn“,(p/3 0?p/10:p%3); 55 下列程序的输出结果是 _。 main () int i,sum; for(i=1; i 7; i+) sum+=i; printf(“%d“,sum); 56 已有定义如下: struct node int data; struct node *next; *p; 以下语句调用 malloc函数,使指针 p指向 一个具有 struct node类型的动态存储空间。请填空。 p = (struct node *)malloc(【 】 ); 国家二级( C语言)笔试模拟试卷 273 答案与解析 1 【正确答案】 D 【试题
17、解析】 所谓的交换类排序方法是指借助数据元素之间的互相交换进行排序的一种方法,包括冒泡排序和快速排序,冒泡排序是一种最简单的交换排序方法,它通过相邻元素的交换,逐步将线性表变成有序。 2 【正确答案】 D 【试题解析】 对于 if语句,根据优先级顺序,先判断 (+j=-3|k+=3),此时,+j=-3成立,就不用计算 “|”后面的表达式,此时 k=3,由于 i+=1成立,自加后 i=2, if语句的条件为真,故输出的结果为: 2, 3, 3。 3 【正确答案】 B 【试题解析】 当数据表 A中每个元素距其最终位置不远,说明数据 A按关键字值基本有序。在待排序数据基本有序的情况下,采用插入排序所
18、用的时间最少。 4 【正确答案】 D 【试题解析】 在结构化程序设计中,一般较优秀的软件设计尽量做到高内聚、低耦合,这样有利于提高软件模块的独立性,也是模块划分的原则。 5 【正 确答案】 D 【试题解析】 类 (class)描述的是具有相似属性与操作的一组对象具体对象是类的实例。 6 【正确答案】 D 【试题解析】 在软件开发的过程中 ,应该尽早的制定测试计划 ,其中在需求分析阶段制定系统测试计划 ,在概要设计阶段制定集成测试计划 ,在详细设计阶段制定单元测试计划。 7 【正确答案】 D 【试题解析】 需求分析是软件定义时期的最后一个阶段 ,它的基本任务就是详细调查现实世界要处理的对象 (组
19、织、部门、企业等 ),充分了解原系统的工作概况 ,明确用户的各种需求 ,然后在此基础 上确定新系统的功能。选项 A)软件开发方法是在总体设计阶段需完成的任务 ;选项 B)软件开发工具是在实现阶段需完成的任务 ;选项 C)软件开发费用是在可行性研究阶段需完成的任务。 8 【正确答案】 A 9 【正确答案】 D 【试题解析】 面向对象设计方法与面向过程设计方法有本质的不同,其基本原理是:使用现实世界的概念抽象地思考问题从而自然地解决问题。其特点包括:分类性、多态性、封装性、模块独立性、继承和多态性等。模块化是结构化程序设计的特点。 10 【正确答案】 C 【试题解析】 在 Windows环境下,单
20、击当前窗口中的按钮 “x”,其功能是终止当前应用程序的运行,关闭当前窗口。 11 【正确答案】 A 【试题解析】 C语言规定用户标识符由英文字母、数字和下划线组成,且第一个字符必须是字母或下划线,由此可见选项 B), D)是错的;此外, C语言不允许用户将关键字作为标识符,而选项 C)选项项中的 int是 C语言的关键字。 12 【正确答案】 A 【试题解析】 程序的执行效率是与数据的存储结构密切联系的。 13 【正确答案】 D 【试题解析】 C语言规定,一个字符常量代表 ASCII码字符集里的一个字符在程序中用单引号括起来以便区分。 v表示的是竖向跳格; kx2a表示的是两像十六进制数; a
21、表示的是字符 a对应的 ASCII码值。 “ 0“用双引号故不正确。 14 【正确答案】 B 【试题解析】 sizeof 是长度运算符,或称字节数运算符,用于计算数据类型和变量的长度。 15 【正确答案】 D 【试题解析】 C语言的程序是由主函数 main()开始运行,由主函数来调用其他函数,所以 D是错误的。 16 【正确答案】 C 【试题解析】 “|”是 或运算,它有个 “短路 ”的特点需特别注意,当 “|”运算符左边的表达式的值为真时,则程序就不再对 “|”右边的表达式的值进行运算,而是使得整个表达式的值直接为真。 17 【正确答案】 D 【试题解析】 在 C语言中规定允许不同类型的量进
22、行运算,但在运算时需转换成高级的类型进行运算。在表达式中有字符型和实型参加运算时,统一转换为实型再运算,当运算结果存入变量时再转换为该变量的类型。 18 【正确答案】 C 19 【正确答案】 C 【试题解析】 函数 fun(int x, int y)的功能是 返回两个整型数据的和。在主函数中,变量 a, b, c的初始值分别为 1, 2, 3。因此逗号表达式 “a+, b+, a+b”的值等于 5,表达式 c+的值为 3,调用子函数的表达式为 “fun(5, 3);”,其返回值等8。所以变量 sum的值等于 8。 20 【正确答案】 C 【试题解析】 scanf函数的 般调用形式为: scan
23、f(格式控制输入项 1,输入项 2, ) 选项 B中, ”语句,即输出 32。本题的答案为选项 C) 。 31 【正确答案】 B 【试题解析】 选项 A)定义的是长度为 5的数组元素,但初值有 6个元素,所以错误;选项 C)不符合数组定义形式,数组名后应加上 “;选项 D)的类型说明符错误,应改为 char;选项 B)中的 0, 1, 2, 3, 4, 5分别表示对应字符的 ASCII码,所以正确。 32 【正确答案】 B 【试题解析】 getchar 函数的作用是从终端读入一个字符。 33 【正确答案】 C 【试题解析】 函数 f()有 3个形式参数 f1、 f2和 x,其中 f1、 f2是
24、指向函数的指针变量。在 main()函数中执行了函数调用 “f(fa,fb,2)”,从而使 f()的形式参数 f1指向了 fa,形式参数 f2指向了 fb,把实参 2传给了行参变量 x。函数 f()中的 return语句中的相当于 “fb(2)-fa(2)” (fb(2)的返回值为 2*2*2=8, fa(2)返回值为 2*2=4)即(8-4),值为 4函数 f()执行后把返回值 4赋给了 i,输出 i的值是 4所以 4个选项中 C正确。 34 【正确答案】 A 【试题解析】 因为在 while循环的循环条件中,一运算符是前缀形式,所以表达式 k 的值是 k自减之后的值。程序开始时,将 k 的
25、值初始 化为 5,然后进入while循环,因为 k的值为 4(非零 ),所以执行循环体输出 k-=3的值 1,此时 k 的值也变为 1。第 2次执行循环条件, k 的值为 0,所以循环结束。因此最后输出的结果是 1,故应该选择 A。 35 【正确答案】 A 36 【正确答案】 D 【试题解析】 C语言中的 “或 ”关系用 “|”表示,其他相关逻辑运算符 “与 ”用 “i 7;i+)决定了循环次数为 6次,每次执行的操作是Sum+=i,但由于 sum没有初始化,并不知道 sum的初值是多少,所以结果无定值 52 【正确答案】 3 【试题解析】 这里: b-5=4, a- 4之后 a的值为 6,并
26、把 它赋给 c。此时 b 的值并未被改变。在第 2个表达式中,也只有赋值表达式 b=3改变了 b 的值。所以两行语句执行完毕, b 的值应该为 3。 53 【正确答案】 7 【试题解析】 在 C语言中,宏定义是直接替换的,所以在刘表达式MAX(a+b,c+d) *10进行替换后,表达式变为 (a+b) (c+d) ?(a+b) : (c+d) *10。在这个条件表达式中, (a+b) (c+d) 为真,所以用 (a+b) 的值作为整个表达式的值(否则用 (c+d) *10的值作为整个表达式的值 ),而 (a+b) 的值为 7。所以整 个表达式的值为 7。 54 【正确答案】 3 【试题解析】
27、三目运算表达式的规则为如果 “?”前面表达式的值为真,则取 “: ”前的表达式的值,否则,取 “: ”后面表达式的值。又由于条件运算符的结合方向是自右向左的,所以在本试题中,先计算表达式中 p%3,该值为 0,再计算表达式 p/10 其值为 3,最后计算表达式 P/3该值为 10,所以此表达式等价于 “10? 3:0”,显然取 “: ”前的值为 3,所以最后输出的值为 3。 55 【正确答案】 无定值 【试题解析】 for(i=1; i 7; i+)决定了循环次数为 6次,每次执行的操作是sum+=i,但由于 sum没有初始化,并不知道 sum的初值是多少,所以结果无定值。 56 【正确答案】 sizeof(struct node) 【试题解析】 本题考查了结点的动态申请。动态申请需用到的函数为 malloc(),malloc()中的参数应为结点占用的存储空间的大小,此题申请的结点要用来存放stmct node类型的数据,因此申请的结点大小恰好可以存放 stmct node类型的数据,而 sizeof()函数的作用是求得类型或数据占用的存储空间的大小。