1、二级 C语言分类模拟题 510及答案解析(总分:44.00,做题时间:90 分钟)一、选择题(总题数:35,分数:44.00)1.在一棵二叉树上,第 5层的结点数最多是_。(分数:2.50)A.8B.9C.15D.162.若有定义语句: char *s1=“OK“,*s2=“OK“; 以下选项中,能够输出“OK”的语句是_。(分数:1.00)A.if(strcmp(s1,s2)=0) puts(s1);B.if(strcmp(s1,s2)!=0) puts(s2);C.if(strcmp(s1,s2)=1) puts(s1);D.if(strcmp(s1,s2)!=0) puts(s1);3.
2、有以下函数: void fun(char *p, chat *q) while(*p+ =*q+) !=“/0“); 该函数的功能是_。(分数:1.00)A.计算字符串的长度B.计算字符串所占字节数C.将字符串逆序存放D.实现字符串的复制4.在 C语言中,函数的隐含存储类别是 ( )(分数:1.00)A.autoB.staticC.externD.无存储类别5.有以下程序(函数 fun只对下标为偶数的元素进行操作): # include stdio.h void fun(int*a,int n) int i,j,k,t; for(i=0;in-1;1+=2) k=i; for(j=i;jn;j
3、+=2) if(ajak)k=j; t=ai;ai=ak;ak=t; main() int aa10=1,2,3,4,5,6,7,a; fun(aa,7); for(i=0;i7;i+)printf(“%d,“,aai); printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.7,2,5,4,3,6,1,B.1,6,3,4,5,2,7,C.7,6,5,4,3,2,1,D.1,7,3,5,6,2,1,6.有以下程序: #includestdio.h int fun(int x, int y) static int m=0,i=2; i+=m+1;m=i+x+y; retur
4、n m; void main() int j=1,m=1,k; k=fun(j,m); printf(“%d,“,k); k=fun(j,m); printf(“%d/n“,k); 程序运行后的输出结果是_。(分数:1.00)A.5,5B.5,11C.11,11D.11,57.有如下程序: #includestdio.h main() int a=0,b=1; if(a+ else printf(“F“); a=b+; printf(“a=%d,b=%d/n“,a,b); 程序运行后的输出结果是_。(分数:1.00)A.Fa=1,b=2B.Fa=1,b=1C.Ta=0,b=2D.Ta=0,b=
5、18.函数调用 strcat(strcpy(str1, str2), str3)的功能是_。(分数:2.50)A.将字符串 str1复制到字符串 str2中后再连接到字符串 str3之后B.将字符串 str1连接到字符串 str2之后再复制到字符串 str3之后C.将字符串 str2复制到字符串 str1之后再将字符串 str3连接到字符串 str1之后D.将字符串 str2连接到字符串 str1之后再将字符串 str1复制到字符串 str3中9.关系代数运算是以_为基础的运算。A.关系运算B.谓词运算C.集合运算D.代数运算10.有以下程序: #includestdio.h main() i
6、nt k=5; while(-k)printf(“%d“,k-=3); printf(“/n“); 程序执行后的输出结果是_。(分数:1.00)A.1B.2C.4D.死循环11.有以下程序: #include stdio.h main() int a=0,b=0,c=0,d=0; (+a+b)?+c : +d; printf(“%d,%d,%d,%d/n“,a,b,c,d); 程序的运行结果是_。(分数:1.00)A.1,0,1,0B.1,1,0,1C.1,0,0,1D.1,1,1,012.有以下程序: #includestdio.h main() struct STU char name9;
7、 char sex; double score2; ; struct STU a=“Zhao“,“m“,85.0,90.0,b=“Qian“,“f“,95.0,92.0; b=a; printf(“%s,%c,%2.0f,%2.0f/n“,b.name,b.sex,b.score0,b.score1); 程序的运行结果是_。(分数:2.00)A.Qian,m,85,90B.Zhao,m,85,90C.Zhao,f,95,92D.Qian,f,95,9213.下列对于线性链表的描述中正确的是 _。(分数:1.00)A.存储空间不一定是连续,且各元素的存储顺序是任意的B.存储空间不一定是连续,且前
8、件元素一定存储在后件元素的前面C.存储空间必须连续,且前件元素一定存储在后件元素的前面D.存储空间必须连续,且各元素的存储顺序是任意的14.有以下程序: #includestdio.h #define N 4 void fun(int aN,int b) int i; for(i=0;iN;i+)bi=aiN-1-i; main( ) int xNN=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,yN,i; fun(x,y); for(i=0;iN;i+)printf(“%d,“,yi); printf(“/n“); 程序的运行结果是_。(分数:1.00)A.1
9、,2,3,4,B.3,6,9,12,C.4,7,10,13,D.1,5,9,13,15.若有如下定义: int x=6,y=3,z=2; 则表达式“x=y|yz struct node *next; *p; struct node x3=2,x+1,4,x+2,6,NULL; p=x; printf(“%d,“,p-n); printf(“%d/n“,p-next-n); 程序运行后的输出结果是_。(分数:1.00)A.2,3B.2,4C.3,4D.4,618.有以下程序: #includestdio.h main() int a=1,b=2; for(;a8;a+) b+=a; a+=2;
10、printf(“%d,%d/n“,a,b); 程序运行后的输出结果是_。(分数:2.50)A.9,18B.8,11C.7,11D.10,1419.结构化程序所要求的基本结构不包括_。(分数:1.00)A.顺序结构B.GOTO跳转C.选择(分支)结构D.重复(循环)结构20.能正确表示 a和 b同时为正或同时为负的表达式是_。(分数:1.00)A.(a=0|b=0) else if(k=1)return 1; else return fun(k-1)+1; 若执行调用语句:n=fun(3);,则函数 fun总共被调用的次数是_。(分数:2.00)A.3B.2C.4D.522.有以下等程序 #in
11、clude string. h void f(char *s, char *t) char k; k=*s; *s=*t; *t=k; s+; t-; if(*s) f(s, t); main () char stt10 =“abcdefg“, *p; p=str+strlen (str)/2+1; f (p,p-2); print f ( “%s/n“, str); (分数:1.00)A.abcdefgB.gfedcbaC.gbcdefaD.abedcfg23.有以下程序: #includestdio.h main() char x=“A“; x=(x=“A“ printf(“%c/n“,
12、x); 程序的输出结果是(分数:2.00)AABaCZDz24.设有以下 3个关系表,如表 1表 3所示。 表 1 关系表一 R A B C 1 1 2 2 2 3 表 2 关系表二 S A B C 3 1 3 表 3 关系表三 T A B C 1 1 2 2 2 3 3 1 3 下列操作中正确的是_。(分数:1.00)A.T=RSB.T=RSC.T=RSD.T=R/S25.有下列程序: #includestdio.h void fun(int a,int n,int flag) int i=0,j,t; for(i=0;in-1;i+) for(j=i+1;jn;j+) if(flag?(a
13、iaj):(aiaj) t=ai;ai=aj;aj=t; main() int c10=7,9,10,8,3,5,1,6,2,4,i; fun(c,10,1); fun(c,8,0); for(i=0;i10;i+) printf(“%d,“,ci); 程序执行后的输出结果是_。(分数:1.00)A.8,7,6,5,4,3,2,1,9,10,B.3,4,5,6,7,8,9,10,2,1,C.9,10,1,2,3,4,5,6,7,8,D.10,9,8,7,6,5,4,3,1,2,26.以下 if语句书写正确的是_。 A B C D (分数:2.00)A.B.C.D.27.有如下程序: #incl
14、ude stdio.h int sum(int a,int b) return a+b-2; main() int i; for(i=0; i5; i+) printf(“%d“,sum(i,3); printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.54321B.01234C.45678D.1234528.有如下程序: #includestdio.h struct pair int first,second; ; struct pair get_min_max(int*array,int len) int i; struct pair res; res.first=a
15、rray0; res.second=array0; for(i=1;ilen;i+) if(arrayires.first) res.first=arrayi; if(arrayires.second) res.second=arrayi; return res; main() int array5=9,1,3,4; struet pair min_max=get_min_max(array,5) printf(“min=%d,max=%din“,min_max.first,min_max.second); 程序运行后的输出结果是_。(分数:1.00)A.min=1,max=9B.min=0,
16、max=9C.min=1,max=4D.min=0,max=429.设循环队列为 Q(1:m),其初始状态为 front=rear=m。经过一系列入队与退队运算后,front=20,rear=15。现要在该循环队列中寻找最小值的元素,最坏情况下需要比较的次数为_。(分数:1.00)A.5B.6C.m-5D.m-630.下列叙述中错误的是_。(分数:1.00)A.在带链队列中,队头指针和队尾指针都是在动态变化的B.在带链栈中,栈顶指针和栈底指针都是在动态变化的C.在带链栈中,栈顶指针是在动态变化的,但栈底指针是不变的D.在带链队列中,队头指针和队尾指针可以指向同一个位置31.软件测试的目的是_。
17、(分数:1.00)A.评估软件可靠性B.发现并改正程序中的错误C.改正程序中的错误D.发现程序中的错误32.设有如下函数定义: #includestdio.h int fun(int k) if(k1)return 0; else if(k=1)return 1; else return fun(k-1)+1; 若执行调用语句“n=fun(3);”,则函数 fun总共被调用的次数是_。(分数:1.00)A.2B.3C.4D.533.若有定义:“int *p, x=0, *p, p=”,则语句“printf(“%d/n“, *p);”的输出结果是_。(分数:2.50)A.随机值B.0C.x的地址
18、D.p的地址34.有如下程序: #include stdio.h void convert(char ch) if(eh“X“) convert(ch+1); printf(“%c“, ch); main( ) convert(“W“); printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.YZB.VWC.XYD.XW35.以下叙述中错误的是_。(分数:1.00)A.数值型常量有正值和负值的区分B.常量可以用一个符号名来代表C.定义符号常量必须用类型名来设定常量的类型D.常量是在程序运行过程中值不能被改变的量二级 C语言分类模拟题 510答案解析(总分:44.00,做题
19、时间:90 分钟)一、选择题(总题数:35,分数:44.00)1.在一棵二叉树上,第 5层的结点数最多是_。(分数:2.50)A.8B.9C.15D.16 解析:解析 根据二叉树的性质:二叉树第 i(i1)层上至多有 2 i-1 个结点。得到第 5层的结点数最多是 16个。2.若有定义语句: char *s1=“OK“,*s2=“OK“; 以下选项中,能够输出“OK”的语句是_。(分数:1.00)A.if(strcmp(s1,s2)=0) puts(s1);B.if(strcmp(s1,s2)!=0) puts(s2);C.if(strcmp(s1,s2)=1) puts(s1);D.if(s
20、trcmp(s1,s2)!=0) puts(s1); 解析:解析 strcmp 函数比较字符串大小,区分大小写,所以当 s1、s2 不相等输出 s1就会输出“OK”,答案选择 D。3.有以下函数: void fun(char *p, chat *q) while(*p+ =*q+) !=“/0“); 该函数的功能是_。(分数:1.00)A.计算字符串的长度B.计算字符串所占字节数C.将字符串逆序存放D.实现字符串的复制 解析:解析 函数 fun()定义两个形参指针变量 p,q,while 循环语句中,实现功能是把 q指针指向地址单元的值赋给 p指针指向的地址中,且每次完成赋值后,移动指针,进行
21、下一次赋值,直到 q指针指向字符串结束符时,退出 while循环,因此答案为 D选项。4.在 C语言中,函数的隐含存储类别是 ( )(分数:1.00)A.auto B.staticC.externD.无存储类别解析:5.有以下程序(函数 fun只对下标为偶数的元素进行操作): # include stdio.h void fun(int*a,int n) int i,j,k,t; for(i=0;in-1;1+=2) k=i; for(j=i;jn;j+=2) if(ajak)k=j; t=ai;ai=ak;ak=t; main() int aa10=1,2,3,4,5,6,7,a; fun(
22、aa,7); for(i=0;i7;i+)printf(“%d,“,aai); printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.7,2,5,4,3,6,1, B.1,6,3,4,5,2,7,C.7,6,5,4,3,2,1,D.1,7,3,5,6,2,1,解析:解析 对下标为偶数的元素进行降序排序,下标为奇数的元素保持不变。6.有以下程序: #includestdio.h int fun(int x, int y) static int m=0,i=2; i+=m+1;m=i+x+y; return m; void main() int j=1,m=1,k; k=fu
23、n(j,m); printf(“%d,“,k); k=fun(j,m); printf(“%d/n“,k); 程序运行后的输出结果是_。(分数:1.00)A.5,5B.5,11 C.11,11D.11,5解析:解析 fun()函数中定义两个静态局部变量 m、i,其中 m初值为 0,i 初值为 2,由于是静态局部变量,m、i 只在第一次调用 fun()函数时初始化,后续调用 fun()函数时,m、i 的值沿用上一次调用后的值。main()函数中 j、m、k 都是局部变量,作用域都只限在 main()函数中,所以 main()函数中的 m与fun()函数中的 m属于不同的变量。由源程序可知 mai
24、n()函数连续两次调用 fun(1,1),第一次调用fun(1,1),fun()函数中 x值为 1,y 值为 1,m 值为 0,i 值为 2,所以执行 i+=m+1后 i的值为 3。执行m=i+x+y后,m 的值为 5,函数返回值为 5;第二次调用 fun(1,1),fun()函数中 x值为 1,y 值为 1,m值为 5,i 值为 3。所以执行 i+=m+1后 i的值为 9。执行 m=i+x+y后,m 的值为 11,函数返回值为 11。故本题答案为 B选项。7.有如下程序: #includestdio.h main() int a=0,b=1; if(a+ else printf(“F“);
25、a=b+; printf(“a=%d,b=%d/n“,a,b); 程序运行后的输出结果是_。(分数:1.00)A.Fa=1,b=2 B.Fa=1,b=1C.Ta=0,b=2D.Ta=0,b=1解析:解析 main()函数首先定义整型变量 a、b,分别赋初值为 0、1;a+ while(-k)printf(“%d“,k-=3); printf(“/n“); 程序执行后的输出结果是_。(分数:1.00)A.1 B.2C.4D.死循环解析:解析 -k 先自减再使用,所以第一次判断条件即为 while(4),条件为真,执行打印 k的值 k=4-3,结果为 1;第二次判断条件即为 while(0),条件
26、为假,结束循环,打印回车换行符。选择 A选项。11.有以下程序: #include stdio.h main() int a=0,b=0,c=0,d=0; (+a+b)?+c : +d; printf(“%d,%d,%d,%d/n“,a,b,c,d); 程序的运行结果是_。(分数:1.00)A.1,0,1,0 B.1,1,0,1C.1,0,0,1D.1,1,1,0解析:解析 条件表达式一般形式:exp1? exp2:exp3,执行规则为:若 exp1为真,求解 exp2,输出exp2的值,不计算 exp3的值;若为假,求解 exp3,输出 exp3的值,不计算 exp2的值。本题程序执行过程为
27、:求解逻辑表达式(+a +b),先求解+a,a=1,则整个表达式为真,不计算+b,然后求解+c,不计算+d,最后得到 a=1,b=0,c=1,d=0,故 A选项正确。12.有以下程序: #includestdio.h main() struct STU char name9; char sex; double score2; ; struct STU a=“Zhao“,“m“,85.0,90.0,b=“Qian“,“f“,95.0,92.0; b=a; printf(“%s,%c,%2.0f,%2.0f/n“,b.name,b.sex,b.score0,b.score1); 程序的运行结果是_
28、。(分数:2.00)A.Qian,m,85,90B.Zhao,m,85,90 C.Zhao,f,95,92D.Qian,f,95,92解析:解析 本题考查结构体初始化操作。本题中可以直接将结构体 a赋值给 b,所以输出的结果和 a一样,B 选项正确。13.下列对于线性链表的描述中正确的是 _。(分数:1.00)A.存储空间不一定是连续,且各元素的存储顺序是任意的 B.存储空间不一定是连续,且前件元素一定存储在后件元素的前面C.存储空间必须连续,且前件元素一定存储在后件元素的前面D.存储空间必须连续,且各元素的存储顺序是任意的解析:解析 在链式存储结构中,存储数据结构的存储空间可以不连续,各数据
29、结点的存储顺序与数据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来来确定的。14.有以下程序: #includestdio.h #define N 4 void fun(int aN,int b) int i; for(i=0;iN;i+)bi=aiN-1-i; main( ) int xNN=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,yN,i; fun(x,y); for(i=0;iN;i+)printf(“%d,“,yi); printf(“/n“); 程序的运行结果是_。(分数:1.00)A.1,2,3,4,B.3,6,9,12,C
30、.4,7,10,13, D.1,5,9,13,解析:解析 调用 fun函数,yi=xiN-1-i,N=4,x 是 4行 4列的二维数组。 i=0时,y0=x04-1=x03=4;i=1 时,y1=x14-1-1=x12=7;i=2 时,y2=x24-1-2=x21=10;i=3 时,y3=x30=13。15.若有如下定义: int x=6,y=3,z=2; 则表达式“x=y|yz struct node *next; *p; struct node x3=2,x+1,4,x+2,6,NULL; p=x; printf(“%d,“,p-n); printf(“%d/n“,p-next-n); 程
31、序运行后的输出结果是_。(分数:1.00)A.2,3B.2,4 C.3,4D.4,6解析:解析 由题干中的函数可知,程序运行后的输出结果为 2,4。18.有以下程序: #includestdio.h main() int a=1,b=2; for(;a8;a+) b+=a; a+=2; printf(“%d,%d/n“,a,b); 程序运行后的输出结果是_。(分数:2.50)A.9,18B.8,11C.7,11D.10,14 解析:解析 第 1次循环,a 的值为 1,满足条件,执行 b+=a,与 a+=2,则 b的值变为 3,a 的值变为3。执行 a+,a 的值为 4,满足条件进入第 2次循环
32、,执行完循环体后,b 的值为 7,a 的值为 6。执行a+,a 的值为 7,满足条件进入第 3次循环,执行完循环体后,b 的值为 14,a 的值为 9。执行 a+,a 的值变为 10,所以选择 D选项。19.结构化程序所要求的基本结构不包括_。(分数:1.00)A.顺序结构B.GOTO跳转 C.选择(分支)结构D.重复(循环)结构解析:解析 结构化程序包含的基本结构为顺序结构、循环结构、分支结构。20.能正确表示 a和 b同时为正或同时为负的表达式是_。(分数:1.00)A.(a=0|b=0) else if(k=1)return 1; else return fun(k-1)+1; 若执行调
33、用语句:n=fun(3);,则函数 fun总共被调用的次数是_。(分数:2.00)A.3 B.2C.4D.5解析:解析 首先 n=fun(3),3 被当作参数传递进去,进行了第一次调用,3 被当作参数传进去后,程序会执行语句 else return fun(k-1)+1,进行了第二次调用,而参数是 3-1也就是 2。2 被当作参数传进去后,程序会执行语句 else return fun(k-1)+1,进行了第三次调用,而参数是 2-1也就是 1。1 被当作参数传进去后,程序会执行语句 else if(k=1) return 1;不再递归调用,因此最终结果为 3次,选项A正确。22.有以下等程序
34、 #include string. h void f(char *s, char *t) char k; k=*s; *s=*t; *t=k; s+; t-; if(*s) f(s, t); main () char stt10 =“abcdefg“, *p; p=str+strlen (str)/2+1; f (p,p-2); print f ( “%s/n“, str); (分数:1.00)A.abcdefgB.gfedcba C.gbcdefaD.abedcfg解析:解析 本题考查的是递归函数。在一个函数中直接或间接地调用了自身,则称此函数为递归函数。本题定义的函数 f()就是一个递归函
35、数。它先交换两个字符指针所指的内容,然后将第 1个指针往后移动一位,第 2个指针往前移动一位,如果第 1个指针所指内容不是字符串结束标志,则递归调用自身。主函数中首先定义了一个字符数组 sTR10=“abcdefg“,然后定义了一个字符指针 p=str+strlen(str)/2+1,即让 p指向 str+4(或 x=(x=“A“ printf(“%c/n“, x); 程序的输出结果是(分数:2.00)AABa CZDz解析:24.设有以下 3个关系表,如表 1表 3所示。 表 1 关系表一 R A B C 1 1 2 2 2 3 表 2 关系表二 S A B C 3 1 3 表 3 关系表三
36、 T A B C 1 1 2 2 2 3 3 1 3 下列操作中正确的是_。(分数:1.00)A.T=RSB.T=RSC.T=RS D.T=R/S解析:解析 集合的并、交、差、广义笛卡儿积:设有两个关系为 R和 S,它们具有相同的结构,R 和 S的并是由属于 R和 S,或者同时属于 R和 S的所有元组组成,记作 RS;R 和 S的交是由既属于 R又属于S的所有元组组成,记作 RS;R 和 S的差是由属于 R但不属于 S的所有元组组成,记作 R-S;元组的前n个分量是 R的一个元组,后 m个分量是 S的一个元组,若 R有 K 1 个元组,S 有 K 2 个元组,则 RS有 K 1 K 2 个元组
37、,记为 RS。从表 3中可见,关系 T是关系 R和关系 S的简单扩充,而扩充的符号为“”,故答案为 T=RS。25.有下列程序: #includestdio.h void fun(int a,int n,int flag) int i=0,j,t; for(i=0;in-1;i+) for(j=i+1;jn;j+) if(flag?(aiaj):(aiaj) t=ai;ai=aj;aj=t; main() int c10=7,9,10,8,3,5,1,6,2,4,i; fun(c,10,1); fun(c,8,0); for(i=0;i10;i+) printf(“%d,“,ci); 程序执行
38、后的输出结果是_。(分数:1.00)A.8,7,6,5,4,3,2,1,9,10, B.3,4,5,6,7,8,9,10,2,1,C.9,10,1,2,3,4,5,6,7,8,D.10,9,8,7,6,5,4,3,1,2,解析:解析 在本题中,fun()函数接收数组 a、数组元素个数 n以及整型变量 flag,然后通过 for循环遍历数组 a的 n个元素,若 flag为 1,则将数组元素升序排列;若 flag为 0,则将数组元素逆序排列。main()函数定义整型数组 c,它包含 10个元素,首先将数组 c、元素个数 10和 1传给 fun()函数,将 c中 10个元素升序排列,结果为:1,2,
39、3,4,5,6,7,8,9,10,;然后再次调用 fun()函数,将数组c、元素个数 8和 0传给 fun()函数,将 c中前 8个元素逆序排列,结果为:8,7,6,5,4,3,2,1,9,10。故本题答案为 A选项。26.以下 if语句书写正确的是_。 A B C D (分数:2.00)A.B. C.D.解析:27.有如下程序: #include stdio.h int sum(int a,int b) return a+b-2; main() int i; for(i=0; i5; i+) printf(“%d“,sum(i,3); printf(“/n“); 程序运行后的输出结果是_。(
40、分数:1.00)A.54321B.01234C.45678D.12345 解析:解析 函数调用的一般形式为:函数名(实际参数表)对无参函数调用时,则无实际参数表。实际参数表中的参数可以是常数、变量或其它构造类型数据及表达式。各实参之间用逗号分隔。函数 sum在main函数之前,所以在 main函数中不需要声明。本题程序执行过程为:在 i=0,1,2,3,4 时依次输出sum(i,3),即调用 sum函数后依次输出 1、2、3、4、5,故 D选项正确。28.有如下程序: #includestdio.h struct pair int first,second; ; struct pair get
41、_min_max(int*array,int len) int i; struct pair res; res.first=array0; res.second=array0; for(i=1;ilen;i+) if(arrayires.first) res.first=arrayi; if(arrayires.second) res.second=arrayi; return res; main() int array5=9,1,3,4; struet pair min_max=get_min_max(array,5) printf(“min=%d,max=%din“,min_max.fir
42、st,min_max.second); 程序运行后的输出结果是_。(分数:1.00)A.min=1,max=9B.min=0,max=9 C.min=1,max=4D.min=0,max=4解析:解析 在对数组进行初始化时,如果在说明数组时给出了长度,但没有给所有的元素赋予初始值,那么 c语言将自动对余下的元素赋初值 0,则 array5=9,1,3,4,0。程序的执行过程为:调用函数get_min_max(array,5),将数组 array的首地址传入函数,定义结构体变量 res,并为其成员赋值。for循环查找数组 array的最小值 0,将其赋值给 res的成员 firsf,查找数组最大
43、值 9,并将其赋值给 res的成员 second。最后返回结构体变量 res,则 min_max=res。输出 min_max.first=0,min_max.second=9。29.设循环队列为 Q(1:m),其初始状态为 front=rear=m。经过一系列入队与退队运算后,front=20,rear=15。现要在该循环队列中寻找最小值的元素,最坏情况下需要比较的次数为_。(分数:1.00)A.5B.6C.m-5D.m-6 解析:解析 循环队列是队列的一种顺序存储结构,用队尾指针 rear指向队列中的队尾元素,用排头指针指向排头元素的前一个位置,因此,从排头指针 front指向的后一个位置
44、直到队尾指针 rear指向的位置之间所有的元素均为队列中的元素,队列初始状态为 front=rear=m,当 front=20,rear=15 时,队列中有 m-20+15=m-5个元素,比较次数为 m-6次,故 D选项正确。30.下列叙述中错误的是_。(分数:1.00)A.在带链队列中,队头指针和队尾指针都是在动态变化的B.在带链栈中,栈顶指针和栈底指针都是在动态变化的 C.在带链栈中,栈顶指针是在动态变化的,但栈底指针是不变的D.在带链队列中,队头指针和队尾指针可以指向同一个位置解析:解析 带链的队列就是用一个单链表来表示队列,队列中的每一个元素对应链表中的一个结点,在入队和退队过程中,队
45、头指针和队尾指针都是在动态变化的,A 项正确;带链的栈在入栈和退栈过程中栈底指针不变,栈顶指针随之变化,C 项正确;循环队列中当队列满或者空时,队头指针和队尾指针指向同一个位置,D 项正确。31.软件测试的目的是_。(分数:1.00)A.评估软件可靠性B.发现并改正程序中的错误C.改正程序中的错误D.发现程序中的错误 解析:解析 软件测试是为了发现错误而执行程序的过程,测试要以查找错误为中心,而不是为了演示软件的正确功能。不是为了评估软件或改正错误。32.设有如下函数定义: #includestdio.h int fun(int k) if(k1)return 0; else if(k=1)r
46、eturn 1; else return fun(k-1)+1; 若执行调用语句“n=fun(3);”,则函数 fun总共被调用的次数是_。(分数:1.00)A.2B.3 C.4D.5解析:解析 首先 n=fun(3),3 被当作参数传递进去,这就进行了一次调用,3 被当做参数传进去后,程序会执行这句 else return fun(k-1)+1;这就调用了第二次,而参数是 3-1也就是 2。2 被当做参数传进去后,程序会执行这句 else return fun(k-1)+1;这就调用了第三次,而参数是 2-1也就是 1。1 被当做参数传进去后,程序会执行这句 else if(k=1)return 1;不再递归调用,所以最终调用了 3次 fun()函数。所以选择 B选项。33.若有定义:“int *p, x=0, *p, p=”,则语句“printf(“%d/n“, *p);”的输出结果是_。(分数:2.50)A.随机值B.0 C.x的地址D.p的地址解析:解析 *p 的意思是取其指向地址的内容,p 是指向 x地址的指针,因此输出*p 也