1、国家二级( C语言)笔试模拟试卷 7及答案与解析 1 数据的存储结构是指 ( A)存储在外存中的数据 ( B)数据所占的存储空间量 ( C)数据在计算机中的顺序存储方式 ( D)数据的逻辑结构在计算机中的表示 2 在深度为 5的满二叉树中,结点的个数为 ( A) 32 ( B) 31 ( C) 16 ( D) 15 3 编制一个好的程序,首先要保证它的正确性和可靠性,还应强调良好的编程风格,在书写功能性注释时应考虑 ( 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 用树形结构来表示
3、实体之间联系的模型称为 ( A)关系模型 ( B)层次模型 ( C)网状模型 ( D)数据模型 9 下列对于软件测试的描述中正确的是 ( A)软件测试的目的是证明程序是否正确 ( B)软件测试的目的是使程序运行结果正确 ( C)软件测试的目的是尽可能多地发现程序中的错误 ( D)软件测试的目的是使程序符合结构 化原则 10 下列叙述中正确的足 ( A)软件交付使用后还需要进行维护 ( B)软件一旦交付使用就不需要再进行维护 ( C)软件交付使用后其生命周期就结束 ( D)软件维护是指修复程序中被破坏的指令 11 以下叙述中正确的是 ( A)构成 C程序的基本单位是函数 ( B)可以在一个函数中
4、定义另一个函数 ( C) main()函数必须放在其他函数之前 ( D)所有被调用的函数一定要在调用之前进行定义 12 变量 a已被定义为整型,下列表达式有错的是 ( A) a=A+20 ( B) a-=a ( C) a=c+d ( D) a=c+d 13 以下选项中合法的用户标识符是 ( A) long ( B) _2Test ( C) 3Dmax ( D) A,dat 14 下列选项中,不能用作标识符的是 ( A) _1234_ ( B) _1_2 ( C) int_2_ ( D) 2_int_ 15 有以下定义语句 double a,a; int w; long c; 若各变量已正确赋值
5、,则下列选项中正确的表达式是 ( A) a=a+b=b+ ( B) w%(int)a+b) ( C) (c+w)%(int)a ( D) w=a=b 16 设 a和 b均为 double型变量,且 a=5.5、 b=2.5,则表达式 (int)a+b/b的值是 ( A) 6.5 ( B) 6 ( C) 5.5 ( D) 6 17 数据独立性是数据库技术的重要特点之一。所谓数据独立性是指 ( A)数据与程序独立存放 ( B)不同的数据被存放在不同的文件中 ( C)不同的数据只能被对应的应用程序所使用 ( D)以上三种说法都不对 18 设变量 x为 float型且已赋值,则以下语句中能将 x中的数
6、值保留到小数点后两位,并将第三位四舍五入的是 ( A) x=x*100+0.5/100.0; ( B) x=(x*100+0.5)/100.0; ( C) x=(int)(x*100+0.5)/100.0; ( D) x=(x/100+0.5)*100.0; 19 有以下程序 main () int i; for(i=0;i 3;i+) switch(i) case 1: printf (“%d“,i); case 2: printf (“%d“, i); default: printf (“%d“,i); 执行扣输出的结果是 ( A) 11122 ( B) 12 ( C) 12020 ( D
7、) 120 20 以下程序段中与语句 k=a b?(b c?1:0):0;功能等价的是 ( A) if(a b) else k=0; ( B) iff(a b)(b c) k=1; else k=0; ( C) iffa =b) k=0; else iffb =c) k=1; ( D) if(a b) k=1; else if(b c) k=1; else k=0; 21 已有定义: Mt x=3,y=4,z=5;,则表达式 !(x/y)+z-1continue; i+; s+=i; while(i 7);. printf(“%dn“,s); 执行后输出的结果是( )。 ( A) 16 ( B
8、) 12 ( C) 28 ( D) 21 25 已定义 ch为字符型变量,以下赋值语句中错误的是 ( )。 ( A) ch=; ( B) ch=62+3 ( C) ch=NULL; ( D) ch=xaa; 26 有以下程序: main() int a=15,b=21,m=0; switch(a%3) case 0:m+;break; case 1:m+; switch(b%2) default: m+; case 0:m+;break; rintf(“%dn“,m); 程序运行后的输出结果是 ( )。 ( A) 1 ( B) 2 ( C) 3 ( D) 4 27 以下能正确定义二维数组的是
9、( )。 ( A) int a3; ( B) int a3=2*3; ( C) int a3=; ( D) int a23=1, 2, 3, 4; 28 以下正确的字符串常量是 ( )。 ( A) ( B) abc ( C) Olympic Games 29 若程序中已包含头文件 stdio.h,以下选项中,正确运用指针变量的程序段是( )。 ( A) int*i=NULL; ( B) float*f=NULL; ( C) chart=m, *c= strcat(p,r); strcpy(p+strlen(q),q); printf(“%dn“,strlen(p); 程序运行后的输出结果是 (
10、 )。 ( A) 9 ( B) 6 ( C) 11 ( D) 7 39 设有如下说明: typedef struct int n; char c; double x; STD; 则以下选项:能正确定义结构体数组并赋初值的语句是 ( )。 ( A) STDtt2=1,A,62,2,B,75; ( B) STDtt2=1,“A“,62,2,“B“,75; ( C) struet tt2= 1,A,2,B; ( D) struct tt2=1,“A“,62.5,2,“B“,75.0; 40 有以下程序: int fun(int x,int n) static iht sum=O, i; for(i=
11、O;i ( A) 45 ( B) 50 ( C) 60 ( D) 55 41 有以下程序: main(int argc, char *argv) int n=0,i; for (i=1; i argc; i+) n=n*10+*argvi-0; printf(“%dn“,n); 编译连接后生成可执行文件 tt.exe。若运行时输入以下命令行 tt 12 345 678 程序运行后的输出结果是 ( )。 ( A) 12 ( B) 12345 ( C) 12345678 ( D) 136 42 有以下程序: main() char s=“Yesn/No“, *ps=s; puts(ps+4); *
12、(ps+4)=0; puts(s); 程序运行后的输出结果是 (选项 D中的第一行是空行 ) ( )。 ( A) n/No Yes /No ( B) /No Yes ( C) /No Yes /No ( D) /No Yes 43 有以下程序: #include stdio.h #define N 5 #define M N+1 #define f(x) (x*M) main() int i1, i2; i1=f(2); i2=f(1+1); printf(“%d%dn“, i1, i2); 程序的运行结果是 ( )。 ( A) 12 12 ( B) 11 7 ( C) 11 11 ( D)
13、12 7 44 以下程序段十,不能正确赋字符串 (编译时 系统会提示错误 )的是 ( )。 ( A) chars10=“abedefg“; ( B) char t=“abcdefS“, *s=t; ( C) chars10; s=“abcdefg“; ( D) chars10; strcpy(s,“abcdefg“); 45 设有如下定义, struct sk int a; float b; data; int*p; 若要使P指向 data中的 a域,正确的赋值语句是 ( )。 ( A) p= scanf(“%d“, if(a 50) printf(“%d“,a); if(a 40) prin
14、tf(“%d“,a); if(a 30) printf(“%d“,a); 57 以下程序用于判断 a、 b、 c能否构成三角形,若能,输出 YES,否则输出NO。当给 a、 b、 c输入三角形三条边长时,确定 a、 b、 c能构成三角形的条件是需同时满足三个条件: a+b c, a+c b, b+c a。 请填空。 main() float a,b,c; scanf(“%f%f%f“, if(【 】 ) printf(“YESn“); /*a、 b、 c能构成三角形 */ else printf(“NOn“); /*a、 b、 c不能构成三角形 */ 58 以下程序运行后的输出结果是【 】。
15、main() int a=3,b=4,c=5,t=99; if(b a a=c;c=t; if(a c b=a;a=t; printf(“%d %d %dn“,a,b,c); 59 有以下程序: main() int n=0,m=1,x=2; if(!n) x-=1; if(m) x-=2; if(x) x-=3; printf(“%dn“,x); 执行后输出的结果是【 】。 60 以下程序的输出结果是【 】。 #include string.h main() printf(“%dn“,strlen(“IBMn0121“); 61 有以下程序: void f(int y,int *x) y=y
16、+*x; *x=*x+y; main() int x=2,y=4; f(y, printf(“%d %dn“,x,y); 执行后输出结果是上【 】。 62 函数 fun的功能是计算 xn。 double fun(double x,int n) int i;double y=1; for(i=1;i =n;i+) y=y*x; return y; 主函数 中已正确定义 m、 a、 b变量并赋值,并调用 fun函数计算: m=a4+b4-(a+b)3。实现这一计算的函数调用语句为【 】。 63 以下函数 sstrcat()的功能是实现字符串的连接,即将 t所指字符串复制到 s所指字符串的尾部。例如
17、: s所指字符串为 abed, t所指字符串为 efgh,函数调用后 s所指字符串为 abodefgh。请填空。 #include string.h void sstrcat(char *s,char *t) int n; n=strlen(s); while(*(s+n)=【 】 )s+;t+; 64 以下程序运行后的输出结果是【 】。 #include string.h char *ss(char *s) char *p;t; p=s+1;t=*s; while(*p)*(p-1)=*p;p+; *(p-1)=t; return s; main() char *p,str10=“abcde
18、rgh“; p=ss(str); printf(“%sn“,p); 65 以下程序的输出结果是【 】。 int fun(int *x,int n) if(n=0) return x0; else return x0+fun(x+1,n-1); main() int a=1,2,3,4,5,6,7; printf(“%dn“,fun(a,3); 66 下面程序的运行结果是【 】。 void swap(int *a,int *b) int *tp; t=a;a=b;b=t; main() int x=3,y=5,*p= swap(p,q); printf(“%d%dn“,*p,*q); 67 下面
19、程序的功能是建立一个有 3个结点的单循环链表,然后求各个结点数值域data中数据的和,请填空。 #include stdio.h #include stdlib.h struct NODE int data; struct NODE *next; ; main() struct NODE *p,*q,*r; int sum=0; p=(struct NODE*)malloc(sizeof(struct NODE); q=struct NODE*)malloc(sizeof(struct NODE); r=(struct NODE*)malloc(sizeof(struct NODE); p-
20、data=100; q- data=200; r- data=300; p- next=q; q- next=r; r- next=p; sum=p- data+p- next- data+r- next- next 【 】 ; printf(“%dn“,sum); 68 有以下程序,其功能是:以二进制 “写 ”方式打开文件 d1.dat,写入 1 100这100个整数后关闭文件。再以二进制 “读 ”方式打开文件 d1.dat,将这 100个整数读入到另一个数组 b中,并打印输出。请填空。 #include stdio.h main() FILE *fp; int i,a100,b100; f
21、p=fopen(“d1.dat“,“wb“); for(i=0;i 100;i+) ai=i+1; fwrite(a,sizeof(int),100,fp); fclose(fp); fp=fopen(“d1.dat“,【 】 ); fread(b,sizeof(int ),100,fp); fclose(fp); for(i=0;i 100;i+) printf(“%dn“,bi); 69 函数 sstrcmp()的功能是对两个字符串进行比较。当 s所指字符串和 t所指字符串相等时,返回值为 0;当 s所指字符串大于 t所指字符串时,返回值大于 0;当 s所指字符串小于 t所指字符串时,返回
22、值小于 0(功能等同于库函数 strcmp()。请填空。 #include stdio.h int sstrcmp(char *s,char *t) while(*s t+; rerurn 【 】 ; 国家二级( C语言)笔试模拟试卷 7答案与解析 1 【正确答案】 D 【试题解析】 数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构,也称数据的物理结构。所以选项 D正确, 2 【正确答案】 B 【试题解析】 二叉树有如下性质:深度为 m的二叉树最多有 2的 m次方再减 1个结点。由此可知答案为 B。 3 【正确答案】 C 【试题解析】 功能性注释是嵌在源程序体中的,用以描述其后的语
23、句或程序段是在做什么工作,或者执行了下面的语 句会怎么样。所以它描述的是一段程序,是为程序段做注释,而不是每条语句。 4 【正确答案】 C 【试题解析】 栈是一种特殊的线性表,其插入与删除运算都只在线性表的一端进行。由此可见,选项 A、选项 B和选项 D错误,正确答案是选项 C。 5 【正确答案】 C 【试题解析】 详细设计的任务是:在使用程序设计语言编程以前,对所采用算法的逻辑关系进行分析,并给予清晰的表达。需求分析是指用户对目标软件系统在功能、行为、性能、设计约束等方面的希望。编程调试任务是诊断和改正程序中潜在的错误。软件功能分解只能发 生在总体设计阶段。 6 【正确答案】 A 【试题解析
24、】 在数据库管理系统提供的数据语言中,数据定义语言负责数据的模式定义与数据的物理存取构建。 7 【正确答案】 B 【试题解析】 数据库的概念模型体现了数据之间的关系,它是各种数据之间相互关系的集合。 8 【正确答案】 B 【试题解析】 关系模型以二维表表示实体之间的联系,网状模型以一个不加任何条件限制的无向图表示实体之间的联系。层次模型的基本结构为树形结构而 D选项数据模型包括关系模型,网状模型和层次模型。 9 【正确答案】 C 【试题解析】 软件测试的目标是在精心控制的环境下执行程序,以发现程序中的错误,给出程序可靠性的鉴定。测试不是为了证明程序是正确的,而是在设想程序有错误的前提下进行的,
25、其目的是设法暴露程序中的错误和缺陷。可见选项 C的说法正确。 10 【正确答案】 A 【试题解析】 本题考核软件维护的概念维护是软件生命周期的最后一个阶段,也是持续时间最长、付出代价最大的阶段,在软件交付使用后,还需要进行维护。软件维护通常有以下四类:为纠正使用中出现的错误而进行的改正性维护;为适应环境变 化而进行的适应性维护;为改进原有软件而进行的完善性维护;为将来的可维护和可靠而进行的预防性维护。软件维护不仅包括程序代码的维护,还包括文档的维护。综上所述,本题的正确答案是 A,其余选项的说法错误。 11 【正确答案】 A 【试题解析】 本题主要考查 C程序的基本组成单位、函数的定义以及函数
26、的调用关系。根据函数的定义语法规定,在 c语言程序中,不能嵌套定义,即不能在函数中再定义函数,故排除选项 B; main() 数在 C语言程序中是必须的,但函数可以放在程序中的任意位置,故排除选项 C;当在所有函数的外部、 被调用之前说明函数时,在函数说明后面的任何位置上都可以对函数进行调用;函数说明也可以放在调用函数的说明部分,如在 main函数内部进行说明,则只能在 main函数内部才能识别函数,故选项 D被排除。选项 A符合题意。 12 【正确答案】 C 13 【正确答案】 B 【试题解析】 本题考查 C语言标识符的命名在 C语言中,合法的标识符由字母,数字和下划线组成,并且第一个字符必
27、须为字母或者下划线, long为 C语言的保留字,不能作为用户标识符,故选顷 A错误 3Draax开头的第一个为数字,而 C语言规定,第一个 字符必须为字母或者下划线,故选项 C错误; A dat中的字符 “.”不符合 C语言中用户标识符只能由字母、数字和下划线组成的规定,故选项 D错误只有迭项 B正确。 14 【正确答案】 L8 【试题解析】 本题考核的知识点是用户的标识符。在 C语言中,合法的标识符由字母、数字和下划线组成,并且第一个字符必须为字母或者下划线,如: acd,d_ad、 _adf124, _124等都是合法的标识符号而 2asdf、 _sd/=都不是合法的标识符在 C语言中大
28、写字母和小写字母被认为是两个不同的字符,如: ACD和acd是两个不同的标识符号。选项 D中用下划线作为第一个字符,这是不合法的,故选项 D不正确,所以, 4个选项中选项 D符合题意。 15 【正确答案】 C 【试题解析】 本题考核的知识点是 C语言中一些运算符的简单应用。选项 A中不是合法的赋值语句,将最右边的第一个般值表达式加括号即为 a=b+(b=b+)才正确,故选项 A不正确;选项 B中运算符 “%”的对象必须是整型,而在选项 B中(int)a+b为 double型,故选项 B不正确;选项 a, b都为, double“=”应该改为“=”,故选项 D不正确所以, 4个选项中选 项 C符
29、合题意。 16 【正确答案】 D 【试题解析】 本题考查的知识点是运算符的优先级。在这个表达式中,优先级最高的是 (int)a,也就是对 5.5取整,结果是 5,其次是 b/b,即 2.5/2.5,结果是1.000000,最后相加结果为 6.000000(表达式的最终结果为实型 ),所以 4个选项中D正确。 17 【正确答案】 D 【试题解析】 数据具有两方面的独立性:一是物理独立性。即由于数据的存储结构与逻辑结构之间由系统提供映象,使得当数据的存储结构改变时,其逻辑结构可以不变,因此,基于逻辑 结构的应用程序不必修改。二是逻辑独立性。即由于数据的局部逻辑结构 (它是总体逻辑结构的一个子集,曲
30、具体的应用程序所确定,并且根据具体的需要可以作一定的修改 )与总体逻辑结构之间也由系统提供映象,使得当总体逻辑结构改变时,其局部逻辑结构可以不变,从而根据局部逻辑结构编写的应用程序也可以不必修改。综上所述,本题的正确答案是 D。 18 【正确答案】 C 【试题解析】 本题考核的知识点是实型变量中小数点的位数。选项 A中0.5/100.0将保留小数点后六位,不满足题目要求,故选项 A不正确:选项 B和选项 D也将保留 小数点后六位,不满足题目要求,故选项 B不正确:所以, 4个选项中选项 C符合题意。 19 【正确答案】 A 【试题解析】 本题考核的知识点是 for循环和 switch语句的综合
31、运用。 for循环执行了 3次,第一次时 i的值为 0,执行其后的 switch语句,没有匹配的 case,执行 default语句后的 pdntf语句,输出为 0;第二次循环时 i的值为 1,执行其后的 switch语句,与第一个 case分支匹配,执行其后的 printf语句,输出 1,由于没有遇到 break语句,所以一直向下执行,又输出了两个 1,第三 次循环时 i值为 2,执行其后的 switch语句,同理输出两个 2。所以, A选项为所选。 20 【正确答案】 A 【试题解析】 本题考核的知识点是三目运算符 “?:”的运用:三目运算表达式的规则为如果 “?”前面的表达式的值为真,则
32、取 “:”前的表达式的值,否则,取 “:”后面表达式的值。分析题目中给出的表达式可知,如果 a b和 b c同时成立, k=1,否则 k=0所以, 4个选项中选项 A符合题意。 21 【正确答案】 D 【试题解析】 本题中, &左边的表达式 !(x+y)为 !(3+7),结果为假,即为 0。再加上 2,然后减一,相当于 0+5-1=4。左边等于 4, &右边的表达式 y+z/2相当于4+5/2为 6,所以整个表达式相当于 4&6为真,即为 1,所以选项 D正确。 22 【正确答案】 C 【试题解析】 强制类型转换运算符的格式是: (类型名 )变量名 所以将浮点型变量 f转换为整型应写作 (in
33、t)f,故选项 C是错误的。 23 【正确答案】 C 【试题解析】 在本程序的 for循环中,用到了一个 continue语句, continue语句的作用是停止本次循环,即不执行循环体内 continue语句后面的其他语句,继续下次循环的条件判断。首先在 for循环中 n自加 1(值变为 1),然后执行后面的 if语句,由于 if语句后面括号的表达式 (1%3!=0)的值为真,程序执行 continue语句,回到 for循环的开始部分,并且判断 for循环中的条件表达式 (n k)为真,重复执行 “n+”; ”语句,如此循环直到 n=3时, if语句判定条件中表达式 (3%3!=0)的值为假
34、,程序执行 if语句后面的 “k-”语句,此时 k的值为 3,不满足 “n k”,退出 for循环。故最后的 k和 n的值为 3和 3,选项 C符合题意。 24 【正确答案】 A 25 【正确答案】 A 【试题解析】 选项 A中 “”为转义字符应该用 “”来表示,故选项 A错误;选项 B中将一个整数赋值给字符变量,正确:选项 c将一个空值赋值给字符变量,正确;选项 D将一个用十六进制数表示的转义字符赋值给字符变量,正确。所以, 4个选项中选项 A符合题意。 26 【正确答案】 A 【试题解析】 本题中首先计算 switch后面括号里的表达式 a%3,即 15%3为0;执行 case 0:后面的
35、语句 m+: m自加 1,即 m为 1遇到 break语句;然后跳出 switch语句,所以最后输出的 m的值为 1。所以选项 A正确。 27 【正确答案】 B 【试题解析】 选项 A中省略了第一维的长度,在 C语言中是不允许的,故选项A错误;选项 C也是省略第一维的长度;选项 D中定义了一个 2行 3列的数组,而在赋值的时候却赋了一个 3行的值给它,显然不正确,故选项 D错误,所以, 4个选项中选项 B符合题意。 28 【正确答案】 D 【试题解析】 在 C语言中,字符串常量是以双引号括起来的字符序列。故选项 B和 C不正确。字符序列中可包含一些转义字符,转义字符都是以 “”开头的。选项A中
36、包 含了三个 “”,前两个 ()代表了一个 “”字符,后面一个和 “”一起 (”)被看作一个 ,所以该字符串缺少一个结束的 “”,故不正确。选项 D的两个 之间没有任何字符,代表的是一个空串,是合法的字符串常量,故应该选择 D。 29 【正确答案】 D 【试题解析】 选项 A定义了一个整型变量 i,并且初始化让它指向 NULL,接着通过 scanf()函数,改变 i指向的存储空间的值,选项 A中首先定义了整型指针变量 i并初始化为 NULL,即表示指针 i不指向任何内存,即此时程序还没有为 i在内存中开辟存储单元,而在 scanf0函数中第二个参数是地址参数,显然在这里 i不在表示地址,所以下
37、面的 scanf(“%d“,i)语句足不正确的,故选项 A不正确;选项 B定义了一个浮点型变量 f并初始化让它指向 NULL,而当一个指针变量指向NULL以后不能在给它赋值,而接下来的程序中为其赋了一值;故选项 B错误;选项 C中首先定义了一个字符变量 t并给它赋初值 m,然后定义个字符型指针 c并让它指向了变量 t,这一部分正确,然后接着用了 个语句 “*c=&t; ”应该将该语句中 c前的 “, ”去掉,故选项 C运用指针变量不正确。所以, 4个选项中选项 D符合题 意。 30 【正确答案】 A 【试题解析】 aaa()函数中,首先定义了一个字符指针 t指向形参 s,然后通过一个 whil
38、e循环让指针 t不断递增,直到 t指向字符串结束标志处。当 t指向结束标志处时,由于后缀 4-+运算符的原因,它还会被再递增 1,所以接下来的 t-;语句让它回到结束标志处。最后返回 t-s,因此 s还是指向字符串第 1个字符处,而 t指向了字符串结尾,故返回值为字符串的长度值。 31 【正确答案】 C 【试题解析】 本题中定义两个字符型数组,其中 a省略了长度,定义了 b的长度为 10,并赋 初值分别为 “abcdefg”和 “abcdefg”。所以 a的长度为赋值给它的字符串的字符个数 7加上一个结束转义字符,即 a的长度为 7+1为 8。定义时 b的长度定义为 10,故 b的长度为 lo
39、,因此最后通过函数 sizeom求得的数组 a和数组 b的长度分别为 8和 10,所以, 4个选项中选项 c符合题意。 32 【正确答案】 B 【试题解析】 通过赋值语句 “s=x+3”,使指针变量 s指向数组元素 x3,输出语句中的 spl等价于 *(s+2),即 x5值为 0。所以, B选项为所选。 33 【正确答案】 A 【试 题解析】 本题中首先定义了一个 维数组 a并初始化,由于定义该数组的时候省略了长度,因此该数组的长度为初始化时候赋初值的个数即为 12。数组名 a代表数组的首地址,所以 *p=a+5语句使得 p指向数组的第 6个元素,而在程序中定义了一个指针 q并让它指向空,实际
40、上程序并没有在内存中为指针 q开辟存储空间,这样给 q赋值不允许的,故该程序运行后报错。所以, 4个选项中选项 A符合题意。 34 【正确答案】 B 【试题解析】 二维字符数组可以看成由若干个一维字符数组组成,每行是一个一维字符数组。本题首先定义了一个数组 ch35,并给它们按行赋初值,即相当于给 eh0赋值 “AAAA”,给 ch1赋值 “BBB”,给 eh2赋值 “BBB”,最后输出转义字符 “叮 ”、 ch1和转义字符 “”,因此输出为 “BBB”。所以, 4个选项中 B为所选。 35 【正确答案】 D 【试题解析】 C语言规定,在定义数组时数组名后的方括号中必须是常量表达式,不能包含变
41、量。因此,选项 D中用变量 n来定义数组的大小是错误的。故应该选择 D。 36 【正确答案】 C 【试题解析】 函数的返回值应该为 return后面的表达式的值, 在本题中的表达式为 *p, *p指的是形参 p所指存储单元中的值,所以, 4个选项中选项 C符合题意。 37 【正确答案】 D 【试题解析】 C语言中只有字符串常量而没有字符串变量,故选项 A不正确:字符串比较大小是以第 1个不相同字符的大小为标准的,跟长度没有关系,故选项 B不正确:字符串比较大小除了使用库函数 stremp()以外,就只能靠自己写代码来实现了,而不能通过关系运算符来比较大小,因为字符串在表达式中相当于coost
42、char*,即常字符指针,代表的是字符串的首地址,关系运算符会将两个字符串的首地址值 比较大小,这是毫无意义的。所以选项 C也不正确。空串的长度为0,而以空格打头的字符串的长度至少为 1,故选项 D正确,本题应该选择 D。 38 【正确答案】 B 【试题解析】 本题首先定义了 3个字符数组 p、 q、 r并分别被初始化。数组 p指定的大小为 20,初始化列表为 a,b, c, d,即只指定了前 4个元素的内容,根据 C语言的规定,初始化列表不足时,其余元素均自动初始化为 0。然后通过strcat()函数,将字符串,连接到字符串 p之后,即执行后 p中的内容为“abcdabcde“。因为 “st
43、rlen(q)”表示求字符串 q的长度,很明显为 3,所以语句“strcpy(p+strlen(q), q); ”的作用就是:将字符串 q拷贝到数组 p的第 3个元素位置处。注意, strcpy函数拷贝字符串会将其结束标志位一起拷贝,故拷贝完后 p中的内容为 ”ababc0de“,但通过 strlen函数取 p的长度碰到 0即停止,故 p中字符串的长度是 6,应该选择 B。 39 【正确答案】 A 【试题解析】 本题定义了一个结构体类型并白定义类型名为 STD,用户自定义类型后,就可以利用它进行变量与数组的定义。定义的方法,与 C语言中其它类型的定义完全一样,定义结构型数组并赋初值时,每个元素
44、用一对 “”和 “厂括起来,字符型元素用 ” 括起来,选项 A、 B、 C、 D中只有选项 A符合条件。所以, A选项为所选。 40 【正确答案】 C 【试题解析】 本题中 fun()函数通过一个 for循环来累计形参数组 x的前 n个元素之和。在主函数中,第 1次调用 fun(a,5)时,返回的值应该是数组 a的前 5个元素的和,而第 2次调用 fun(b,4)时,返回的值除了本次累计的数组 b前 4个元素的和外,还要加上上次累计的值。所以,最后输的 s的值为数组 a所有 元素之和的两倍加上数组 b所有元素之和,结果是 60。故应该选择 C。 41 【正确答案】 D 【试题解析】 因为题目给
45、出的命令行为 tt 12 345 678,所以 main函数的两个参数分别为 4和 “tt“, “12“, “345“, “678“)。程序中,通过一个 for循环,遍历了后面的三个参数字符串,每次将 n自乘 10,然后累加 *argvi-0,即第 i个参数字符串的首字符减去 0。一个数宁字符减去, O字符,即可得到这个数字字符的实际数值,因此三次循环的结果是让 n的值变为 136,故本题应该选择 D。 42 【正确答案】 B 【试题解析】 主函数中定义了一个字符数组 s并赋初值,一个字符串指针变量 ps并让它指向 s。程序中 p+4的地址为数组第 5个元素的地址,而调用 put(str ad
46、r)函数时,将从 str adr这一地址开始,依次输出存储单元中的字符,遇到第一个“0”时结束输出,并自动输出一个换行符 ad。 r所以 put(p+4)将输出 n/No, put(s)将从 s第一个元素开始输出到第 3个元素结束 (因为执行 *(p+4)=0语句后 s中的第 5个元素的值为 0,而 s中的第 4个元素为 “”, puts将遇到 “0”,结束输出 ),即输出 yes。所以, 4个选项中选项 B符合题意。 43 【正确答案】 B 【试题解析】 题目中第 1条要替换的语句 i1=f(2);展开后是 i1=(2*M);再展开为 i1=(2*N+1);最后展开为 i1=(2*5/1),
47、结果使 i1=11。而第 2条语句 i2=f(1+1);展开后为 i2=(1+1*M);再展开为 i2= (1+1*N+1);最后展开为 i2=(1+1*5+1),结果使 i2=7。故应该选择 B。 44 【正确答案】 C 【试题解析】 选项 A中定义了一个字符型数组并赋初值, 故选项 A正确;选项B定义了一个字符型数组 t并初始化,然后定义了一个指针变量 s并让它指向 t,故选项 B正确;选项 C先定义了一个长度为 10的字符型数组,然后在给它赋值,这时应该分别给数组中的每个元素赋值,故选项 c不正确:选项 D中先定义了一个长度为 10的字符型数组 s,然后通过字符串拷贝函数将字符串 “abcdefs”赋值给它,选项 D正确。所以, 4个选项中选项 C符合题意。 45 【正确答案】 C 【试题解析】 data是 结构体变量, a是它的成员,因此引用 a域的正确方法是: data.a,取它的地址赋值给指针变 量 p的语句应该是: p=&data.a。选项 A,将 a的地址直接赋给了 p,而忽略了 a为结构体内部的一个成