1、国家二级( C语言)笔试模拟试卷 196及答案与解析 1 下列关于栈的描述中错误的是 ( )。 ( A)栈是先进后出的线性表 ( B)栈只能顺序存储 ( C)栈具有记忆作用 ( D)对栈的插入和删除操作中,不需要改变栈底指针 2 下列对于线性链表的描述中正确的是 ( )。 ( A)存储空间不一定是连续,且各元素的存储顺序是任意的 ( B)存储空间不一定是连续,且前件元素一定存储在后件元素的前面 ( C)存储空间必须连续,且各前件元素一定存储在后件元素的前面 ( D)存储空间必须连续, 且各元素的存储顺序是任意的 3 对长度为 n的线性表排序,在最坏情况下,比较次数不是 n(n-1)/2的排序方
2、法是( )。 ( A)快速排序 ( B)冒泡排序 ( C)直接插入排序 ( D)堆排序 4 一颗二叉树中共有 70个叶子节点与 80个度为 1的节点,则二叉树的总节点数为( )。 ( A) 219 ( B) 221 ( C) 229 ( D) 231 5 软件调试的目的是 ( )。 ( A)发现错误 ( B)改正错误 ( C)改善软件的性能 ( D)验证软件的正确性 6 在软件设计中,不属于过程设计工具的是 ( )。 ( A) PDL(过程设计语言 ) ( B) PAD图 ( C) N-S图 ( D) DFD图 7 在面向对象方法中,实现信息隐蔽是依靠 ( )。 ( A)对象的继承 ( B)对
3、象的多态 ( C)对象的封装 ( D)对象的分类 8 数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和 ( )。 ( A)编码设计 ( B)测试阶段 ( C)运行阶段 ( D)物理设计 9 设有如下关系表: R S T A B C A B C A B C 1 1 2 3 1 3 1 1 2 2 2 3 2 2 3 3 1 3 则下列操作中正确的是 ( )。 ( A) T=RS ( B) T=R S ( C) T=RS ( D) T=R/S 10 数据库系统的核心是 ( )。 ( A)数据模型 ( B)数据库管理系统 ( C)数据库 ( D)数据库管理员 11 以下叙述中错误的是 ( )。
4、 ( A)算法正确的程序最终一定会结束 ( B)算法正确的 程序可以有零个输出 ( C)算法正确的程序可以有零个输入 ( D)算法正确的程序对于相同的输入一定有相同的结果 12 对于一个正常运行的 C语言程序,以下叙述中正确的是 ( )。 ( A)程序的执行总是从 main函数开始,在 main函数结束 ( B)程序的执行总是从程序的第一个函数开始,在 main函数结束 ( C)程序的执行总是从 main函数开始,在程序的最后一个函数中结束 ( D)程序的执行总是从程序的第一个函数开始,在程序的最后一个函数中结束 13 以下四个程序中,完全正确的是 ( )。 ( A) #include std
5、io.h ( B) #include stdio.h main(); main() /*programming*/ /*/programming/*/ printf(“programming!n“); printf(“programming!n“); ( C) #include stdio.h ( D) include stdio.h main() main() /*/*programming*/*/ /*programming*/ printf(“programming!n“); printf(“programming!n“); 14 当变量 c的值不为 2、 4、 6时,值也为 “真 ”的
6、表达式是 ( )。 ( A) (c=2)|(c=4)|(c=6) ( B) (c =2 c =6)|(c!=3)|(c!=5) ( C) (c =2 c =6) !(c%2) ( D) (c=2 c =6) (c%2!=1) 15 有以下程序: main() int i=1, j=2, k=3; if(i+=l (+j=3|k+=3) printf(“%d%d%dn“, i,j,k): 程序运行后的输出结果是 ( )。 ( A) 1 2 3 ( B) 2 3 4 ( C) 2 2 3 ( D) 2 3 3 16 有以下程序: main() int k=5, n=0; while(k 0) sw
7、itch(k) default:break; case 1:n+=k; case 2: case 3:n+=k; k-; printf(“%dn“, n); 程序运行后的输出结果是 ( )。 ( A) 0 ( B) 4 ( C) 6 ( D) 7 17 以下不构成无限循环的语句或者语句组是 ( )。 ( A) n=0; ( B) n=0; do+n; while(n =0); while(1)n+ ( C) n=10; ( D) for(n=0,i=1;i+)n+=i; while(n); n-;) 18 当用户要求输入的字符串中含有空格时,应使用的输入函数是 ( )。 ( A) scanf(
8、) ( B) getchar() ( C) gets() ( D) getc() 19 数字字符 0的 ASC 值为 48,若有以下程序: main() char a=1, b=2; printf(“%c, “, b+); printf(“%dn“, b-A); 程序运行后的输出结果是( )。 ( A) 3,2 ( B) 50,2 ( C) 2,2 ( D) 2,50 20 有以下程序: #include stdio.h int f(int x) int y; if(x=0|x=1)return(3); y=x*x-f(x-2); return y; main() int z; z=f(3);
9、 printf(“%dn“, z); 程序的运行结果是 ( )。 ( A) 0 ( B) 9 ( C) 6 ( D) 8 21 以下不能正确计算代数式 值的 C语言表达式是 ( )。 ( A) 1/3*sin(1/2)*sin(1/2) ( B) sin(0.5)*sin(0.5)/3 ( C) pow(sin(0.5), 2)/3 ( D) 40546.0*pow(sin(1.0/2), 2) 22 设已有定义: float x;则以下对指针变量 P进行定义且赋初值的语句中正确的是 ( )。 ( A) float*p=1024; ( B) int*p=(float)x; ( C) float
10、 p= x; ( D) float*p= x; 23 已定义以下函数: int fun(int*p) return*P; ) fun函数返回值是 ( )。 ( A)不确定的值 ( B)一个整数 ( C)形参 P中存放的值 ( D)形参 P的地址值 24 有以下程序: void f(int b) int i; for(i=2; i 6; i+)bi*=2; main() int a10=1,2,3,4,5,6,7,8,9,10,i; f(A); for(i=0; i 10;i+)printf(“%d,“, ai); 程序运行后的输出结果是 ( )。 ( A) 1,2,3,4,5,6,7,8,9,
11、10, ( B) 1,2,6,8,10,12,7,8,9,10 ( C) 1,2,3,4,10,12,14,16,9,10, ( D) 1,2,6,8,10,12,14,16,9,10, 25 有以下程序: void fun1(char*p) char*q; q=P; while(*q!=0) (*q)+;q+; main() char a=“Program“), *p; p=a3;funl(p);printf(“%sn“,A); 程序执行后的输出结果是 ( )。 ( A) Prohsbn ( B) Prphsbn ( C) Progsbn ( D) Program 26 有以下程序: voi
12、d sum(int a) a0=a-1+a1; main() int a10=1,2,3,4,5,6,7,8,9,10; sum( a2); printf(“%dn“, a2); 程序运行后的输出结果是 ( )。 ( A) 6 ( B) 7 ( C) 5 ( D) 8 27 若有定义: int a23;,以下选项中对 a数组元素正确引用的是 ( )。 ( A) a2!1 ( B) a23 ( C) a03 ( D) a1 2!1 28 有以下程序: #include stdio.h #include string.h void fun(char s10, int n) char t;int i
13、,j; for(i=0;i n-1;i+) for(j=i+1;j n;j+) /*比较字符串的首字符大小,并交换字符串的首字符 */ if(si0sj0)t=si0;si0=sj0;sEj0=t; main() char s510=“bcc“,“bbcc“,“xy“,“aaaacc“,“aabcc“); fun(ss,5);printf(“%s,%sn“,ss0,ss4); 程序的运行结果是 ( )。 ( A) xy,aaaacc ( B) aaaacc,xy ( C) xcc,aabcc ( D) acc,xabcc 29 有以下程序: main() char s=“159“,*P; P=
14、s; printf(“%c“,*P+);printf(“%c“,*P+); 程序运行后的输出结果是 ( )。 ( A) 15 ( B) 16 ( C) 12 ( D) 59 30 若要求从键盘读入含有空格字符的字符串,应使用函数 ( )。 ( A) getc() ( B) gets() ( C) getchar() ( D) scanf() 31 程序中若有如下说明和定义语句: char fun(chat*); main() char*s=“one“, a5=0, (*f1)()=fun, ch; 以下选项中对函数 fun的正确调用语句是 ( )。 ( A) (*f1)(A); ( B) *f
15、1(*s); ( C) fun( A); ( D) ch=*f1(s); 32 以下叙述中错误的是 ( )。 ( A) C语言程序中的 #include和 #define行均不是 C语句 ( B)除逗号运算符外,赋值运算符的优先级最低 ( C) C语言程序中, j+;是赋值语句 ( D) C语言程序中, +、 -、 *、 /、 %号是算术运算符,可用于整型和实型 数的运算 33 以下叙述中正确的是 ( )。 ( A)预处理命令行必须位于源文件的开头 ( B)在源文件的一行上可以有多条预处理命令 ( C)宏名必须用大写字母表示 ( D)宏替换不占用程序的运行时间 34 有以下程序: struct
16、 Sint n; int a20; ; void f(int*a, int n) int i; for(i=0; i n-1; i+)ai+=i; mainf() int i;struct S s10,2,3,1,6,8,7,5,4,10,9; if(s.a,s.n); for(i=0; i s.n;i+)printf(“%d“,s.ai); 程序运行后的输出结果是 ( )。 ( A) 2,4,3,9,12,12,11,11,18,9 ( B) 3,4,2,7,9,8,6,5,11,10 ( C) 2,3,1,6,8,7,5,4,10,9 ( D) 1,2,3,6,8,7,5,4,10,9 3
17、5 有以下结构体说明和变量定义,如图所示,指针 p、 q、 r分别指向此链表中的三个连续节点。 struct node int data; struct node*next; *P,*q,*r; 现要将 q所指节点从链表中删除,同时要保持链表的连续 , 以下不能完成指定操作的语句是 ( )。 ( A) p- next=q- next; ( B) p- next=P- next- next; ( C) p- next=r; ( D) p=q- next; 36 有以下程序: int fun(int x,int n) static int sum=0, I; for(i=0; i n;i+)sum
18、+=xi; return sum; main() int a=1,2,3,4,5,b=6,7,8,9,s=0; s=fun(a,5)+fun(b,4);printf(“%dn“,s); 程序执行后的输出结果是 ( )。 ( A) 45 ( B) 50 ( C) 60 ( D) 55 37 以下与函数 fseek(fp, OL, SEEK_SET)有相同作用的是 ( )。 ( A) feof(fp) ( B) tell(fp) ( C) fgetc(fp) ( D) rewind(fp) 38 执行以下程序后, test.txt文件的内容是 (若文件能正常打开 )( )。 #includestd
19、io.h main() FILE*fp; char*s1=“Fortran“, *s2=“Basic“; if(fp=fopen(“test.txt“,“wb“)=NULL) printf(“Cant open test.txt filen“);exit(1); fwrite(s1,7,1,fp);/*把从地址 s1开始的 7个字符写到 fp所指文件中 */ fseek(fp,0L,SEEK_SET);/*文件位置指针移到文件开头 */ fwrite(s2,5,1,fp); fclose(fp); ( A) Basican ( B) BasicFortran ( C) Basic ( D) F
20、ortranBasic 39 某二叉树中度为 2的节点有 18个,则该二叉树中有 ( )个叶子节点。 40 按 “先进后出 ”原则组织数据的数据结构 是 ( )。 41 软件需求规格说明书应具有完整性、无歧义性、正确性、可验证性、可修复性等特性,其中最重要的是 ( )。 42 程序测试分为静态分析和动态测试。其中 ( )是指不执行程序,而只是对程序文本进行检查,通过阅读和讨论,分析和发现程序中的错误。 43 在关系数据库中,把数据表示成二维表,每一个二维表称为 ( )。 44 设变量已正确定义为整型,则表达式 n=i=2,+i,i+的值为 ( )。 45 以下程序运行后的输出结果是 ( )。
21、main() int x=0210;printf(“%xn“,x); 46 以下程序运行后的输出结果是 ( )。 main() int a=3,b=4,c=5,t=99; if(b a a C)t=a;a=c;c=t; if(a c b C)t=b;b=a;a=t; printf(“%d%d%dn“,a,b,A); 47 当执行以下程序时,输入 1234567890回车,则其中 while循环 体将执行( )次。 #include stdio.h main() char ch; while(ch=getchar()=0)printf(“#“); 48 以下程序的运行结果是 ( )。 int k
22、=0; void fun(int m) m+=k;k+=m;printf(“m=%dn k=%d“,m,k+); main() int i=4; fun(i+);printf(“i=%d k=%dn“,i,k); 49 以下程序的输出结果是 ( )。 #include stdlib.h main() char*s1,*s2,m; s1=s2=(char*)malloc(sizeof(char); *s1=15; *s2=20; m=*s1+*s2: printf(“%dn“,m); 50 以下程序运行后的输出结果是 ( )。 int f(int a,int n) if(n =1)return
23、f(a,n-1)+an-1; else return 0; main() int aa5=1,2,3,4,5),s; s=f(aa,5);printf(“%dn“,s); 51 当运行以下程序时,输入 abcd,程序的输出结果是: ( )。 insert(char str) int i; i=strlen(str); while(i 0) str2*i=stri;str2*i-1=*;i-; printf(“%sn“,str); main() char str40; scanf(“%s“,str);insert(str); 52 以下程序中函数 huiwen的功能是检查一个字符串是否是回文,当
24、字符串是回文时,函数返回字符串: yes!,否则函数返回字符串: no!,并在主函数中输出。所谓回文即正向与反向的拼写都一样,例如: adgda,请填空。 #include string.h char*huiwen(char*str) char*p1,*p2;int i,t=0; p1=str;p2=( ); for(i=0;i =strlen(str)/2;i+) if(*p1+!=*p2-)t=1;break; if(t=0)return(“yes!“); else return(“no!“); main() char str50; printf(“Input:“);scanf(“%s“,
25、str); printf(“%sn“,huiwen(str); 53 以下程序运行后的输出结果是 ( )。 struct NODE int k; struct NODE*link; ; main() struct NODE m5,*p=m,*q=m+4; int i=0; while(p!=q) p- k=+i;p+; q- k=i+;q-; q- k=i; for(i=0;i 5;i+)printf(“%d“,mi.k); printf(“n“); 国家二级( C语言)笔试模拟试卷 196答案与解析 1 【正确答案】 B 【试题解析】 栈是限定在一端进行插入与删除运算的线性表。在栈中,允许插
26、入与删除的一端称为栈顶,不允许插入与删除的另一端称为栈底,对栈的插入和删除操作中 ,不需要改变栈底指针。栈是按照 “先进后出 ”或 “后进先出 ”的原则组织数据的。栈具有记忆作用。栈的存储方式和线性表类似,也有两种,即顺序栈和链式栈。 2 【正确答案】 A 【试题解析】 线性表的链 式存储结构称为线性链表,是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接来实现的。 3 【正确答案】 D 【试题解析】 冒泡排序是一种最简单的交换类排序它通过相邻元素的交换逐步将线性表变成有序。对于长度为 n的线性表,在最坏的情况下,所有的元素正好为逆序,冒泡排序需要经过 n/
27、2遍的从前往后的扫描和 n/2遍的从后往前的扫描,需要比较的次数为 (n-1)+(n-2)+2+1=n(n -1)/2。快速排序也是一种互换类的排序方法,但比冒泡法的速度快,快速排序法的关键 是对线性表的分割,以及对其分割出的子表再进行分割。直接插入排序是将无序列表中的各元素一次插入到已经有序的线性表中,这种排序方法的效率与冒泡排序法相同,最坏的情况下,所有元素正好为逆序,需要比较的次数为 1+2+(n -1)+(n-2)=n(n-1)/2。堆排序属于选择类排序方法,它首先将一个无序序列建成堆,然后将堆顶元素与堆中最后一个元素交换然后将左右子树调整为堆,继续交换元素,直至子序列为空。在最坏的情
28、况下,堆排序需要比较的次数为 ()(nlog2n)。 4 【正确答案】 A 【试题解析】 树的 结点数等于所有结点的度与对应的结点个数乘积之和加 1。对任何一棵二叉树 T,如果其叶子结点数为 n0,度为 2的结点数为 n2,则n0=n2+1,即叶子结点数总是比度为 2的结点数多 1。由于叶子结点个数为 70,则度为 2的结点数为 70-1=69,所以总结点个数为 692+801十 1=219。 5 【正确答案】 B 【试题解析】 软件测试的目的:尽可能地多发现程序中的错误,不能也不可能证明程序没有错误软件测试是一个发现错误而执行程序的过程。软件调试的目的是发现错误的位置,并改正错误。 6 【正
29、确答案】 D 【试题解析】 常用的过程设计 (即详细设计 )工具有以下几种: 图形工具:程序流程图、 N-S(方盒图 )、 PAD(问题分析图 )和 HIPO(层次图 +输入 /处理 /输出图 ); 表格工具:判定表; 语言工具: PDL(伪码 )。 7 【正确答案】 C 【试题解析】 信息隐蔽是通过对象的封装性来实现的。 8 【正确答案】 D 【试题解析】 数据库设计阶段包括:需求分析、概念分析、逻辑设计、物理设计。 9 【正确答案】 B 【试题解析】 并 ( ):关系 R和 S具有相同的关系模式, R和 S的并是由 属于 R或属于 S的元组构成的集合。 10 【正确答案】 B 【试题解析】
30、 数据库管理系统 (DBMS):一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等,是数据库的核心。 11 【正确答案】 B 【试题解析】 一个有效的算法程序必须有一个或一个以上的输出。 12 【正确答案】 A 【试题解析】 在 C语言中,所有函数的定义,包括主函数 main在内,都是平行的。也就是说,在一个函数的函数体内,不能再定义另一个函数,即不能嵌套定义。但是函数之间允许互相调用 也允许嵌套调用,习惯上把调用者称为主函数。调用函数还可以调用自己,称为递归调用。 main函数是主函数,它可以调用其他函数,而不允许被其他函数调用。因此, C程序的执行总是从 ma
31、in函数开始完成对其他函数的调用后返回到 main函数,最后由 main函数结束整个程序。一个 C源程序必须有也只能有一个 main函数。 13 【正确答案】 B 【试题解析】 选项 A中的 main()后面不能直接用分号。选项 C中的注释符使用不正确,编译器会把从第一个 “/*到第一个 */”之间的当作注释,最后一个 “*/”会被作为程序代 码去编译。选项 D中的 include前要加上 #表示是预定义语句。 14 【正确答案】 B 【试题解析】 选项 A表示当变量 C的值为 2、 4、 6中的任意一个时表达式的值为真,不满足条件;选项 B表示,当 C的值不等 3时为真, C的值不等于 5时
32、为真, 2= c =6时为真,可见当 c的值为 2、 4、 6时满足条件, c为其他的值也可满足条件,如 c=8;选项 C表示, 2= c =6并且 c要能被 2整除时表达式的值为真,满足条件的值只有 2、 4、 6;选项 D中的表达式可以转换为选项 C,同样是不满足条件的。 15 【正确答案】 D 【试题解析】 本题的考点是关于 C语言的逻辑表达式的计算规则。对于逻辑表达式 “i+=1 (+j=3|k+=3)”,首先判断 “i+=1”,由于 i初值为 1,“i+=1”为真,同时 i加 1值为 2。由于第一项为真,对于 “ ”运算符,结果取决于后一项 “(+j=3|k+=3)”。而逻辑表达式
33、“(+j=3|k+=3)”计算时,首先判断 “+j=3”,由于 j初值为 2, +j后 j值为 3, “+j=3”为真,对于 “|”运算符不需要判断后一项表达式的结果就可以断定此逻辑表达式 结果为真,因此“k+=3”并没有进行判断, k+也未执行, k仍是初值 3,输出结果应该是 2 3 3。正确选项是 D。 16 【正确答案】 D 【试题解析】 在 switch语句中,若 case语句后没有 break语句,则执行完本层case后会继续执行后面 case中的操作。 k的初值为 5, while条件成立,进入switch(5),执行 default语句,退出 switch,执行 k-后得 4,
34、再进入 while循环,执行 switch(4),退出 switch,再执行 k-后得 3,继续 while循环,执行switch(3), n=n+k=3,再执行 k-后得 2,进入 while循环,执行 case 2,再执行n=n+k=5,然后执行 k-后得 1,最后一次进入 while循环,执行 case1,n=n+k=6,然后继续执行 case 2和 case 3后的语句, n=n+k=7,且执行 k-后得0,此时 while条件不满足,退出循环,输出 n的值为 7。 17 【正确答案】 A 【试题解析】 本题主要考查各种循环语句的掌握情况。选项 A中为 dowhile循环语句,首先执行
35、 do后面的语句 +n;得 n=1, while条件表达式为假, 退出循环。选项 B中, while条件表达式的值始终为 1,条件为真,构成无限循环。选项 C中while(n);语句循环体为空, n的值在循环中一直保持不变,构成无限循环。选项D中, i=1, for语句中条件判断语句为空,永远为真,构成无限循环。 18 【正确答案】 C 【试题解析】 本题考查的重点是输入函数的异同。 scanf()的作用是格式化输入,getchar()的作用是从键盘读字符,等待回车, getc()是从输入流中返同当前文件位置的下一个字符。而要求输入的字符串中含有空格时,应当使用 gets(),因此 ,选项 C
36、是正确的。 19 【正确答案】 C 20 【正确答案】 C 【试题解析】 本题主要考查函数的递归调用。当 x=0或者 x=1时返回值为 3,即f(0)=3, f(1)=3;否则返回值为 x*x-f(x-2)。 f(3)=3*3-f(1)=9-3=6。 21 【正确答案】 A 22 【正确答案】 D 【试题解析】 指针指向的是变量的地址而不是常量,所以选项 A是错误的;选项 B同样是将 float类型变量的值赋给指针而不是地址,所以选项 B也是错误的。定义指针变量前面必须有星号 (*),如果省略 了就变成了把 p定义为实型变量,所以选项 C不正确。 23 【正确答案】 B 【试题解析】 p中存放
37、的是地址值 ,但是 *p间接引用了 p指向的整数值。因此返回一个整数。 24 【正确答案】 B 【试题解析】 本题在调用函数时,实参是数组名也是把数组 a的首地址传递给形参,由条件 i=2且 i 6得出函数将列以 a2开始的 4个元素 (3、 4、 5、 6)进行乘 2操作,结果分别是 a2=6、 a3=8、 a4=10、 a5=12。 a0、 a1、 a6、 a7、a8、 a9的值没有发生变 化。 25 【正确答案】 A 【试题解析】 函数 funl()实现的功能为将实参 p所指的字符串顺序按位加 1,而实参 p通过 “p= a3; ”指向字符串数组 a中的 gram,敞输出结果为 Proh
38、sbn。 26 【正确答案】 A 【试题解析】 在主函数 main()中,语句 “sum( a2); ”把数组元素 a0的地址传递给了 sun函数的形参 a,使得 sum函数中的 “(a+0)”为主函数中 a2的地址,所以 a-1的值为主函数中 a1的值; a1的值为主函数中 a3的伉,故函数 sum中a0=2+4=6,由于此函数中的 a是指向主函数中的 a2,所以 a2的值为 6。 27 【正确答案】 D 【试题解析】 a是一个 2行 3列的二维数组,行下标和列下标都是从 0开始的,数组中的元素为 a00、 a01、 a02、 a10、 a11、 a12,行下标最大值为 1,列下标最大值为
39、2,因此选项 A、 B、 C都是错误的引用。计算选项 D中数组元素的下标后得 a00,为正确的引用。 28 【正确答案】 D 【试题解析】 本题考查的重点是二维 数组的存储。函数 fun()只是对 5个字符串的首字母进行排序,排序后为 “acc”, “abcc”, “by”, “baaacc”, “xabcc”,因此,输出为第 1个和第 5个字符串,选项 D是正确的。 29 【正确答案】 A 【试题解析】 本题的考点是 C语言的数组和指针。数组 s中存放字符串 “159“,p指向 s的首地址。因此语句 “printf(“%c“ , *p+); ”输出的是字符 1,输出后 p加 1指向下一个字符
40、 5,下一个 “printf(“%c“ , *p+); ”输出的是字符 5。因此输出结果应该是 15。正确选项是 A。 30 【正确答案】 B 【试题解析】 函数 getc()是从数据流中读入一个字符。 getchar()从键盘读入一个字符。 scanf()是格式化输入函数,空格字符被用于多个数据输入的分隔符,含有空格的字符串会被截断。 gets()用于字符串的输入,并且以回车键为结束符。 31 【正确答案】 A 32 【正确答案】 D 【试题解析】 在 C程序中,以 #开头的行都称为 “编译预处理 ”行,它不是 C语言本身的组成成分,不能对它们进行直接编译;在运算符优先级表中,逗号运算符的优
41、先级最低,赋值运算符 其次;自加运算表达式 j+等价于赋值语句 j=j+1;求余运算符 %仅用于整型变量。故选项 D错误。 33 【正确答案】 D 【试题解析】 本题的考点是 C语言的预处理。预处理命令行可以出现在源程序的任何位置上,因此选项 A的说法是错误的。源程序的一行上只能出现一条预处理命令,因此选项 B的说法也是错误的。宏名只要是符合要求的标识符都可以,没有规定一定要大写,因此选项 C的说法也是错误的。宏替换在程序编译时,就由编译程序对出现的宏名进行了相应的宏替换,因此宏替换不占用程序的运行时间。选项 D的说法是正确的。 34 【正确答案】 A 35 【正确答案】 D 【试题解析】 本
42、题的考点是链表的指针操作。要想将 q所指节点从链表中删除,同时要保持链表的连续,从图上看,应该将 p- next=r,由于 q- next、 p- next- next都指向 r,因此 p- next=q- next、 p- next=p- next- next同样可以实现指定的操作。因此选项 A、 B、 C都能完成指定操作。而选项 D“p=q- next”只是将指针 p指向了 r,不能完成指定的操作。因此正确选项是 D。 36 【正确答案】 C 【试 题解析】 fun函数中用 static声明的局部变量 sum的值在函数调用结束后不消失而保留原值,即占用的存储单元不释放,在下一次调用该函数时
43、,该变量已有值,就是上一次函数调用结束时的值。 37 【正确答案】 D 【试题解析】 本题的考点是 C语言的文件操作。函数 fseek(fp, 0L,SEEK_SET)的作用是,将文件指针 fp移到相对于文件开始处 (SEEK_SET)位移为 0L的地方,也就是文件的开头。选项 A的 feof(fp)是判断是否读到了文件尾,作用与函数fseek不符。选项 B的 ftell(fp)是 告知文件指针的当前位置,作用与函数 fseek也不符。选项 C的 fgetc(fp)是从文件指针 fp中读入一个字符,作用与函数 fseek也不符。选项 D的 rewind(fp)是将文件指针回绕到文件开始处,作用
44、与函数 fseek(fp,0L, SEEK_SET)相同。 38 【正确答案】 A 39 【正确答案】 19 【试题解析】 对任何一棵二叉树 T,如果其叶子结点数为 n0度为 2的结点数为 n2,则 n0=n2+1,即叶子结点数总是比度为 2的结点数多 1。 40 【正确答案】 栈 【试题解析】 队列是 按照 “先进行出 ”(FIFO)或 “后进后出 ”(LILO)组织数据,栈按照 “先进后出 ”(FILO)或 “后进先出 ”(LlFO)组织数据。 41 【正确答案】 正确性 【试题解析】 软件需求规格说明书是需求分析阶段的最后成果,通过建立完整的信息描述、详细的功能和行为描述、性能需求和设计
45、约束的说明、合适的验收标准,给出对目标软件的各种需求。软件需求规格说明书的特点: 正确性; 无歧义性; 完整性; 可验证性; 一致性; 可理解性; 可追踪性。其中最重要的是正确性。 42 【正确答案】 静态测试 【 试题解析】 软件测试方法包括静态测试和动态测试两种。静态测试包括代码检查、静态结构分析、代码质量度量,不实际运行软件,主要通过人工进行。 43 【正确答案】 关系 【试题解析】 一个关系就是一张二维表。 44 【正确答案】 3 【试题解析】 题目中的表达式为逗号表达式,其运算顺序为从左到右,最后一个表达式的值为该逗号表达式的值。先执行 n=i=2,得 i=2;然后执行 +i,得 i
46、=3;最后执行 i+,此时表达式先取 i的值为 3,然后进行加 1运算, i的值为 4。 45 【正确答案】 88 【试题解析】 C语言中以 0打头的整数为八进制表示,则 x的十进制表示为2*64+8=136。 %x表示以 16进制输出, 130的十六进制表示应为 88H。所以输出结果为 88。 46 【正确答案】 4 5 99 【试题解析】 a、 b、 c的初值为 3、 4、 5, t的初值为 99, if语句的条件 “b a b c”为假,不执行 “t=a; ”,但紧随其后的 “a=c; c=t; ”与此 if语句无关,仍被执行。此时 a的值为 5, b的值仍是 4, c的值为 99。再执行第二个 if语句,由于此时 “a c b c”为真,执行 “t=b; ”, 紧随其后的 “b=a; a=t; ”与此 if语句无关,也被执行。此时 a的值为 4, b的值是 5, c的值为 99。因此输出结果是: 4 5 99。 47 【正确答案】 0 【试题解析】