1、国家二级(C 语言)机试模拟试卷 143及答案解析(总分:86.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.下列数据结构中,能够按照“先进后出”原则存取数据的是( )。(分数:2.00)A.栈B.循环队列C.队列D.二叉树2.下列数据结构中,属于非线性结构的是( )。(分数:2.00)A.顺序队列B.带链队列C.顺序栈D.二叉树3.在循环队列数据结构中,下列叙述中正确的是( )。(分数:2.00)A.队头指针是固定不变的B.队头指针一定大于队尾指针C.队头指针可以大于队尾指针,也可以小于队尾指针D.队头指针一定小于队尾指针4.计算机术语中算法的空间复杂度是指(
2、)。(分数:2.00)A.算法在执行过程中所需要的临时工作单元数B.算法所处理的数据量C.算法程序中的语句或指令条数D.算法在执行过程中所需要的计算机存储空间5.计算机软件设计过程中,符合划分模块的准则的选项是( )。(分数:2.00)A.低内聚低耦合B.高内聚高耦合C.低内聚高耦合D.高内聚低耦合6.计算机程序设计过程中,不属于结构化程序设计原则的是( )。(分数:2.00)A.可封装B.模块化C.自顶向下D.逐步求精7.软件详细设计生产的图如下图: (分数:2.00)A.N一 S图B.PAD图C.程序流程图D.E一 R图8.计算机数据库管理系统是( )。(分数:2.00)A.操作系统的一部
3、分B.一种操作系统C.一种编译系统D.在操作系统支持下的系统软件9.在 E一 R图中,用来表示属性的图形是( )。(分数:2.00)A.椭圆形B.矩形C.菱形D.三角形10.有三个关系表 R、S 和 T,其内容如下: (分数:2.00)A.选择B.求差C.求交D.并11.以下关于 C程序叙述中正确的是( )。(分数:2.00)A.程序的执行总是从程序的第一个函数开始,在 main函数结束B.程序的执行总是从 main函数开始,在程序的最后一个函数中结束C.程序的执行总是从 main函数开始D.程序的执行总是从程序的第一个函数开始,在程序的最后一个函数中结束12.以下关于结构化程序设计的叙述中正
4、确的是( )。(分数:2.00)A.在 C语言中,程序的模块化是利用函数实现的B.结构化程序使用 goto语句会很便捷C.一个结构化程序必须同时由顺序、分支、循环三种结构组成D.由三种基本结构构成的程序只能解决小规模的问题13.若 a是数值类型,则逻辑表达式 a=1)(a!=1)的值是( )。(分数:2.00)A.0B.1C.2D.不知道 a的值,不能确定14.以下定义语句中正确的是( )。(分数:2.00)A.int x=y=2;B.char A=65 b=b;C.float a=1,*b=&a,*c=&b;D.double a=00+1,b=11:15.以下选项中符合 C语言语法的是( )
5、。(分数:2.00)A.x+1=yB.x+,y=xC.x=x+10=x+yD.float(x)1016.在 C程序中已经定义三个整型变量 x,y,z,要通过语句:scanf(d,d,d,&x,&y,&z);给 x赋值 1、给 y赋值 2、给 z赋值 3,以下输入形式中错误的是( )。(注:口代表一个空格符)(分数:2.00)A.1,2,3回车B.口口口 1,2,3回车C.1,口口口 2,口口口 3回车D.1口 2口 3回车17.若要打印出字符 A,以下语句不正确的是( )。(注:字符 A的 ASC码值为 65,字符 a的 ASC码值为97)(分数:2.00)A.printf(cn,a一 32)
6、;B.printf(cn,B1);C.printf(cn,65);D.printf(dn,A);18.C语言的合法常量是( )。(分数:2.00)A.3,100B.25E50C.D.00219.设有定义:int a=1,b=2,c=3;以下语句中执行效果与其他三个不同的是( )。(分数:2.00)A.if(ab) c=a;a=b;b=c;B.if(ab)e=a,a=b,b=c;C.if(ab)c=a,a=b,b=c;D.if(ab)c=a;a=b,b=c;20.有以下程序: #include void main() int y=1; while(y);y;printf(y=dn,y); 程序执
7、行后的输出结果是( )。(分数:2.00)A.y=0B.y=一 1C.y=1D.while构成无限循环21.有以下程序: #include void main() int i,j; for(i=1;i3;i+) for(j=i;j3;j+)printf(d*d=d,i,j,i*j); printf(n); (分数:2.00)A.1*1=1 1*2=2 2*2=4B.1*1=1 1*2=2 2*1=2 2*2=4C.1*1=1 1*2=2 2*2=4D.1*1=1 1=1 2*1=2 2*2=422.有以下程序: #include void main() int i=7; do if(i3=1)
8、 if(i5=2) printf(*d,i);break; i+: while(i!=0); printf(n); 程序运行后的输出结果是( )。(分数:2.00)A.*7B.*3,*5C.*5*3D.*7*823.有以下程序: #include float f(float x); void main() float a=0; for(int i=2;i5;i+)a+=f(float)i); printf(30fn,A); float f(float x) return x*x+1; 程序运行后的输出结果是( )。(分数:2.00)A.32B.29C.33D.2824.对函数 int fun(
9、float x10,int*n)声明正确语句是( )。(分数:2.00)A.int fun(float,int);B.int fun(float*,int*);C.int fun(float*x,int n);D.int fun(float x,int*n);25.有以下程序: #nclude void main() int x=1,y=2,*p=&x,*q=&y,*r; r=p;p=q;q=r; printf(d,d,d,dn,x,y,*P,*q); 程序运行后的输出结果是( )。(分数:2.00)A.2,1,1,2B.1,2,1,2C.1,2,2,1D.2,1,2,126.若有以下定义:i
10、nt a10,*pt=x;则对 a数组元素的正确引用是( )。(分数:2.00)A.pt+4B.*&a10C.*(pt+10)D.*(a+5)27.有以下程序: #nclude void main() int i,s=0,t=1,2,3,4,5,6,7,8,9; for(i=0;i9;i+=2)s+=*(t+i); printf(dn,s); 程序执行后的输出结果是( )。(分数:2.00)A.25B.20C.40D.3628.有以下程序: #include #define N 4 void fun(int aN,int b) int i; for(i=0;iN;i+)bi=aii; void
11、 main() int xN=1,2,3,4,3,5,6,7,8,9,10,11,yN,i; fun(x,y); for(i=0;iN;i+)printf(d,yi); printf(n); 程序运行后的输出结果是( )。(分数:2.00)A.1,3,5,9,B.1,2,3,4,C.1,3,7,0,D.3,4,8,1029.C语言中定义了字符指针,char*c,则将 c指向一个字符串的是( )。(分数:2.00)A.char ss=text;c=ss;B.scanf(s,c);C.c=getchar();D.*c=text;30.若有定义语句:char str8=abcdef00;则 strl
12、en(str)的值是( )。(分数:2.00)A.6B.7C.8D.931.有以下程序: #include #include void main() char s115=a,b,c,d,s2=abcd,s3=abcde; strcat(s1,s3);strcpy(s1+strlen(s2),s2); printf(dn,strlen(s1); 程序运行后的输出结果是( )。(分数:2.00)A.6B.7C.8D.932.有以下程序(说明:字母 A的 ASC码值是 65): #include void fun(char*s) while(*s) if(*s2)printf(c,*s); s+;
13、void main() char a=BYTE; fun(a); printf(n); 程序运行后的输出结果是( )。(分数:2.00)A.BYTEB.YTC.YED.BY33.有以下程序: #include int fun() static int x=2; return x+=1: void main() int i,s=0; for(i=1;i=5;i+)s+=fun(); printf(dn,s); 程序运行后的输出结果是( )。(分数:2.00)A.25B.11C.15D.2034.有以下程序: #include void fun2(char a,char b) printf(cc,
14、a,b); char a=1,b=2; void funl() a=3;b=4; void main() funl(); printf(cc,a,b);fun2(5,6); 程序运行后的输出结果是( )。(分数:2.00)A.1234B.3456C.1212D.343435.关于 C语言中的 typedef的叙述不正确的是( )。(分数:2.00)A.用 typedef为类型说明一个新名,通常可以增加程序的可读性B.typedef只是将已存在的类型用一个新的名字来代替C.用 typedef可以为各种类型说明一个新名,但不能用来为变量说明一个新名D.用 typedef可以增加新类型36.程序中已
15、构成如下图所示的不带头节点的单向链表结构,指针变量 s,p,q 均已正确定义,并用于指向链表节点,指针变量 S总是作为指针指向链表的第一个节点。 (分数:2.00)A.首节点成为尾节点B.删除首节点C.尾节点成为首节点D.删除尾节点37.有以下程序: #include #define S(x)2*(x)*x+1 void main() int k=1,j=3; printf(dn,S(k+j); 程序运行后的输出结果是( )。(分数:2.00)A.12B.33C.31D.2138.有以下程序:#includestdiohvoid main()FILE*pf;char*sl=Mystring,*
16、s2=Text;pf=fopen(fdat,wb+);fwrite(sl,8,1,pf);rewind(pf);*文件位置指针回到文件开头*fwrite(s2,4,1,pf);fclose(pf);以上程序执行后 fdat 文件的内容是( )。(分数:2.00)A.MystringB.TextC.MystringTextD.Textring39.若有以下程序段:int x=10:printf(dn,x2);程序运行后的输出结果是( )。(分数:2.00)A.16B.8C.4D.240.以下说法不正确的是( )。(分数:2.00)A.gets函数用于从终端读入字符串B.getchar函数用于从终
17、端读入字符C.fputs函数用于把字符串输出到终端D.fwrite函数用于以二进制形式输出数据到文件二、程序填空题(总题数:1,分数:2.00)41.给定程序中,函数 fun的作用是:不断从终端读入整数,由变量 a统计大于 10的个数,用变量 c来统计小于 10的个数,当输入 0时结束输入,并通过形参 pa和 pb把统计的数据传回主函数进行输出。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在BLANK1C 中。不得增行或删行,也不得更改程序的结构! 试题程序: #include void fun(int*px,int*py) *found* int
18、【1】; scanf(d,&k); *found* while【2】 if(k10)a+; if(k10)b+; *found* 【3】; *px=a;*py=b: main() int x,y; fun(&x,&y); printf(x=d y=dn,x,y); (分数:2.00)_三、程序修改题(总题数:1,分数:2.00)42.下列给定程序中,函数 fun的功能是:逐个比较 p、q 所指两个字符串对应位置上的字符,并把 ASC值小或相等的字符依次存放到 c所指的数组中,形成一个新的字符串。例如,若主函数中 a字符串为“aBCDeFgH”,b 字符串为“Abcd”,则 c中的字符串应为“A
19、BCDeFgH”。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件 MOD11C 中,不得增行或删行,也不得更改程序的结构!#includestdioh #includestringhvoid fun(char*P,char*q,char*c)*found*int k=l;*found*while(*P!=*q)if(*p*q)ck=*q;else ck=*p;if(*P)p+;if(*q)q+; k+;main() char a10=aBCDeFgH,b10=ABcd,c80=0;fun(a,b,c);printf(The string a:);puts(a);printf(
20、The string b:);puts(b);printf(The result:);puts(c);(分数:2.00)_四、程序设计题(总题数:1,分数:2.00)43.请编写函数 fun,其功能是:判断 t所指字符串中的字母是否由连续递增字母序列组成(字符串长度大于等于 2)。例如字符串:uvwxyz 满足要求;而字符串:uvxwyz 不满足要求。注意:部分源程序存放在PROC1C 中,请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun指定的部位填入所编写的若干语句。试题程序:#includestdioh#includestringhvoid NONO();int fun(c
21、har*t)main() char s26;printf(请输入一个字母组成的字符串:);gets(s);if(fun(s)printf(s 是由连续字母组成的字符串n,s);else printf(s 不是由连续字母组成的字符串!n,s);NONO();void NONO()*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*FILE*fp,*wf;int i; char s26,*p;fp=fopen(indat,r);wf=fopen(outdat,w);for(i=0;i10;i+)fgets(s,26,fp);p=strehr(s,n);if(p)*p=0;if(fun(
22、s)fprintf(wf,sn,s+2);else fprintf(wf,sn,strrev(s);fclose(fp);fclose(wf); (分数:2.00)_国家二级(C 语言)机试模拟试卷 143答案解析(总分:86.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.下列数据结构中,能够按照“先进后出”原则存取数据的是( )。(分数:2.00)A.栈 B.循环队列C.队列D.二叉树解析:解析:栈是先进后出原则存取数据的;队列是先进先出原则。2.下列数据结构中,属于非线性结构的是( )。(分数:2.00)A.顺序队列B.带链队列C.顺序栈D.二叉树 解析:解析
23、:二叉树是非线性结构,其他都是线性结构。3.在循环队列数据结构中,下列叙述中正确的是( )。(分数:2.00)A.队头指针是固定不变的B.队头指针一定大于队尾指针C.队头指针可以大于队尾指针,也可以小于队尾指针 D.队头指针一定小于队尾指针解析:解析:循环队列的队头指针和队尾指针均不是固定的,也没有大小之分,所以只有选项 C正确。4.计算机术语中算法的空间复杂度是指( )。(分数:2.00)A.算法在执行过程中所需要的临时工作单元数B.算法所处理的数据量C.算法程序中的语句或指令条数D.算法在执行过程中所需要的计算机存储空间 解析:解析:算法的空间复杂度指的是所需的计算机存储空间,所以只有 D
24、正确。5.计算机软件设计过程中,符合划分模块的准则的选项是( )。(分数:2.00)A.低内聚低耦合B.高内聚高耦合C.低内聚高耦合D.高内聚低耦合 解析:解析:划分模块的目的一般是希望设计的模块能够实现较高的内聚力和较低的耦合性。6.计算机程序设计过程中,不属于结构化程序设计原则的是( )。(分数:2.00)A.可封装 B.模块化C.自顶向下D.逐步求精解析:解析:结构化程序设计原则有:模块化,自顶向下,逐步求精和尽量不使用跳转语句。7.软件详细设计生产的图如下图: (分数:2.00)A.N一 S图B.PAD图C.程序流程图 D.E一 R图解析:解析:NS 图提出了用方框来代替传统的程序流程
25、图,故 A项错。PAD 图是问题分析图,是继承了程序流程图和方框图之后又一种主要用于描述软件详细设计的图形表示工具,故 B项错误。ER 图是数据库中用于表示 ER模型的图示工具,D 项也错误。正确答案为 C项。8.计算机数据库管理系统是( )。(分数:2.00)A.操作系统的一部分B.一种操作系统C.一种编译系统D.在操作系统支持下的系统软件 解析:解析:计算机程序有操作系统和应用软件。数据库管理系统是用来管理数据的系统,不属于操作系统,当然也不是操作系统的一部分,更不是编译系统。9.在 E一 R图中,用来表示属性的图形是( )。(分数:2.00)A.椭圆形 B.矩形C.菱形D.三角形解析:解
26、析:在 E一 R图中,实体集用矩形,属性用椭圆,联系用菱形。10.有三个关系表 R、S 和 T,其内容如下: (分数:2.00)A.选择B.求差C.求交D.并 解析:解析:关系 T中包含了 R和 S中的所有元素,所以是并操作。11.以下关于 C程序叙述中正确的是( )。(分数:2.00)A.程序的执行总是从程序的第一个函数开始,在 main函数结束B.程序的执行总是从 main函数开始,在程序的最后一个函数中结束C.程序的执行总是从 main函数开始 D.程序的执行总是从程序的第一个函数开始,在程序的最后一个函数中结束解析:解析:任何一个 C语言程序的执行总是从 main函数开始,以 main
27、的结束而结束。其他函数是通过函数调用来执行的。12.以下关于结构化程序设计的叙述中正确的是( )。(分数:2.00)A.在 C语言中,程序的模块化是利用函数实现的 B.结构化程序使用 goto语句会很便捷C.一个结构化程序必须同时由顺序、分支、循环三种结构组成D.由三种基本结构构成的程序只能解决小规模的问题解析:解析:结构化程序设计原则是尽量不使用跳转语句,因此,选项 B错误;程序设计中可以有多种结构中的一种或多种,因此,C 错;三种基本结构可以解决非常复杂的问题,因此 D错。13.若 a是数值类型,则逻辑表达式 a=1)(a!=1)的值是( )。(分数:2.00)A.0B.1 C.2D.不知
28、道 a的值,不能确定解析:解析:仔细分析题目发现运算符两边的值是两个相反数,所以不管 a的值是多少,结果均为真。所以答案为 B。14.以下定义语句中正确的是( )。(分数:2.00)A.int x=y=2;B.char A=65 b=b;C.float a=1,*b=&a,*c=&b;D.double a=00+1,b=11: 解析:解析:A 选项中的 y值在定义之前不能给变量 x赋值;B 选项中的分号应该为逗号;C 选项中的*b和*c 是指针变量,*c=&b 不正确;D 选项在定义时可以将一个表达式的值同时赋给正在定义的变量。因为赋值操作是先计算赋值符号(=)右边的表达式的值再将其赋给等号左
29、边的变量。15.以下选项中符合 C语言语法的是( )。(分数:2.00)A.x+1=yB.x+,y=x C.x=x+10=x+yD.float(x)10解析:解析:A 和 C选项中,不能给表达式赋值,所以错;D 中进行强制类型转换的写法有误。应该是(flaot)x;B 选项是一个逗号表达式,其中又包含一个赋值表达式,语法正确。16.在 C程序中已经定义三个整型变量 x,y,z,要通过语句:scanf(d,d,d,&x,&y,&z);给 x赋值 1、给 y赋值 2、给 z赋值 3,以下输入形式中错误的是( )。(注:口代表一个空格符)(分数:2.00)A.1,2,3回车B.口口口 1,2,3回车
30、C.1,口口口 2,口口口 3回车D.1口 2口 3回车 解析:解析:scanf()的格式中指定了要用逗号分隔输入的数值,所以在输入时必须要有逗号来分隔输入的内容,因此,选项 D错误。17.若要打印出字符 A,以下语句不正确的是( )。(注:字符 A的 ASC码值为 65,字符 a的 ASC码值为97)(分数:2.00)A.printf(cn,a一 32);B.printf(cn,B1);C.printf(cn,65);D.printf(dn,A); 解析:解析:要打印出 A,输出格式应该是c,所以选项 D错误;另外,字符是一种特殊的整型数,对应的是其 ASC码数值,所以选项 A,B,C 正确
31、。18.C语言的合法常量是( )。(分数:2.00)A.3,100B.25E50C.D.002 解析:解析:C 语言中没有千分位分隔符,所以 A错;科学计数法的指数应该为整数,所以 B错:是转义字符,但后面没有具体需要转义的字符,所以 C错;D 选项中是一个常量字符串。表达正确。19.设有定义:int a=1,b=2,c=3;以下语句中执行效果与其他三个不同的是( )。(分数:2.00)A.if(ab) c=a;a=b;b=c; B.if(ab)e=a,a=b,b=c;C.if(ab)c=a,a=b,b=c;D.if(ab)c=a;a=b,b=c;解析:解析:此题主要考查分支语句后面的表达式的
32、写法,在 C语言中,if 条件为真时只执行后面的一条语句;由于 ab 为假,所以选项 B,C,D 均不执行语句,而选项 A后面的表达式用分号隔开。所以会执行后面两条语句;另外,选项 C中出现的逗号表达式,算一个语句。20.有以下程序: #include void main() int y=1; while(y);y;printf(y=dn,y); 程序执行后的输出结果是( )。(分数:2.00)A.y=0B.y=一 1C.y=1D.while构成无限循环 解析:解析:while 后面注意不能紧跟分号,要在其后的循环体后面加分号;所以此题选项中 while(1):会构成死循环,因为后面的 y一等
33、 while结束之后才能执行。21.有以下程序: #include void main() int i,j; for(i=1;i3;i+) for(j=i;j3;j+)printf(d*d=d,i,j,i*j); printf(n); (分数:2.00)A.1*1=1 1*2=2 2*2=4 B.1*1=1 1*2=2 2*1=2 2*2=4C.1*1=1 1*2=2 2*2=4D.1*1=1 1=1 2*1=2 2*2=4解析:解析:此题要注意内循环中的变量依赖于外循环的变量,因此 i永远大于或等于 i,所以选项 B和D错;回车符是内层循环结束后打印出来的,所以选项 C不正确。22.有以下程
34、序: #include void main() int i=7; do if(i3=1) if(i5=2) printf(*d,i);break; i+: while(i!=0); printf(n); 程序运行后的输出结果是( )。(分数:2.00)A.*7 B.*3,*5C.*5*3D.*7*8解析:解析:在第一次执行循环体时,两个 if语句的判断条件均为真,所以会执行输出 i的语句。同时也会执行 break语句跳出循环,结果为 A。23.有以下程序: #include float f(float x); void main() float a=0; for(int i=2;i5;i+)a
35、+=f(float)i); printf(30fn,A); float f(float x) return x*x+1; 程序运行后的输出结果是( )。(分数:2.00)A.32 B.29C.33D.28解析:解析:子函数的功能是平方之后加 1,循环体共执行 3次,执行子函数时的形参分别是 2,3,4,求和后的结果是(2*2+1)+(3*3+1)+(4*4+1)=32。24.对函数 int fun(float x10,int*n)声明正确语句是( )。(分数:2.00)A.int fun(float,int);B.int fun(float*,int*); C.int fun(float*x,
36、int n);D.int fun(float x,int*n);解析:解析:函数声明可以只声明形参的类型,题目中的数组可以用指针代替,所以选项 B正确。25.有以下程序: #nclude void main() int x=1,y=2,*p=&x,*q=&y,*r; r=p;p=q;q=r; printf(d,d,d,dn,x,y,*P,*q); 程序运行后的输出结果是( )。(分数:2.00)A.2,1,1,2B.1,2,1,2C.1,2,2,1 D.2,1,2,1解析:解析:x 和 y只有赋值语句,其值为 1和 2;p 虽然赋了初值指向了 x,但后来又对其赋值指向了y,所以其值是 2,因此
37、选项 C正确,q 同样也在赋初值之后进行了变量赋值,其值为 x。26.若有以下定义:int a10,*pt=x;则对 a数组元素的正确引用是( )。(分数:2.00)A.pt+4B.*&a10C.*(pt+10)D.*(a+5) 解析:解析:数组引用是从 0开始,最后一个元素下标是 n1,所以选项 B和 C中的下标超限,选项 A是一个指针,正确写法应该是*(pt+4),选项 D正确,其中 a)当作指针使用,这对数组是合法的。27.有以下程序: #nclude void main() int i,s=0,t=1,2,3,4,5,6,7,8,9; for(i=0;i9;i+=2)s+=*(t+i)
38、; printf(dn,s); 程序执行后的输出结果是( )。(分数:2.00)A.25 B.20C.40D.36解析:解析:本题是将数组中的部分元素进行求和的结果。下标分别是 0,2,4,8,所以结果是1+3+5+7+9=25。28.有以下程序: #include #define N 4 void fun(int aN,int b) int i; for(i=0;iN;i+)bi=aii; void main() int xN=1,2,3,4,3,5,6,7,8,9,10,11,yN,i; fun(x,y); for(i=0;iN;i+)printf(d,yi); printf(n); 程序
39、运行后的输出结果是( )。(分数:2.00)A.1,3,5,9,B.1,2,3,4,C.1,3,7,0, D.3,4,8,10解析:解析:子函数的功能是将一个 4*4的二维矩阵的对角线上的元素赋给另外一个有 4个元素的一维数组。在主函数中定义数组时,没有指定元素默认为零,因此,主函数中的数组 x44=1,2,3,0,4,3,0,0,5,6,7,8,9,10,11,0,对角线上的元素为 1,3,7,0。29.C语言中定义了字符指针,char*c,则将 c指向一个字符串的是( )。(分数:2.00)A.char ss=text;c=ss; B.scanf(s,c);C.c=getchar();D.
40、*c=text;解析:解析:字符串是一类特殊的字符数组,字符指针仅指向一个字符,因此正确的做法是先定义一个字符串数组,再将字符指针指向该字符串的首字符,答案 A正确。选项 B只能指向最后输入的一个字符,选项 C语法错误,getchar()只能输入一个字符给字符变量,选项 D的没有语法错误,但指针 c没有被赋初值,其可能指向一个有用的内存单元,因此,直接将一个字符串存放于该地址存在系统风险。30.若有定义语句:char str8=abcdef00;则 strlen(str)的值是( )。(分数:2.00)A.6 B.7C.8D.9解析:解析:系统会在字符数组末尾加一个字符(0)作为结束符,str
41、len()会将0作为字符串的结束符,因此,本题中的字符串的实际长度是 6。31.有以下程序: #include #include void main() char s115=a,b,c,d,s2=abcd,s3=abcde; strcat(s1,s3);strcpy(s1+strlen(s2),s2); printf(dn,strlen(s1); 程序运行后的输出结果是( )。(分数:2.00)A.6B.7C.8 D.9解析:解析:strlen()是求字符串长度,strcat()是连接字符串,strcpy(a,b)是拷贝 b中的字符串,并将其存储在 a中,若出现 a+n,则是将 b存储于 a中
42、的第 n个字符之后。所以,strcat(s1,s3)会将 s3连接到 s1后面,结果是 s1=“abcdabcde,strcpy(s1+strlen(s2),s2)会将 s2拷贝到 s1中从第 4个字符之后的位置,所以 s1=abcdabcd,所以 s1的长度为 8。32.有以下程序(说明:字母 A的 ASC码值是 65): #include void fun(char*s) while(*s) if(*s2)printf(c,*s); s+; void main() char a=BYTE; fun(a); printf(n); 程序运行后的输出结果是( )。(分数:2.00)A.BYTEB
43、.YTC.YE D.BY解析:解析:子函数的功能是将字符串中 ASC码不是 2的整数倍的字符打印出来,A=65,B=66,E=69,据此便可以判断选项 C正确。不用再考查 Y的值是多少。33.有以下程序: #include int fun() static int x=2; return x+=1: void main() int i,s=0; for(i=1;i=5;i+)s+=fun(); printf(dn,s); 程序运行后的输出结果是( )。(分数:2.00)A.25 B.11C.15D.20解析:解析:静态变量只在初次定义时赋初值,以后使用时将调用其之前的值;主函数的循环体执行 5
44、次,进行 s的叠加,每次叠加为子函数的返回值,所以结果为 0+(2+1)+(3+1)+(4+1)+(5+1)+(6+1)=25。34.有以下程序: #include void fun2(char a,char b) printf(cc,a,b); char a=1,b=2; void funl() a=3;b=4; void main() funl(); printf(cc,a,b);fun2(5,6); 程序运行后的输出结果是( )。(分数:2.00)A.1234B.3456 C.1212D.3434解析:解析:注意到有两个全局变量 a和 b,在 fun2()中有两个形参变量 a和 b,因为
45、全局变量在 fun2()之后,且没有使用 extern说明,因此,fun2()中的 a和 b仅是形参变量,与全局变量无关,funl()在全局变量定义之后,所以其中直接使用了全局变量。主函数调用 fun1(),其中给全局变量赋值,之后打印全局变量 a和 b的值3“4,再调用 fun2()并传入了两个实参56,所以结果是 3456。35.关于 C语言中的 typedef的叙述不正确的是( )。(分数:2.00)A.用 typedef为类型说明一个新名,通常可以增加程序的可读性B.typedef只是将已存在的类型用一个新的名字来代替C.用 typedef可以为各种类型说明一个新名,但不能用来为变量说明一个新名D.用 typedef可以增加新类型 解析:解析:typedef 为 C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char 等)和自定义的数据类型(struct 等)。在编程中使用 typedef目的一般有两个,一个是给变