1、国家二级( C语言)笔试模拟试卷 102及答案与解析 1 下面叙述正确的是 ( )。 ( A)算法的执行效率与数据的存储结构无关 ( B)算法的空间复杂度是指算法程序中指令 (或语句 )的条数 ( C)算法的有穷性是指算法必须能在执行有限个步骤之后终止 ( D)以上三种描述都不对 2 下列关于栈的叙述正确的是 ( )。 ( A)在栈中只能插入数据 ( B)在栈中只能删除数据 ( C)栈是先进先出的线性表 ( D)栈是先进后出的线性表 3 一棵二叉树中共有 70个叶子结点与 80个度为 1的结点,则该二叉树中的 总结点数为 ( )。 ( A) 221 ( B) 219 ( C) 231 ( D)
2、 229 4 下列叙述中正确的是 ( )。 ( A)线性链表中的各元素在存储空间中的位置必须是连续的 ( B)线性链表中的表头元素一定存储在其他元素的前面 ( C)线性链表中的各元素在存储空间中的位置不一定是连续的,但表头元素一定存储在其他元素的前面 ( D)线性链表中的各元素在存储空间中的位置不一定是连续的,且各元素的存储顺序也是任意的 5 下面概念中,不属于面向对象方法的是 ( )。 ( A)对象 ( B)继承 ( C) 类 ( D)过程调用 6 在结构化方法中,用数据流程图 (DFD)作为描述工具的软件开发阶段是 ( )。 ( A)可行性分析 ( B)需求分析 ( C)详细设计 ( D)
3、程序编码 7 在软件开发中,下面任务不属于设计阶段的是 ( )。 ( A)数据结构设计 ( B)给出系统模块结构 ( C)定义模块算法 ( D)定义需求并建立系统模型 8 下列关于关系运算的叙述中正确的是 ( )。 ( A)投影、选择、连接是从二维表的行的方向来进行运算 ( B)并、交、差是从二维表的列的方向来进行运算 ( C)投 影、选择、连接是从二维表的列的方向来进行运算 ( D)以上三种说法都不对 9 数据库设计包括两个方面的设计内容,它们是 ( )。 ( A)概念设计和逻辑设计 ( B)模式设计和内模式设计 ( C)内模式设计和物理设计 ( D)结构特性设计和行为特性设计 10 下列模
4、式中,能够给出数据库物理存储结构与物理存取方法的是 ( )。 ( A)内模式 ( B)外模式 ( C)概念模式 ( D)逻辑模式 11 下列叙述中正确的是 ( )。 ( A) C语言编译时不检查语法 ( B) C语言的子程序有过程和函数两 种 ( C) C语言的函数可以嵌套定义 ( D) C语言所有函数都是外部函数 12 以下有 4组用户标识符,其中合法的一组是 ( )。 ( A) for -sub case ( B) 4d DO Size ( C) f2_G3 IF abc ( D) WORD void define 13 下列属于不合法的 C语言整型常量的选项是 ( )。 ( A) -32
5、679 ( B) 0Xabc ( C) 69 ( D) 3.00E+02 14 在 C语言 系统中,假设 int类型数据占两个字节,则 double、 long、 unsigned int、 char类型数据所占字节数分别为 ( )。 ( A) 8, 2, 4, 1 ( B) 2, 8, 4, 1 ( C) 4, 2, 8, 1 ( D) 8, 4, 2, 1 15 下列选项中均属于 C语言合法的标识符是 ( )。 ( A) Int #sub break ( B) _3ab FOR Long ( C) 3a printf a_b ( D) WORD auto include 16 字符串 “a
6、bcd123xABt“的长度是 ( )。 ( A) 8 ( B) 17 ( C) 9 ( D) 10 17 以下合法的赋值语句是 ( )。 ( A) x=y=100 ( B) d-; ( C) x+y; ( D) c=int(a+b); 18 若 x, i, j和 k都是 int型变量,则计算表达式 x=(i=4, j=16, k=32)后 x的值为( )。 ( A) 4 ( B) 16 ( C) 32 ( D) 52 19 若已定义 x和 y为 double类型,则表达式 “x=1, y=x+3/2”的值 是 ( )。 ( A) 1 ( B) 2 ( C) 2 ( D) 2.5 20 已知
7、a、 b、 c为整型变量,若从键盘输入 5空格 6空格 7回车,使 a的值为 5, b的值为 6, c的值为 7,则下列选项中正确的输入语句是 ( )。 ( A) scanf (“%3d%3d%3d“,a,b,C); ( B) scanf (“%d%d%d“,a,b,C); ( C) scanf (“%d%d%d“, ( D) scanf (“%d%d%d“, 21 执行下面程序的正确结果是 ( )。 main() float a=1.9; switch (a) case 0: printf(“0000“); case 1: printf(“1111“); case 2:printf(“333
8、3“); printf(“%f“, a); ( A) 1.9 ( B) 111133331.9 ( C) 33331.9 ( D) 1111233331.9 22 若 x、 y、 z、 m均为 int型变量,则 执行下面语句后 m的值是 ( )。 m=1; x=2; y=3; m=(m x) ? m : x; m=(m y) ? m : y; m=(m y) ? m : z; ( A) 1 ( B) 2 ( C) 3 ( D) 4 23 实型数据在计算机中表示的方法有 ( )。 ( A)双精度型和单精度型 ( B)小数形式和 ASCII码法 ( C) BCD码法和指数形式 ( D)小数形式和指
9、数形式 24 C语言中各种基本数据类型的存储空间长度排列为 ( )。 ( A) charlongintfloatdouble ( B) doublefloatlongintchar ( C) charintlongfloatdouble ( D) floatintlongchardouble 25 若有如下程序: main() int a, b, C, m, n, k; m=n=k=0; a=-1;b=2; C=3; if(c 0)m=a+b; if(a =0) if(b 0) if(c =0)n=a=b; else if(c 0)n=a-b; else k/=c; printf(“%d, %
10、d, %d, “, m, n, k); 则程序运行后的输出结果是 ( )。 ( A) 1, 0, 0 ( B) 2, -3, 3 ( C) 1, -3, 3 ( D) 1, 0, 3 26 对下述程序,正确的判断是 ( )。 main() int a, b; scanf(“%d“, ( C) intc2=1, 2, 3, 4; ( D) int d32=1, 2, 34; 40 有以下程序: void fun(char *c, int d) *c=*c+1; d=d+1; printf(“%c, %c, “, *c, d); main() char a=A, b=a; fun( main()
11、printf(“%1dn“,fun(3); ( A) 1 ( B) 2 ( C) 3 ( D) 4 48 执行下列程序的输出结果是 ( )。 main() union int b; char c2; y; y.b=0x4142; printf(“%c, %c“, y.c1, y.c0); ( A) 65, 66 ( B) a, b ( C) B, A ( D) A, B 49 下述程序的输出结果是 ( )。 # include stdio.h int fun( int a) int b=0; static int c=3; b+, c+; return a+b+c; void main() i
12、nt x=2, i; for(i=1; i 3; i+) printf(“%d“, fun(x); ( A) 56 ( B) 67 ( C) 78 ( D) 89 50 以下对枚举类型名的定义中正确的是 ( )。 ( A) enum a=one,two,three; ( B) enum aone=9, two=-1 three=200; ( C) enum a=“one“, “two“, “four“; ( D) enum a“nine“, “two“,“three“; 51 在长度为 n的线性表中查找一个表中不存在的元素,需要的比较次数为【 】。 52 在面向对象的程序设计中,用来请求对象执
13、行某一处理或回答某些信息的要求称为【 】。 53 在结构化分析方法中,用于描述系统中所用到的全部数据和文件的文档称为【 】。 54 在数据库的概念结构设计中,常用的描述工具是【 】。 55 在关系运算中,【 】运算是在给定关系的某些域上进行的运算。 56 表达式 8/4*(int)2.5/(int)(1.25*(3.7+2.3)的值是 _。 57 下面程序 main() int x,y,m,n; x=5;y=8; m=+x,x; n=y+y+; printf(“%d,%d,%d,%d“,x,y,m,n); 运行后, x, y, m, n的值是 _。 58 设 x、 y、 z为整型变量,且 x=
14、2, y=3, z=4,当执行以下语句后, x的值是_。 x*=(y+)+(-z); 59 以下程序的运行结果是 _。 struct Node int x; char ch; ; fun(struct Node*sn) static k=1; sn- x=20; Sn- ch=a+k+; main() int i; static struct Node st=10,a; for(i=0;i 2;i+) fun(break; case 2:x+;y+;break; printf(“x=%d,y=%dn“,x,y); 运行程序的输出结果是 _。 61 下列程序的输出结果是 _。 main() ch
15、ar a=“ABCDEFG“; char *cp=后, *p指向的字符串是 _。 63 以下程序的运行结果是 _。 struct exmpchar name 10; int number; ; struct exmp test3=“WangXi“,1,“QiYu“,2,“HuHua“,3; main() printf(“%c,%sn“,test0.name1,test2.name+3); 64 以下程序的输出结果是 _。 main() char s=“abcdef“; s3=0; printf(“%sn“,s); 65 程序如下: main() int i=4; printf(“%d“,-+i
16、); 该程序执行后的输出结果以及 i的值分别是 _ 、 _。 66 以下程序的功能是:从键盘输入一字符串,要求将每个单词中的第一个字母改成小写 (如果原来已是小写字母,则不变 ),然后输出转换结果,补足所缺语句。 main() char str200; int i=0; while(_=getchar()!=n); stri-1)=0; for(i=0;stri!=0;i+) if(stri-1= i=0) 国家二级( C语言)笔试模拟试卷 102答案与解析 1 【正确答案】 C 【试题解析】 算法的执行效率与算法执行过程中所需基本运算的执行次数有关,选项 A错误;算法的空间复杂度是指执行这个
17、算法所需要的内存空间规模,选项B错误;选项 C正确,故选项 D不正确。 2 【正确答案】 D 【试题解析】 栈是一种特殊的线性表,其插入与删除运算都只在线性表的一端进行。在这种线性表的结构中,一端封闭,不允许插入与删除元素:另一端开口,允许插入与删除元素。在栈中不仅能插入数据,也能删除数据,选项 A与选项 B都错。栈是后进先出的线性表,而不是先进先出的线性表,选项 C的说法错误,选项 D正确。 3 【正确答案】 B 【试题解析】 二叉树中,叶子结点总比度为 2的结点多 1个,本题二叉树有 70个叶子结点,所以有 70-1即 69个度为 2的结点。总结点数为:度为 2的结点数 +度为 1的结点数
18、 +度为 0的结点数 =69+80+70=219。 4 【正确答案】 D 【试题解析】 在线性表的链式存储结构中,各数据结点的存储位置不连续,且各结点在存储空间中的位置关系与逻辑关系也不一致。在线性链表中,各数据元素之间的前后关系是由各结点的指针域来指示的。所以,选项 D正确。 5 【正确答案】 D 【 试题解析】 选项 A、选项 B、选项 C属于面向对象方法,选项 D属于面向过程方法。 6 【正确答案】 B 【试题解析】 结构化分析是使用数据流图 (DFD)、数据字典 (DD)等工具,宋建立一种新的、称为结构化规格说明的目标文档。数据流程图是在需求分析阶段使用的。 7 【正确答案】 D 【试
19、题解析】 数据结构设计、给出系统模块结构以及定义模块算法都属于设计阶段,定义需求并建立系统模型属于分析阶段。 8 【正确答案】 C 【试题解析】 在关系模型的数据语言中,有这两类运算:常规的集合运算 (并、交、差、笛卡尔积等 ),将关系看成是元组的集合,主要是从二维表的行的方向来进行的;专门的关系运算,如投影、选择、连接等,主要是从二维表的列的方向来进行运算。 9 【正确答案】 A 【试题解析】 数据库设计包括两个方面的设计内容:概念设计和逻辑设计。 10 【正确答案】 A 【试题解析】 内模式能够给出数据库物理存储结构与物理存取方法;外模式是用户的数据视图:概念模式是全体用户公共数据视图;没
20、有逻辑模式。 11 【正确答案】 D 【试题解析】 C语言在编译时要检查其语法是否合 法,故选项 A错误。 C语言的子程序由函数组成,过程不是 C语言的组成部分,显然过程和函数并不是 C语言的子程序的两种不同形式,故选项 B错误。在 C语言中明确规定:不能嵌套定义,即不能在函数内部定义函数,故选项 C错误。一个完整的 C程序有且仅有一个主函数 (main()函数 ),其他函数都是在执行 main()函数时,通过函数调用或嵌套调用来执行的,都是外部函数,故选项 D正确。所以, 4个选项中选项 D符合题意。 12 【正确答案】 C 【试题解析】 选项 A中 for和 case为 C语言中的保留字,
21、不能作为用户标志符,故 A错误。选项 B中的 4d其开头的第一个为数字,而在 C语言中规定,第一个字符必须为字母或者下划线,故 B错误;选项 D中 void为 C语言中的保留字,不能作为用户标志符,故 D错误。所以, 4个选项中选项 C符合题意。 13 【正确答案】 C 【试题解析】 C语言中,以 0开头的整型常量表示八进制数,而八进制数只能由O 7八个字符组成,选项 C中出现了数字 9是错误的。故应该选择 C。 14 【正确答案】 D 【试题解析】 在 C语言中, double类型数据占 8个字节、 long型占 4个、unsigned int和 int型一样占 2个、 char型占 1个。
22、所以本题应该选择 D。 15 【正确答案】 B 【试题解析】 选项 A中 #sub含有非法字符 #、 break属于 C语言关键字都不是合法标识符;选项 C中 3a以数字开头不是合法标识符;选项 D中的 auto是 C语言关键字不属于合法标识符;故应该选择 B。 16 【正确答案】 C 【试题解析】 本题中的字符串出现了 5个转义字符 、 、 123、 xAB、 t和 4个字符 a、 b、 c、 d,所以字符串的长度是 9,选项 C符合题意。 17 【 正确答案】 B 【试题解析】 选项 A的结尾没用 ; ,所以不是一条语句:选项 C中的表达式不会改变任何变量的内容,也不是合法的赋值语句;选项
23、 D有语法错误, int应该加上括号。所以, 4个选项中只有选项 B符合题意,运行后 d的内容被减一。 18 【正确答案】 C 【试题解析】 (i=4,j=16,k=32)是逗号表达式,它的值为表达式 k=32的值即 32。 19 【正确答案】 C 【试题解析】 在表达式中 3/2是一个整型表达式,它的运算结果应该为整型,值为 1。当变量 x与其相加时转换为双精度实 型即 y=1.000000+1.000000=2.000000。所以, 4个选项中选项 C符合题意。 20 【正确答案】 C 【试题解析】 通过 scanf()函数从键盘读入数据时,接收参数的使用变量的地址值,所以选项 A和 B是
24、错误的。选项 D要求输入时以逗号间隔,故按题目要求的输入方式不能正确读取到 3个数,也是错误的。所以正确答案是 C。 21 【正确答案】 B 【试题解析】 switch语句只接受 int型变量,如果不是则隐式转换为 int,由于 C语言中 float到 int的转换是截尾取整,故在 switch中从 case 1:标号处开始执行,首先输出 4个 1。此时又因为 case 2:之前并没有 break;之类的跳转语句,所以 case 2:标号处的语句也被执行,输出 4个 3。最后以默认的浮点数格式输出变量 a,变量 a在 switch语句中并未被改变,故最后输出为 1.900000,所以应该选择
25、B。 22 【正确答案】 A 【试题解析】 ?:运算符首先执行 ?之前的表达式,如果表达式的值为真,则返回 ?和:之间的表达式的值,否则返回:之后的表达式的值。本题中 m比 x和 y都要小,所以, 3个表达式都没有改变 m的值,故应 该选择 A。 23 【正确答案】 D 【试题解析】 实型数据有两种表示形式: 小数形式。它由数字和小数点组成(注意必须有小数点 )。 123、 123.0、 0.0都是小数形式。 指数形式。如 123e3或123E3都代表 123*103(上标 )。注意,字母 e(或 E)之前必须有数字,且 e后面的指数必须为整数。如 e3、 3.le3.5、 .e3、 e等都不
26、合法。所以,本题应该选择 D。 24 【正确答案】 C 【试题解析】 在 Turbo C 2.0环境中, char占 1个字节、 int占 2个字节、 long占 4个字 节、 float占 4个字节、 double占 8个字节。所以本题的正确答案为 C。 25 【正确答案】 A 【试题解析】 本题首先声明了 6个 int型变量,然后分别让 m、 n、 k为 0, a为 -1, b为 2, c为 3。接下来因为 c O为真,故执行子句 “m=a=b; ”,结果使 m的值变为 1;然后判断 a是否 =0,结果也为真,进入大括号里面;由于 b O为真,再判断 c =0,为假。所以子句 “n=a=b
27、; ”没有执行,跳出大括号。而后面的else if语句和 else语句因为大括号的原因,使其对应第二个 if语句,而第二个 if语句的 条件已满足 (进入大括号之前 ),所以这两条 else语句的子句不被执行,故最后输出结果为 1, 0, 0,所以应该选择 A。 26 【正确答案】 A 【试题解析】 本题中的 else语句和 if语句之间有两条语句,并且未用大括号括起来,故编译通不过。所以应该选择 A。 27 【正确答案】 C 【试题解析】 在程序中,首先定义了一个整型变量 x并赋初值为 3,接着执行do-while循环。在 do-while循环中,先执行循环体,即执行 printf语句 (输
28、出表达式 X-=2;的值,这个表达式相当于 x=x-2=3-2=1,所以第一次输出值为 1),接着判断 while后面括号里的条件表达式是否为真。这个表达式 !(-X)等价于 !(0)为真(这里 -X是先自减,再进行判断,此时 x自减 1,值为 0),继续执行循环体,即执行 printf语句 (输出表达式 x-=2;的值,这个表达式相当于 x=x-2=0-2=-2,所以第二次输出值为 -2),接着判断 while后面括号里的条件表达式是否为真,显然,表达式 !(-x)等价于 (!(-3)为假,退出循环,所以其最终的输出结果为 1-2。所以, 4个选项中选项 C符合题意。 28 【正确答案】 B
29、 【试题解析】 本题是一个双重循环,而外循环的循环条件 i O在刚开始的时候就不满足 (i的初值为 4),所以循环体一次也不会执行。故应该选择 B。 29 【正确答案】 B 【试题解析】 C语言规定:在定义函数时,若其返回值类型为 int,则可以默认。所以 4个选项中 B正确。 30 【正确答案】 B 【试题解析】 程序中定义了数组 a10,则其元素的下标范围为 0 9,而 B选项中的 a10所表示的元素已经超出 a数组元素的范围,故应该选择 B。 31 【正确答案】 B 【试题解析】 c语言规定,数组元素的下标是从零开始的。本题首先定义了一个二维数组 aa并按行赋初值,定义了一个变量 s用于
30、求和。 for循环执行了 4次分别把数组元素 aa01、 aa11、 aa211和 aa31的值 (2, 6, 9, 2)加到变量 s中, s的值为 19,最后输出的 s的值为 19。所以 4个选项中 B正确。 32 【正确答案】 A 【试题解析】 程序中首先以字符串常量定义并初始化了一个字符数组 a,此时数组 a包含 5个元素 1, 2, 3, 4, 0,然后定义了一个变量 t,并初始化为0。接下来是一个 for循环,循环变量 i从 0开始每次递增 2,循环条件 ai是一个数字字符。因为 a0、 a2分别是数字字符 1、 3而 a4不是,所以循环体执行了两次,第一次执行前 t为 0,执行后
31、t=10*t+ai-0=10*0+1-0=1,所以第二次执行结果为 t=10*t+ai-0=10*1+3-0=13。程序运行后的输出结果是 13,本题选A。 33 【正确答案】 B 【试题解析】 本题中函数 swapl()是传递的地址。所以对该形参 c的改变将影响实参,分析可 知该函数的作用,是使数组 c的第一个元素和第二个元素的值互换。主函数中调用该函数将 a作为实参传递给形参 c,故执行该函数后 a的第一个元素和第二个元素的值将交换。分别为 5和 3。函数 swap2()是值传递的,所以该函数执行后对数组 b将没有任何改变,此时该数组的第一个和第二个元素依然为 3和 5,因此最后的输出为
32、5、 3、 3和 5,所以, 4个选项中选项 B符合题意。 34 【正确答案】 A 【试题解析】 本题程序一开始定义了一个字符数组 ss,并用一个字符串常量初始化之。然后使用 gets()函数从键盘缓冲区读入一个字符 串 “ABC“,此时 gets()将改变数组的前 4个元素为 A, B, C, 0。接下来的 strcat()函数将一个字符串连接到字符串 ss之后,因为 ss3被 gets()设置为 0(字符串结束标志 ),故 strcat()从 ss3开始将 “6789“依次写入 ss3、 ss4、 ss5、 ss6,并将一个 0写入 ss7。所以输出结果是 ABC6789,故应该选择 A。
33、 35 【正确答案】 A 【试题解析】 虽然全局变量的作用域是整个程序,但如果某个函数或语句块中又声明了 同名的局部变量,则全局变量被屏蔽,在该函数或语句块中所用到的该变量都是那个同名的局部变量。所以,本题程序第二行定义的全局变量 int x=1;可完全忽略,故程序输出结果为 2, 2,故应该选择 A。 36 【正确答案】 D 【试题解析】 因为 0是字符串结束标记,而 fun函数中的第一个 while循环从字符串 a的第一个字符开始,直到碰到 0时结束循环,所以其作用就是将字符串 a的长度记录到变量 num中。而第二个 while循环从 b0开始,将字符串 b中的字符依次复制到字符串 a的结
34、尾处,直到 bn为假 ,即 bn为字符串结束标志 0时,所以最后返回的 num保存了字符串 a和 b的长度之和。故应该选择 D。 37 【正确答案】 C 【试题解析】 带参数的宏展开是在编译时进行的,是一种纯粹文字性的替换过程。本题定义了一个带参数宏 #define ARE(x) PI*x*x,在 printf()函数中使用了这个宏,展开过程为: ARE(r+1)= PI*r+1*r+1= 3.1415*r+1*r+1,其结果为3.1415*2+1*2+1=6.283+2+1= 9.283,由于输出格式限定为两位小数,故输出 结果为 9.28,应该选择 C。 38 【正确答案】 C 【试题解析
35、】 如果没有大括号, else总是与它上面的最近的 if配对。所以本题中的 elseif(ok2)是与 if(!ok1)配对的,首先因为 a b成立所以进一步判断 b!=15也成立,再进一步判断 !ok1,为假,不执行子句 X=-1;继续判断 ok2是否为真, ok2亦为假,故子句 x=10;也不执行,最后让 x=1;输出 x,所以结果应该选择 C。 39 【正确答案】 D 【试题解析】 选项 A中,数组的长度使用了变量 N,而在 C语言中是不能用变量来定义 数组的长度的,故选项 A错误。在 C语言中,给二维数组赋初值时,行数不能超过定义的行数,每行的初值个数不能超过定义时的列数,故选项 B错
36、误。选项 C数组的第二维下标默认,而在 C语言中,数组的第二维下标不能默认,故选项 C错误。所以, D选项为所选。 40 【正确答案】 D 【试题解析】 程序中定义了两个字符型变量 a和 b,并分别赋初值为 A和 a,然后调用函数 fun(),将 b的地址和 a值作为实参。在函数 fun()中第一个参数是传递地址,故在调用函数 fun()中对参数做的修改 (即将 b值加一 )将影响字符 型变量的值 (变为 b),函数 fun()第二个参数是传值的,故在调用函数 fun()对第二个参数做的修改不影响字符型变量 a(即 a的值仍为 A),所以在 fun()函数中输出的 d为b, B,接着在主函数中
37、,输出 a, b,然后退出 fun()函数,接着执行后面的语句,输出 A, b。所以最后输出为 b, B, A, b。 4个选项中 D正确。 41 【正确答案】 B 【试题解析】 因为在循环中存在一条这样的语句 “if(n 4)break; ”,所以循环变量 n递增到 4的时候循环会被强行结束。故一共循环了 5次,每次 n的值分别为0、 1、 2、 3、 4。应该选择 B。 42 【正确答案】 A 【试题解析】 本题首先定义了一个二维数组,然后将数组名作为参数传递给子函数 sub(),在子函数中使用了一个循环,循环变量 i从 0递增到 n(n为 2),即循环了 3次,依次输出数组的 a02、
38、a12、 a22三个元素,所以程序运行后输出的结果是 369,应该选择 A。 43 【正确答案】 C 【试题解析】 fseek()函数可以自由的改变文件位置指针的位置,即可以自由读写文件中的任何位置,故选项 A、 B、 D都是错误的,应该选择 C。 44 【正确答案】 B 【试题解析】 选项 A和 C在字符串中用到特殊字符 ,该字符在字符串中用作转义字符的开始,所以不能单独使用,若要在字符串常量显示该字符可使用转义字符 ,故选项 A和 C不正确。选项 D中 fopen()函数的第二个参数 w表示以只写的方式打开文件,不符合题意,故应该选择 B。 45 【正确答案】 B 【试题解析】 本题定义了
39、 个子函数 sub(),因为 sub()的形参为 int型变量,而不是指针,即为传值调用,所以 sub()函数不会改变实参 x、 y、 z的值,故最后输出 结果为 6,应该选择 B。 46 【正确答案】 D 【试题解析】 本题是以结构体指针的方式防问结构体数组中的元素。 main()函数之前声明了一个结构体,并在声明同时定义了一个全局结构体数组 stu3。主函数中,第一行定义了一个该结构体的指针 t,然后让 t指向 stu,即 t指向的是数组stu的第一个元素。选项 A提取的是数组第一个元素的 num成员,值为 10,不符合题意。选项 B使用了一个后缀自增运算符,使 t指向第二个元素,但 t+
40、表达式返回的还是第一个元素的指针,故结果与选项 A相同,不符合题意,选项 C语法错误 编译不会通过。故应该选择 D。 47 【正确答案】 A 【试题解析】 本题的 fun函数是一个递归函数,当参数 n为 1或 2时返回 2,否则返回 n-fun(n-1)。递推下来就是 n-fun(n-1)= n- (n-1)-fun(n-2)= n-(n-1)+(n-2)-fun(n-3)= 直到 fun()函数的参数等于 1或 2,故 fun(3)=3-fun(2)=3-2=1。所以答案是 A。 48 【正确答案】 D 【试题解析】 共用体中的成员是共享同一内存区域的,另外,整数在内存中的表示是低 字节在前
41、高字节在后,所以给 y.b赋值 0x4142,等价于给 y.c0赋值0x42(字符 B), y.c1赋值 Ox41(字符 A)。所以本题输出的结果是 A, B。故应该选择 D。 49 【正确答案】 C 【试题解析】 本题主函数中的 for循环会循环两次,即输出连续两次调用 fun(2)的返回值。在 fun()函数中定义了一个静态变量 c,第一次调用 fun()时 c被初始化为 3,然后自增为 4,最后输出 a+b+c为 2+1+4=7。由于静态变量的生存周期为整个程序执行周期,所以第二次调用 fun()时 c的值为 4,然后自 增为 5,故最后输出a+b+c为 2+1+5=8。所以程序的输出结
42、果是 78,应该选择 C。 50 【正确答案】 B 【试题解析】 枚举类型的定义类似于结构体和共用体,所以选项 A和 C不正确。大括号中的枚举元素应该使用合法标识符来定义,而不是字符串常量,所以选项 D不正确。故应该选择 B。 51 【正确答案】 n 【试题解析】 在长度为 n的线性表中查找一个表中不存在的元素,需要的比较次数为 n。 52 【正确答案】 消息 【试题解析】 消息是一个实例与另一个实例之间传递的信息,它请求对象执行某一处理或回答某一要求的信息,它统一了数据流和控制流。 53 【正确答案】 数据字典 【试题解析】 在结构化分析方法中,用于描述系统中所用到的全部数据和文件的文档称为
43、数据字典。 54 【正确答案】 E-R图 【试题解析】 E-R图是设计概念模型的有力工具。 55 【正确答案】 投影 【试题解析】 在关系运算中,投影运算是在给定关系的某些域上进行的运算。 56 【正确答案】 0。 【试题解析】 表达式中将实型常量 2.5和算术表达式 1.25*(3.7+2.3)的值强制转换为 整型后参与运算。 57 【正确答案】 6,9,6,16。 【试题解析】 赋值语句 m=+x, x;是将逗号表达式的值赋给 m, x和 m的值都是 6,赋值语句 n=y+y+;是将 y+y的值 16赋给 n,再执行 y的自加运算, y的值变为 9。 58 【正确答案】 12。 【试题解析
44、】 表达式 x*=(y+)+(-z)相当于先进行 z的自减运算,再执行x=x*(y+z),最后 y自加。因此,变量 x的值为 12, y和 z的值分别是 4和 3。 59 【正确答案】 20,c。 【试题解析】 函数 fun的功能是给 结构体指针变量所指的结构体变量的各成员赋值,主函数两次调用函数 fun,第一次调用,实参 st两个成员的值是 20和字符b,调用结束时,静态局部变量 k没有释放,值为 2:第二次调用,实参 st两个成员的值是 20和字符 c,调用结束时,静态局部变量 k没有释放,值为 3;因此,输出结果是 20和 c。 60 【正确答案】 x=1, y=0。 【试题解析】 本题程序的主体部分是 switch语句的嵌套结构,当变量 a的值为 0时,在第一层 switch-case语句中,没有匹配的 case分支。因此, x和 y的值没有变化,仍然是 1和 0。 61 【正确答案】 GFEDCB。 【试题解析】 开始指针 cp指向字符串结束标志,在循环中, cp依次向前移动,当打印出第二个字符后, cp指向第一个字符,循环判断条件不满足,退出循环,因此,只打印出第一个字符以后的字符的逆序列。