1、国家二级( C语言)笔试模拟试卷 83 及答案与解析 1 数据的存储结构是指 ( A)存储在外存中的数据 ( B)数据所占的存储空间量 ( C)数据在计算机中的顺序存储方式 ( D)数据的逻辑结构在计算机中的表示 2 下列关于栈的描述中错误的是 ( A)栈是先进后出的线性表 ( B)栈只能顺序存储 ( C)栈具有记忆作用 ( D)对栈的插入与删除操作中,不需要改变栈底指针 3 对于长度为 n的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是 ( A)冒泡排序为 n/2 ( B)冒泡排序为 n ( C)快速排序为 n ( D)快速排序为 n(n-1)/2 4 对长度为 n的线性表进行
2、顺序查找,在最坏情况下所需要的比较次数为 ( A) log2n ( B) n/2 ( C) n ( D) n+l 5 下列对于线性链表的描述中正确的是 ( A)存储空间不一定是连续,且各元素的存储顺序是任意的 ( B)存储空间不一定是连续,且前件元素一定存储在后件元素的前面 ( C)存储空间必须连续,且前件元素一定存储在后件元素的前面 ( D)存储空间必须连续,且各元素的存储顺序是任意的 6 下列对于软件测试的描述中正确的 是 ( A)软件测试的目的是证明程序是否正确 ( B)软件测试的目的是使程序运行结果正确 ( C)软件测试的目的是尽可能多地发现程序中的错误 ( D)软件测试的目的是使程序
3、符合结构化原则 7 为了使模块尽可能独立,要求 ( A)模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强 ( B)模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱 ( C)模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱 ( D)模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强 8 下列描述中正确的是 ( A)程序 就是软件 ( B)软件开发不受计算机系统的限制 ( C)软件既是逻辑实体,又是物理实体 ( D)软件是程序、数据与相关文档的集合 9 数据独立性是数据库技术的重要特点之一,所谓数据独立性是指 ( A)数据与程序独立存放 ( B)不同的数据被存放在不同的文件中 ( C
4、)不同的数据只能被对应的应用程序所使用 ( D)以上三种说法都不对 10 用树形结构表示实体之间联系的模型是 ( A)关系模型 ( B)网状模型 ( C)层次模型 ( D)以上三个都是 11 若有说明 char t;,下列表达式不正确的 是 _。 ( A) t=97 ( B) t=a ( C) t=“a“ ( D) t=a+b 12 下列程序段的输出结果是 _。 int x=5, y=4, z; printf(“%dn“,z+=1,z=x%y); ( A) 0 ( B) 1 ( C) 2 ( D)结果是不确定值 13 一个 C程序可以包含任意多个不同名的函数,但有且仅有一个 _。 ( A)过程
5、 ( B)函数 ( C)主函数 ( D)子程序 14 若有说明语句: char ch=x41;,则 ch中 _。 ( A)包含 4个字符 ( B)包含 2个字符 ( C)包含 1个字符 ( D)字符个数不确定,说明不正确 15 下面程序的执行结果是 _。 main() char str=“quert?“,*p=str; while(putchar(*p+)!=?); ( A) quert ( B) Rvfsu ( C) quert? ( D) rvfsu? 16 以下程序的输出结果是 _。 main() printf(“%dn“,NULL); ( A) 0 ( B) -1 ( C) 1 ( D
6、)不确定的值 (因变量无定义 ) 17 以下程序段的输出结果是 _。 int sbr=10,8,6,4,2,*p=str+1; printf(“%dn“,*(p+2); ( A) 6 ( B) 4 ( C) 10 ( D)不确定的值 18 下列程序的执行结果是 _。 main() int x=2,y=2,z=0; if(z 0) if(yo)x=4; else X=5; printf(“%dt“,x); if(z=y 0)x=7; else if(y=0)x=3; else X=6; printf(“%dt“,x); printf(“%dt“,z); ( A) 2 7 1 ( B) 4 3 2
7、 ( C) 5 7 0 ( D) 2 5 0 19 以下程序的输出结果是 _。 main() int x=-1,a=1: if(x+=A) printf(“YES!n“); else printf(“NO!n“); ( A)有语法错,不能通过编译 ( B)通过编译,但运行程序造成死机 ( C)输出 YES! ( D)输出 N0! 20 设有如下函数: fun(floatx) x*=x+; printf(“%dn“,x); return(x); 则函数的类型是 _。 ( A) float ( B) void ( C) int ( D)无法确定 21 若 x和 y代表整型数, 以下表达式中不能正确
8、表示数学关系 |x-y| 10的是 ( A) abs(x-y) 10 ( B) x-y -10;) if(i=3i=5) continue; if(i=6) break; i+; s+=i; ; printf(“%dn“,s); 程序运行后的输出结果是 ( A) 10 ( B) 13 ( C) 24 ( D)程序进入死循环 25 若变量已正确定义,要求程序段完成求 5!的计算,不能完成此操作的程序段是 ( A) for(i=1,p=1;i 5;i+) p*=i; ( B) for(i=1;i 5;i+) p=1; p*=i; ( C) i=1;p=1;while(i 5)p*=i; i+; (
9、 D) i=1;p=1;dop*=i; i+; while(i 5); 26 有以下程序 main() char a, b, c, d; seanf(“%c, %c, %d, %d“, printf(“%c, %c, %c, %cn“, a, b, c, d) ; 若运行时从键盘上输入: 6, 5, 65, 66回车。则输出结果是 ( A) 6, 5, A, B ( B) 6, 5, 65, 66 ( C) 6, 5, 6, 5 ( D) 6, 5, 6, 6 27 以下能正确定义二维数组的是 ( A) int a3; ( B) int a3=2*3; ( C) int a3=; ( D) i
10、nt a23=1,2,3,4; 28 有以下程序 int f(int a) return a%2; main() int s8=1, 3; 5, 2,4, 6, i, d=0; for(i=0; f(si);i+)d+=si; printf(“%dn“,d) ; 程序运行后的输出结果是 ( A) 9 ( B) 11 ( C) 19 ( D) 21 29 若有以下说明和语句 int c4)5,(*p)5; p=c; 能够正确引用 c数组元素的是 ( A) p+1 ( B) *(p+3) ( C) *(P+1)+3 ( D) *(p0+2) 30 有以下程序 main() int a=7, b=8
11、, *p, *q, *r; p= 要求依次输出 x数组 6个元素中的值, 不能完成此操作的语句是 ( A) for(i=0;i 6;i+) printf(“%2d“,*(p+); ( B) for(i=0;i 6;i+) printf(“%2d“,*(p+i); ( C) for(i=0;i 6;i+) printf(“%2d“,*p+); ( D) for(i=0;i 6;i+) printf(“%2d“,(*p)+); 33 有以下程序 #include stdio h main() int a=1,2,3,4,5,6,7,8,9,10,11,12,*p=a+5,*q=NULL; *q=
12、*(p+5); printf(“%d %dn“,*p,*q); 程序运行后的输出结果是 ( A)运行后报错 ( B) 6 6 ( C) 6 11 ( D) 5 10 34 设有以下定义和语句 int a32=1,2,3,4,5,6,*p3; p0=a1; 则*(p0+1)所代表的数组元素是 ( A) a01 ( B) a10 ( C) a11 ( D) a12 35 有以下程序 main() char str10=“China“,“Beijing“,*p=str; printf(“%sn“,p+10); 程序运行后的输出结果是 ( A) China ( B) Beijing ( C) ng (
13、 D) ing 36 有以下程序 main() char s=“ABCD“,*p; for(p=s+1; p s+4;p+)printf(“%sn“, p); 程序运行后的输出结果是 ( A) ABCD BCD CD D ( B) A B C D ( C) B C D ( D) BCD CD D 37 在函数调用过程中,如果函数 funA调用了函数 funB,函数 funB又调用了函数funA,则 ( A)称为函数的直接递归调用 ( B)称为函数的间接递归调用 ( C)称为函数的 循环调用 ( D) C语言中不允许这样的递归调用 38 已有定义: int i, a10, *p;,则合法的赋值语
14、句是 ( A) p=100; ( B) p=a5; ( C) p=a2+2; ( D) p=a+2; 39 以下叙述中正确的是 ( A)局部变量说明为 static存储类,其生存期将得到延长 ( B)全局变量说明为 static存储类,其作用域将被扩大 ( C)任何存储类的变量在未赋初值时,其值都是不确定的 ( D)形参可以使用的存储类说明符与局部变量完全相同 40 设有定义语句: char c1=92, c2=92;,则以下表达式中值为零的是 ( A) c1c2 ( B) c1 if(i j) t=ai;ai=aj;aj=t; i+; j-; fun(a,i,j); main() int x
15、=2, 6, 1, 8,i; fun(x, 0, 3); for(i=0;i 4;i+) printf(“%2d“,xi); printf(“n“); 程序运行后的输出结果是 ( A) 1 2 6 8 ( B) 8 6 2 1 ( C) 8 1 6 2 ( D) 8 6 1 2 45 有以下说明和定义语句 struct student int age; char num8; struct student stu3=20,“200401“,21,“200402“,19,“200403“; struct student *p=stu; 以下选项中引用结构体变量成员的表达式错误的是 ( A) (p+
16、)- num ( B) p- num ( C) (*p) num ( D) stu3 age 46 有以下程序 main() int x=1,3,5,7,2,4,6,0,i,j,k; for(i=0;i 3;i+) for(j=2;j i;j-) if(xj+1 xj) k=xj;xj=xj+1;xj+1=k; for(i=0;i3;i+) for(j=4;j 7-i;j+) if(xj xj+1) k=xj;xj;xj+1;xj+1=k; for(i=0;i 8;i+)printf(“%d“,xi); printf(“n“); 程序运行后的输出结果是 ( A) 75310246 ( B) 1
17、234567 ( C) 76310462 ( D) 13570246 47 有如下程序 #include stdio h main() FILE *fpl; fpl=fopen(“f1 txt“,“w“); fprintf(fp1,“abc“); fclose(fp1); 若文本文件f1 txt中原有内容为: good,则运行以上程序后文件 f1 txt中的内容为 ( A) goodabc ( B) abcd ( C) abc ( D) abcgood 48 以下程序的功能是:建立一个带布头结点的单向链表,并将存储在数组中的字符依次存储到链表的各个结点中,请从与下划线处号码对应的一组选项中选择
18、出正确的选项 #include stdlib h struct node char data; struct node *next; (48) CreatList(char*s), struct node *h, *p, *q; h=(struct node*)malloc(sizeof(struct node); p=q=h; while(*s!=“0“) p=(struct node*)malloc(sizeof(struct node); p- data= (49) ; q- next=p; q= (50) ; s+; p- next=“0“; return h; main() char
19、 str=“link list“; struct node*head; head=CreatList(str); 48 (1) ( A) char* ( B) struct node ( C) struct node* ( D) char 49 (2) ( A) *s ( B) s ( C) *s+ ( D) (*s)+ 50 (3) ( A) p- next ( B) p ( C) s ( D) s- next 51 一般来说,算法可以用顺序、选择和【 】三种基本控制结构组合而成。 52 按照逻辑结构分类,数据结构可分为线性结构和非线性结构,队列属于【 】。 53 按数据流的类型,结构化设计
20、方法有 两种设计策略,它们是变换分析设计和【 】。 54 数据库系统在其内部分为三级模式,即概念模式、内模式和外模式。其中,【 】是用户的数据视图,也就是用户所见到的数据模式。 55 在关系模型中,把数据看成一个二维表,每一个二维表称为一个【 】。 56 以下程序运行后的输出结果是【 】。 main() int p=30; printf(“%dn“,(p/3 0?p/10:p%3); 57 以下程序运行后的输出结果是【 】。 main() char m; m=B+32; printf(“%cn“,m); 58 以下程序运行后的输出结果是【 】。 main() int a=1,b=3,c=5;
21、if(c=a+b) printf(“yesn“); else printf(“non“); 59 以下程序运行后的输出结果是【 】。 main() int i,m=0,n=0,k=0; for(i=9;i =11;i+) switch(i/10) case 0:m+;n+;break; case 10:n+;break; default:k+;n+; printf(“%d%d%dn“,m,n,k); 60 执行以下程序后,输出 #号的个数是【 】。 #include atdio h main() int i,j; for(i=1;i 5;i+) for(j=2;j =i;j+)putchar(
22、#); 61 以下程序运行后的输出结果是【 】。 main() int i,n=10,0,0,0,0; for(i=1;i 4;i+) ni=ni-1*2+1; printf(“%d“, ni); 62 以下程序运行后的输出结果是【 】。 main() int i, j, a3=1, 2, 3, 4, 5, 6, 7, 8, 9; for(i=0;i 3;i+) for(j=i+1;j 3;j+)aji=0; for(i=0;i 3; i+) for(j=0;j 3;j+)printf(“%d“,aij); printf(“n“); 63 以下程序运行后的输出结果是【 】。 int a=5;
23、fun(int b) static int a=10; a+=b+; printf(“%d“,a) ; main() int c=20; fun(c) ; a+=c+; printf(“%dn“,a) ; 64 请在以下程序第一行的下划线处填写适当内容,使程序能正确运行。 【 】 (double, double); main() double x,y; seanf(“%1f%1f“, 65 以下程序运行后输入: 3,abcde回车,则输出结果是【 】。 #include string h move(char *str,int n) char temp;int i; temp=strn-1; f
24、or(i=n-1;i 0;i-)stri=stri-1; str0=temp; main() char s50; int n,i,z; scanf(“%d,%s“,i n;i+)move(s,z); printf(“%sn“,s); 66 以下程序运行后的输出结果是【 】。 fun(int x) if(x/2 0)fun(x/2); printf(“%d“,x); main() fun(6); 67 已有定义如下: struct node int data; struct node *next; *P; 以下语句调用 malloc函数,使指针 p指向一个具有 struct node类型的动态存
25、储空间。 请填空。 p=(struct node *)malloc 【 】; 68 以下程序的功能是将字符串 s中的数字字符放入 d数组中,最后输出 d中的字符串。例如,输入字符串: abcl23edf456gh,执行程序后输出: 123456。请填空。 #include stdio h #include ctype, h main() char s80, d80; int i,j; gets(s); for(i=j=0; si!=0;i+) if( 【 】 )dj=si;j+; dj=0; puts(d) ; 69 以下程序的功能是调用函数 fun计算 :m=1-2+3-4+9 -10,并输
26、出结果。请填空。 int fun(int n) int m=0,f=1,i; for(i=1;i =n;i+) m+=i*f; f= 【 】; return m; main() printf(“m=%dn“, 【 】 ); 国家二级( C语言)笔试模拟试卷 83 答案与解析 1 【正确答案】 D 【试题解析】 数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构 (也称数据的物理结构 )。 2 【正确答案】 B 【试题解析】 栈 (stack)是限定只在一端进行插入与删除的线性表,这一端称为栈顶 (top),另一端称为栈底 (bottom)。栈是按照 “先进后出 ”或 “后进先出 ”的
27、原则组织数据的。栈具有记忆作用。 3 【正确答案】 D 【试题解析】 在最坏的情况下,冒泡排序和快速排序需要比较的次数为 n(n-1)/2。 4 【正确答案】 C 【试题解析】 对于长度为 n的有序线性表,在最坏的情况下,二分查找只需要比较 log2n 次,而顺序查找需要比较 n次。 5 【正确答案】 A 【试题解析】 在链式存储结构中,存储数据结构的存储空间可以不连续,各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来确定的。 6 【正确答案】 C 【试题解析】 软件测试是为了发现错误而执行程序的过程。 7 【正确答案】 B 【试题解析】 耦合性与内
28、聚性是模块独立性的两个定性标准,耦合与内聚是相互关联的。在程序结构中,各模块的内聚性越强,则耦合性越弱。一般较优秀的软件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性, 有利于提高模块的独立性。 8 【正确答案】 D 【试题解析】 软件指的是计算机系统中与硬件相互依存的另一部分,包括程序、数据和相关文档的完整集合。程序是软件开发人员根据用户需求开发的、用程序设计语言描述的、适合计算机执行的指令序列。数据是使程序能正常操纵信息的数据结构。文档是与程序的开发、维护和使用有关的图文资料。 9 【正确答案】 D 【试题解析】 数据独立性是数据与程序间的互不依赖性,即数据库中
29、数据独立于应用程序而不依赖于应用程序。数据的独立性一般分为物理独立性与逻辑独立性两级。 10 【正确答案】 C 【试题解析】 层次模型是最早发展起来的数据库模型,层次模型的基本结构是树形结构。 11 【正确答案】 C 【试题解析】 选项 A将 97作为 ASCII码值 (小写字母 a的 ASCII 码值 )赋给字符变量 t。选项 D将字符 a和字符 b的 ASCII 码值的和赋给变量 t。选项 B 是将字符a的 ASCII码值赋给变量 t,也是正确的。选项 C中的 “a”是字符串常量,不是字符常量。 12 【正确答案】 C 【试题解析】 printf函数的参数传递方向是从右至左,因此,先将 x
30、%y的值 1赋给 z,再执行 z+=1, z的值变为 2,格式控制符 %d是将 z+=1的值输出。 13 【正确答案】 C 【试题解析】 主函数 main 在 C语言程序中有且只能有一个,它是程序执行的入口。 14 【正确答案】 C 【试题解析】 x41是转义字符, x表示 41是十六进制数, 41 是字母 a的 ASCII码值。 15 【正确答案】 C 【试题解析】 *p+是先取 *p的值,然后指针变量 p 指向下一个字符, putchar是先执行 (输出 )再判断,所以 “?”是可以显示的。 16 【正确答案】 A 【试题解析】 NULL 表示空,常在定义指针变量时将其值赋为 NULL,表
31、示不指向任何地址。 NULL 在 C语言的头文件中宏定义为 0。 17 【正确答案】 B 【试题解析】 指针变量操作。 18 【正确答案】 A 【试题解析】 本题考查 if语句的嵌套,第一个嵌套语句, else看上去似乎和第一个 if配对,实际上是和第二个 if配对:第二个嵌套语句中的两个条件表达式应该注意,第一个条件表达式是将 y 0的逻辑值赋给变量 z,第二个条件表达式是将0赋给变量 y,不是逻辑等于运算符 “= =”。 19 【正 确答案】 D 【试题解析】 if语句中条件表达式的值是赋值表达式 x+=a的值, x+=a相当于x=x+a,值为 0。 20 【正确答案】 C 【试题解析】
32、函数 fun 缺省返回值类型时,系统将默认为 int型。形参 x是 float型,和函数返回值类型不一致,此时,以函数返回值类型为准。 21 【正确答案】 C 【试题解析】 选项 A用了一个绝对值函数 abs();选项 B 中用了一个 “&”逻辑与;选项 C中, “|”左边的式子如为真,将不再判断其后的表达式的值;选项 D为本题中数学关系式的一个等价命题 。 22 【正确答案】 A 【试题解析】 我们首先看程序中 if-else的匹配,由于 C语言中规定 elso 总是与最近的 if搭配,因此程序中 else与第二个 if搭配,即该 if-else语句为第一个 if语句的执行部分,接着判断第一
33、个 if 后面括号里的表达式的值 “a b”为假 (“3 4”为假 ),因此不执行后面 if-else语句,程序将执行下面的输出语句输出 d,而 d一直未被改变故为原来的值 2。 23 【正确答案】 D 【试题解析】 选项 A、选项 B 和选项 C都是在 s的值为 0的时候输出 y, a不为0的时候输 出 x,而选项 D是在 a为 0的时候输出 x, a不为 0的时候输出 y。 24 【正确答案】 D 【试题解析】 程序中 for循环中省略了判断退出循环的表达式, for循环将由里面的 break 语句控制是否结束循环,第一次循环,第一条 if语句后面括号里的表达式的值为假,所以该 if语句不
34、被执行,执行下面的第二条语句,此时该 if语句表达式的值为假,所以该 if语句也不执行,执行下面的语句, i+、 s+=i,执行完毕后 i的值为 1, s的值为 1,如此循环,直到第三次之后 i, s 的值都为 3,继续第四次循环,显然这时满足第一条 if 语 句的,执行后面的 continue该次循环结束从头开始下次循环,而 i的值为 3一直没有改变,所以第一条语句始终要执行,因此for循环将一直循环下去。 25 【正确答案】 B 【试题解析】 选项 B中 for循环了 5次,而每次循环的时候,都将 p 的值重新赋值为 1后,再乘以当前数字 i,最后的结果为 5,显然不是 5!的值,同样的分
35、析可知选项 A、选项 C和选项 D计算的都是 5!。 26 【正确答案】 A 【试题解析】 主函数中首先定义了 4个字符变量 a、 b、 c、 d,然后通过 scanf()函数输入 a、 b、 c、 d。输 入中 a和 b 是按字符格式 c输入的, c和 d 是按整型符号d 输入的。在看下面的 printf()函数中,要求 a、 b、 c、 d 都按字符输出,故 a和 b原样输出为 6、 5, c和 d 将把与其 ASCII 码对应的字符输出, 65和 66 的 ASCII码对应字符 A和 B,故最后的输出为 6, 5, A, B。 27 【正确答案】 B 【试题解析】 选项 A中省略了第一维
36、的长度,在 C语言中是不允许的;选项 C也是省略第一维的长度;选项 D中定义了一个 2行 3列的数组,而在赋值的时候却赋了一个 3行的值给它,显然不正确。 28 【正确答案】 A 【试题解析】 函数 f()的作用是形参 a为偶数的时候返回 0,主函数中首先定义了一个长度为 8的一维数组,然后给它赋初值使得 s0=1、 s1=3、 s2=5、 s3=2、 s4=4、 s5=6。其他没有赋值的数组元素将自动赋值为 0。 for循环中,当 si不为偶数的时,将 si相加,即当 i=3时, si=2为偶数,退出循环,此时 d的值为d=s0+ s1+s2=1+3+5=9,因此最后输出的 d 的值为 9。
37、 29 【正确答案】 D 【试题解析】 本题中定义了一个二维数组 c和 一个指针数组 p并初始化让它指向 c,显然此时 p 中的各元素为地址,选项 A中 p+1,此时其中的 1代表的长度是整个二维数组 c的长度,故 p+1将让 p 指向 c数组后面的元素,故不能引用 c数组中的成员,选项 D中 p0指的是指针数组中的第一个元素的地址即 c的首地址,此时的 1的长度代表的是数组 C中一行的长度,故 p0+2代表的是第三行的首地址,而 *(po+2)将代表第三行的第一个元素的地址。 30 【正确答案】 C 【试题解析】 程序中定义了两个变量 a和 b,并分别赋初值为 7和 8,定义了三个指针变量
38、p、 q、 r,并让指针 p指向变量 a,让 q指向变量 b,然后通过一个中间指针变量 f,使指针变量 p和 q 互换,互换后 p 指向 q 所指的内容即 b, q 指向开始 p所指向的内容即 a,因此最后输出的 *p, *q 的值为 8, 7, a, b 的值没有改变仍为 7, 8。 31 【正确答案】 D 【试题解析】 在 C语言中字符串的比较用 stremp()函数,该函数有两个参数,分别为被比较的两个字符串。如果第一个字符串大于第二个字符串返回值大于 0,若小于返回值小于 0,相等返回值为 0。字符串比较大小的标准是从第一个字符开始依次向右比较,遇到某一个字符大, 该字符所在的字符串就
39、是较大的字符中,女B 果遇到某一个字符小,该字符所在的字符串就是较小的字符串。本题中要求当 sl所指字符串大于 s2所指串时,执行语句 s,因此应该为 stremp(s1, s2) 0或者strcmp(s2, s1) 0。 32 【正确答案】 D 【试题解析】 本题首先定义了一个一维数组并初始化,接着定义了一个指针变量 p 指向数组 x。因此可以通过指针 p的下移,即每次加 1引用数组 x中的元素,来指向数组中的每个元素,这样循环 6次即可引用数组的每个元素。选项 A、 B 和选项 C满足要求,而在选项 D中表达 式为 (*p)+,该表达式是先取 *p的值然后将其值加 1,而没有将指针下移一位
40、。 33 【正确答案】 A 【试题解析】 本题中首先定义了一个一维数组。并初始化,由于定义该数组的时候省略了长度,因此该数组的长度为初始化时候赋初值的个数即为 12。数组名 a代表数组的首地址,所以 *p=a+5语句使得 p指向数组的第 6个元素,而在程序中定义了一个指针 q并让它指向空,实际上程序并没有在内存中为指针 q 开辟存储空间,这样给 q 赋值不允许的,故该程序运行后报错。 34 【正确答案】 C 【试题解析】 本题中首先 定义了一个 3行 2列的数组 a,一个长度为 3的指针数组 p,接着把地址 a1赋给 p0此时 p0为 a10的地址, p0+1 为 a11的地址,故 *(P0+
41、1)代表的元素为 a11。 35 【正确答案】 B 【试题解析】 本题中首先定义了一个字符串数组并初始化,初始化后使得 str0 =“China”, str1=“Beijing”,然后定义一个指针变量 p 并让其指向 str,而在该二维数组中定义每个字符串的长度为 10,所以 p+10将指向 str1,因此最后输出*(p+10)的值为 Beijing。 36 【正确答案】 D 【试题解析】 本题中首先定义一个字符数组 s,并将字符串 “ABCD”存到数组 s中,定义了一个字符指针变量 p,在接下来 for循环中,循环体共执行了三次,第一次 p指向 s1,所以此时输出的 p所指的字符串的值为 B
42、CD;第二次循环 p指向 s2,所以此时输出的 P所指的字符串的值为 CD;第三次循环 p指向 s3,因此此时输出的 p 所指的字符串的值为 D。 37 【正确答案】 B 【试题解析】 在 C语言中,所谓函数的递归是在指在调用一个函数的过程中,又出现了直接或间接地调用该函数本身,直接调用该函数本身的称为函数递归,而间接调用该函数称为函数的间接递归调用。显然题目中所说得函数调用为函数的间接递归调用。 38 【正确答案】 D 【试题解析】 本题中定义了一个整型数组 a和一个整型指针变量 p。选项 A中将一个整型数赋值给一个指针变量, C语言规定,只能将地址赋给指针指针变量;选项 B中 a 5为一数
43、组元素,同样不是一个地址;选项 C中 a2为一数组元素,同样是一个整型数据,不是个地址;选项 D中数组名 a代表数组首地址加 2,代表第三个元素的地址。 39 【正确答案】 A 【试题解析】 静态局部变量在整个程序运行期间,静态局部变量在内存的静态存储区中占据着永久性的存储单元。由此可知静态局部变量的生存期将一直延长到程序运行结束。而全局变量的只有一种静态存储类别,故全局变量说明为 static存储类,和没有说明为 static存储类其生存期都是一直延长到程序运行结束;未赋初值的 auto型变量的初值是随机的,未赋初值的 static型变量的初值是 0。 40 【正确答案】 A 【试题解析】
44、选项 A为异或运算符,如果参加运算的两个位相同,结果为 0,否则为 1。显然选项 A中参加运算 c1 和 c2 相同,故其值位 0;选项 B为位与运算,如果参加运算的两位都为 1,则结果为 1,否则结果为 0,选项 B中参加运算的 c1和 c2 都为真,所以结果为 1;选项 C为取反运算,用来对一个二进制取反,显然c2 取反后不为 0,选项 D为异或运算,参加运算的两位只要有一个为 1,那么运算结果为 1,显然参加运算的 c1 和 c2 都不为 0,故运算结果不为 0。 41 【正确答案】 C 【试题解析】 指针函数是指其返回值的类型为地址即指针类型。本题中定义了一个指针类型的函数。 42 【
45、正确答案】 B 【试题解析】 主函数中定义了一个字符数组,并赋初值,一个字符串指针变量ps并让它指向 s。程序中 p+4的地址为数组第 5个元素的地址,而调用put(str_adr)函数时,将从 sb_adr这一地址开始,依次输出存储单元中的字符,遇到第一个 “0”时结束输出,并自动输出一个换行符。所以 put(p+4)将输出 n/No,put(s)将从 a第一个元素开始输出到第 3个元素结束 (因为执行 *(p+4)=0 语句后 s中的第 5个元素的值为 0,而 s中的第 4个元素为 “”, puts将遇到 “0”,结束输出 ),即输出 yes。 43 【正确答案】 B 【试题解析】 程序中
46、定义了一个无符号整型变量 a和一个整型变量 b,并且给它赋初值为 -1,整型在计算机中都以二进制表示的, -1在二进制表示为 1000 0000 0000 0001,所以当表示为无符号整数时转换为十进制为 32767,故最后输出的无符号型 a的值为 32767。 44 【正确答案】 C 【试题解析】 函数 fun()中用了一个 if语句,当数组下标 i小于数组下标 j时,交换数组元素 ai和 aj的值,并使 i值加 1, j值减 1。其功能就是把数组 a中从下标 i到 j的元素首尾互换 。主函数中定义一个数组,在定义该数组的时候缺省了定义长度,定义的同时将其初始化赋值,所以该数组的长度为初始化该数组时的元素的个数即 4,接着调用 fun(a, 0, 3),其中将 a数组的第一个元素的下标 0和最后一个元素的下标 3传给了函数 fun(),故执行完该函数后,数组 a中的元素首尾互换,因此最后依次输出的数组 a中值为 8, 1, 6和 2。 45 【正确答案】 D 【试题解析】 结构体变量也有地址,因此可以把它的地址赋值给一