1、国家二级(C 语言)机试模拟试卷 128 及答案解析(总分:86.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.下列叙述中正确的是( )。(分数:2.00)A.循环队列是队列的一种链式存储结构B.循环队列是队列的一种顺序存储结构C.循环队列是非线性结构D.循环队列是一种逻辑结构2.下列关于线性链表的叙述中,正确的是( )。(分数:2.00)A.各数据结点的存储空间可以不连续,但它们的存储顺序与逻辑顺序必须一致B.各数据结点的存储顺序与逻辑顺序可以不一致,但它们的存储空间必须连续C.进行插入与删除时,不需要移动表中的元素D.以上说法均不正确3.一棵二叉树共有 25
2、个结点,其中 5 个是叶子结点,则度为 1 的结点数为( )。(分数:2.00)A.16B.10C.6D.44.在下列模式中,能够给出数据库物理存储结构与物理存取方法的是( )。(分数:2.00)A.外模式B.内模式C.概念模式D.逻辑模式5.下列数据结构中,能够按照“先进后出”原则存取数据的是( )。(分数:2.00)A.栈B.循环队列C.队列D.二叉树6.下列数据结构中,属于非线性结构的是( )。(分数:2.00)A.顺序队列B.带链队列C.顺序栈D.二叉树7.在循环队列数据结构中,下列叙述中正确的是( )。(分数:2.00)A.队头指针是固定不变的B.队头指针一定大于队尾指针C.队头指针
3、可以大于队尾指针,也可以小于队尾指针D.队头指针一定小于队尾指针8.计算机术语中算法的空间复杂度是指( )。(分数:2.00)A.算法在执行过程中所需要的临时工作单元数B.算法所处理的数据量C.算法程序中的语句或指令条数D.算法在执行过程中所需要的计算机存储空间9.计算机软件设计过程中,符合划分模块的准则的选项是( )。(分数:2.00)A.低内聚低耦合B.高内聚高耦合C.低内聚高耦合D.高内聚低耦合10.计算机程序设计过程中,不属于结构化程序设计原则的是( )。(分数:2.00)A.可封装B.模块化C.自顶向下D.逐步求精11.软件详细设计生产的图如下图: (分数:2.00)A.N 一 S
4、图B.PAD 图C.程序流程图D.E 一 R 图12.计算机数据库管理系统是( )。(分数:2.00)A.操作系统的一部分B.一种操作系统C.一种编译系统D.在操作系统支持下的系统软件13.在 E 一 R 图中,用来表示属性的图形是( )。(分数:2.00)A.椭圆形B.矩形C.菱形D.三角形14.有三个关系表 R、S 和 T,其内容如下: (分数:2.00)A.选择B.求差C.求交D.并15.以下关于 C 程序叙述中正确的是( )。(分数:2.00)A.程序的执行总是从程序的第一个函数开始,在 main 函数结束B.程序的执行总是从 main 函数开始,在程序的最后一个函数中结束C.程序的执
5、行总是从 main 函数开始D.程序的执行总是从程序的第一个函数开始,在程序的最后一个函数中结束16.以下关于结构化程序设计的叙述中正确的是( )。(分数:2.00)A.在 C 语言中,程序的模块化是利用函数实现的B.结构化程序使用 goto 语句会很便捷C.一个结构化程序必须同时由顺序、分支、循环三种结构组成D.由三种基本结构构成的程序只能解决小规模的问题17.若 a 是数值类型,则逻辑表达式 a=1)(a!=1)的值是( )。(分数:2.00)A.0B.1C.2D.不知道 a 的值,不能确定18.以下定义语句中正确的是( )。(分数:2.00)A.int x=y=2;B.char A=65
6、 b=b;C.float a=1,*b=&a,*c=&b;D.double a=00+1,b=11:19.以下选项中符合 C 语言语法的是( )。(分数:2.00)A.x+1=yB.x+,y=xC.x=x+10=x+yD.float(x)1020.在 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回车21.若要打印出字
7、符 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);22.C 语言的合法常量是( )。(分数:2.00)A.3,100B.25E50C.D.00223.设有定义: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
8、=a;a=b,b=c;24.有以下程序: #include void main() int y=1; while(y);y;printf(y=dn,y); 程序执行后的输出结果是( )。(分数:2.00)A.y=0B.y=一 1C.y=1D.while 构成无限循环25.有以下程序: #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
9、=2 2*2=4D.1*1=1 1=1 2*1=2 2*2=426.有以下程序: #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.*7B.*3,*5C.*5*3D.*7*827.有以下程序: #include float f(float x); void main() float a=0; for(int i=2;i5;i+)a+=f(float)i); printf(30fn,A); floa
10、t f(float x) return x*x+1; 程序运行后的输出结果是( )。(分数:2.00)A.32B.29C.33D.2828.对函数 int fun(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);29.有以下程序: #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
11、,y,*P,*q); 程序运行后的输出结果是( )。(分数:2.00)A.2,1,1,2B.1,2,1,2C.1,2,2,1D.2,1,2,130.若有以下定义:int a10,*pt=x;则对 a 数组元素的正确引用是( )。(分数:2.00)A.pt+4B.*&a10C.*(pt+10)D.*(a+5)31.有以下程序: #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.3632.有
12、以下程序: #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); 程序运行后的输出结果是( )。(分数:2.00)A.1,3,5,9,B.1,2,3,4,C.1,3,7,0,D.3,4,8,1033.C 语言中定义了字符指针,char*c,则将 c 指向一个字符串的是( )。(分数:2.00)A.char
13、ss=text;c=ss;B.scanf(s,c);C.c=getchar();D.*c=text;34.若有定义语句:char str8=abcdef00;则 strlen(str)的值是( )。(分数:2.00)A.6B.7C.8D.935.有以下程序: #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.936.有以下
14、程序(说明:字母 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.YTC.YED.BY37.有以下程序: #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); 程序运行后的输出
15、结果是( )。(分数:2.00)A.25B.11C.15D.2038.有以下程序: #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.3456C.1212D.343439.关于 C 语言中的 typedef 的叙述不正确的是( )。(分数:2.00)A.用 typedef 为类型说明一个新名,通常可以增加程序的可读性B.t
16、ypedef 只是将已存在的类型用一个新的名字来代替C.用 typedef 可以为各种类型说明一个新名,但不能用来为变量说明一个新名D.用 typedef 可以增加新类型40.程序中已构成如下图所示的不带头节点的单向链表结构,指针变量 s,p,q 均已正确定义,并用于指向链表节点,指针变量 S 总是作为指针指向链表的第一个节点。 (分数:2.00)A.首节点成为尾节点B.删除首节点C.尾节点成为首节点D.删除尾节点二、程序填空题(总题数:1,分数:2.00)41.给定程序中,函数 fun 的作用是:不断从终端读入整数,由变量 a 统计大于 0 的个数,用变量 c 来统计小于 0 的个数,当输入
17、 0 时结束输入,并通过形参 pa 和 pb 把统计的数据传回主函数进行输出。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:源程序存放在 BLANKlC中。不得增行或删行,也不得更改程序的结构!试题程序: #includestdioh void fun(int*px,int*py) *found* int 1; scarnf(“d”,&k); *found* while2 if(k0)a+; if(k0)b+; *found* 3; *px=a;*py=b; main() int x,y; fun(&x,&y); printf(“x=d y=dn”,x,y); (
18、分数:2.00)_三、程序修改题(总题数:1,分数:2.00)42.下列给定程序中函数 fun 的功能是:用冒泡法对 6 个字符串进行升序排列。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件 MODIIC 中,不得增行或删行,也不得更改程序的结构! #includestdioh #includestringh #define MAXLINE 20 fun(char*pstr6) int i,j; char*P; for(i=0;i5;i+) *found* for(j=i+1,j6,j+) if(strcmp(*(pstr+i),*(pstr+j)0) P=*(pstr+i)
19、; *found* *(pstr+i)=pstr+j; *(pstr+j)=P; main() int i; char*pstr6,str6MAXLINE; for(i=0;i6;i+)pstri =stri; printf(“nEnter 6 string(1 string at each line):n”); for(i=0;i6;i+)scanf(“s”,pstri); fun(pstr); printf(“The strings after sorting:n”); for(i=0;i6;i+)printf(“sn”,pstri); (分数:2.00)_四、程序设计题(总题数:1,分数
20、:2.00)43.请编写函数 fun,其功能是:判断 t 所指字符串中的字母是否由连续递增字母序列组成(字符串长度大于等于 2)。例如字符串:uvxyz 满足要求;而字符串:uvxwyz 不满足要求。注意:部分源程序存放在PROG1C 中,请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 指定的部位填入所编写的若干语句。试题程序: #includestdioh #includestringh void NONO(); int fun(char*t) main() char s26; printf(“请输入一个字母组成的字符串:”);gets(s); if(fun(s)prin
21、ff(“s 是由连续字母组成的字符串n”,s); else prinff(“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(8,n);if(P)*p=0; if(fun(s)frintf(wf,“sn”,s+2); ese fprinff(wf,“sn”
22、,strrey(s); felose(fp); fclose(wf); (分数:2.00)_国家二级(C 语言)机试模拟试卷 128 答案解析(总分:86.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.下列叙述中正确的是( )。(分数:2.00)A.循环队列是队列的一种链式存储结构B.循环队列是队列的一种顺序存储结构 C.循环队列是非线性结构D.循环队列是一种逻辑结构解析:解析:在实际应用中,队列的顺序存储结构一般采用循环队列的形式。2.下列关于线性链表的叙述中,正确的是( )。(分数:2.00)A.各数据结点的存储空间可以不连续,但它们的存储顺序与逻辑顺序必须一
23、致B.各数据结点的存储顺序与逻辑顺序可以不一致,但它们的存储空间必须连续C.进行插入与删除时,不需要移动表中的元素 D.以上说法均不正确解析:解析:一般来说,在线性表的链式存储结构中,各数据结点的存储序号是不连续的,并且各结点在存储空间中的位置关系与逻辑关系也不一致。线性链表中数据的插入和删除都不需要移动表中的元素,只需改变结点的指针域即可。3.一棵二叉树共有 25 个结点,其中 5 个是叶子结点,则度为 1 的结点数为( )。(分数:2.00)A.16 B.10C.6D.4解析:解析:根据二叉树的性质 3:在任意一棵二叉树中,度为 0 的叶子结点总是比度为 2 的结点多一个,所以本题中度刀
24、z 的节点是 5 一 1=4 个,所以度为 1 的结点的个数是 255 一 4=16 个。4.在下列模式中,能够给出数据库物理存储结构与物理存取方法的是( )。(分数:2.00)A.外模式B.内模式 C.概念模式D.逻辑模式解析:解析:数据库系统的三级模式是概念模式、外模式和内模式。概念模式是数据库系统中全局数据逻辑结构的描述,是全体用户公共数据视图。外模式也称子模式或用户模式,它是用户的数据视图,给出了每个用户的局部数据描述。内模式又称物理模式,它给出了数据库物理存储结构与物理存取方法,所以选择 B。5.下列数据结构中,能够按照“先进后出”原则存取数据的是( )。(分数:2.00)A.栈 B
25、.循环队列C.队列D.二叉树解析:解析:栈是先进后出原则存取数据的;队列是先进先出原则。6.下列数据结构中,属于非线性结构的是( )。(分数:2.00)A.顺序队列B.带链队列C.顺序栈D.二叉树 解析:解析:二叉树是非线性结构,其他都是线性结构。7.在循环队列数据结构中,下列叙述中正确的是( )。(分数:2.00)A.队头指针是固定不变的B.队头指针一定大于队尾指针C.队头指针可以大于队尾指针,也可以小于队尾指针 D.队头指针一定小于队尾指针解析:解析:循环队列的队头指针和队尾指针均不是固定的,也没有大小之分,所以只有选项 C 正确。8.计算机术语中算法的空间复杂度是指( )。(分数:2.0
26、0)A.算法在执行过程中所需要的临时工作单元数B.算法所处理的数据量C.算法程序中的语句或指令条数D.算法在执行过程中所需要的计算机存储空间 解析:解析:算法的空间复杂度指的是所需的计算机存储空间,所以只有 D 正确。9.计算机软件设计过程中,符合划分模块的准则的选项是( )。(分数:2.00)A.低内聚低耦合B.高内聚高耦合C.低内聚高耦合D.高内聚低耦合 解析:解析:划分模块的目的一般是希望设计的模块能够实现较高的内聚力和较低的耦合性。10.计算机程序设计过程中,不属于结构化程序设计原则的是( )。(分数:2.00)A.可封装 B.模块化C.自顶向下D.逐步求精解析:解析:结构化程序设计原
27、则有:模块化,自顶向下,逐步求精和尽量不使用跳转语句。11.软件详细设计生产的图如下图: (分数:2.00)A.N 一 S 图B.PAD 图C.程序流程图 D.E 一 R 图解析:解析:NS 图提出了用方框来代替传统的程序流程图,故 A 项错。PAD 图是问题分析图,是继承了程序流程图和方框图之后又一种主要用于描述软件详细设计的图形表示工具,故 B 项错误。ER 图是数据库中用于表示 ER 模型的图示工具,D 项也错误。正确答案为 C 项。12.计算机数据库管理系统是( )。(分数:2.00)A.操作系统的一部分B.一种操作系统C.一种编译系统D.在操作系统支持下的系统软件 解析:解析:计算机
28、程序有操作系统和应用软件。数据库管理系统是用来管理数据的系统,不属于操作系统,当然也不是操作系统的一部分,更不是编译系统。13.在 E 一 R 图中,用来表示属性的图形是( )。(分数:2.00)A.椭圆形 B.矩形C.菱形D.三角形解析:解析:在 E 一 R 图中,实体集用矩形,属性用椭圆,联系用菱形。14.有三个关系表 R、S 和 T,其内容如下: (分数:2.00)A.选择B.求差C.求交D.并 解析:解析:关系 T 中包含了 R 和 S 中的所有元素,所以是并操作。15.以下关于 C 程序叙述中正确的是( )。(分数:2.00)A.程序的执行总是从程序的第一个函数开始,在 main 函
29、数结束B.程序的执行总是从 main 函数开始,在程序的最后一个函数中结束C.程序的执行总是从 main 函数开始 D.程序的执行总是从程序的第一个函数开始,在程序的最后一个函数中结束解析:解析:任何一个 C 语言程序的执行总是从 main 函数开始,以 main 的结束而结束。其他函数是通过函数调用来执行的。16.以下关于结构化程序设计的叙述中正确的是( )。(分数:2.00)A.在 C 语言中,程序的模块化是利用函数实现的 B.结构化程序使用 goto 语句会很便捷C.一个结构化程序必须同时由顺序、分支、循环三种结构组成D.由三种基本结构构成的程序只能解决小规模的问题解析:解析:结构化程序
30、设计原则是尽量不使用跳转语句,因此,选项 B 错误;程序设计中可以有多种结构中的一种或多种,因此,C 错;三种基本结构可以解决非常复杂的问题,因此 D 错。17.若 a 是数值类型,则逻辑表达式 a=1)(a!=1)的值是( )。(分数:2.00)A.0B.1 C.2D.不知道 a 的值,不能确定解析:解析:仔细分析题目发现运算符两边的值是两个相反数,所以不管 a 的值是多少,结果均为真。所以答案为 B。18.以下定义语句中正确的是( )。(分数: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
31、=11: 解析:解析:A 选项中的 y 值在定义之前不能给变量 x 赋值;B 选项中的分号应该为逗号;C 选项中的*b和*c 是指针变量,*c=&b 不正确;D 选项在定义时可以将一个表达式的值同时赋给正在定义的变量。因为赋值操作是先计算赋值符号(=)右边的表达式的值再将其赋给等号左边的变量。19.以下选项中符合 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 选项是一个逗号表达式,其中又包含一个赋值表
32、达式,语法正确。20.在 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回车 解析:解析:scanf()的格式中指定了要用逗号分隔输入的数值,所以在输入时必须要有逗号来分隔输入的内容,因此,选项 D 错误。21.若要打印出字符 A,以下语句不正确的是( )。(注:字符 A 的 ASC码值为 65,字符 a 的 ASC码
33、值为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 正确。22.C 语言的合法常量是( )。(分数:2.00)A.3,100B.25E50C.D.002 解析:解析:C 语言中没有千分位分隔符,所以 A 错;科学计数法的指数应该为整数,所以 B 错:是转义字符,但后面没有具体需要转义的字符,所以 C 错;D 选项中是一个常量字符串。表达正确。23
34、.设有定义: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;解析:解析:此题主要考查分支语句后面的表达式的写法,在 C 语言中,if 条件为真时只执行后面的一条语句;由于 ab 为假,所以选项 B,C,D 均不执行语句,而选项 A 后面的表达式用分号隔开。所以会执行后面两条语句;另外,选项 C 中出现的逗号表达式,算一个语句。24.有以下程序: #include void main()
35、int y=1; while(y);y;printf(y=dn,y); 程序执行后的输出结果是( )。(分数:2.00)A.y=0B.y=一 1C.y=1D.while 构成无限循环 解析:解析:while 后面注意不能紧跟分号,要在其后的循环体后面加分号;所以此题选项中 while(1):会构成死循环,因为后面的 y 一等 while 结束之后才能执行。25.有以下程序: #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
36、*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 不正确。26.有以下程序: #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
37、.*3,*5C.*5*3D.*7*8解析:解析:在第一次执行循环体时,两个 if 语句的判断条件均为真,所以会执行输出 i 的语句。同时也会执行 break 语句跳出循环,结果为 A。27.有以下程序: #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.32 B.29C.33D.28解析:解析:子函数的功能是平方之后加 1,循环体共执行
38、 3 次,执行子函数时的形参分别是 2,3,4,求和后的结果是(2*2+1)+(3*3+1)+(4*4+1)=32。28.对函数 int fun(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);解析:解析:函数声明可以只声明形参的类型,题目中的数组可以用指针代替,所以选项 B 正确。29.有以下程序: #nclude void main() int x=1,y=2,*p=&x,*q=
39、&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,因此选项 C 正确,q 同样也在赋初值之后进行了变量赋值,其值为 x。30.若有以下定义:int a10,*pt=x;则对 a 数组元素的正确引用是( )。(分数:2.00)A.pt+4B.*&a10C.*(pt+10)D.*(a+5) 解析:解析:数组
40、引用是从 0 开始,最后一个元素下标是 n1,所以选项 B 和 C 中的下标超限,选项 A是一个指针,正确写法应该是*(pt+4),选项 D 正确,其中 a)当作指针使用,这对数组是合法的。31.有以下程序: #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.25 B.20C.40D.36解析:解析:本题是将数组中的部分元素进行求和的结果。下标分别是 0,2,4,8,所以结果是1+3+5+7+9=25。32.有
41、以下程序: #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); 程序运行后的输出结果是( )。(分数: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 个元素的一维数组。在主函
42、数中定义数组时,没有指定元素默认为零,因此,主函数中的数组 x44=1,2,3,0,4,3,0,0,5,6,7,8,9,10,11,0,对角线上的元素为 1,3,7,0。33.C 语言中定义了字符指针,char*c,则将 c 指向一个字符串的是( )。(分数:2.00)A.char ss=text;c=ss; B.scanf(s,c);C.c=getchar();D.*c=text;解析:解析:字符串是一类特殊的字符数组,字符指针仅指向一个字符,因此正确的做法是先定义一个字符串数组,再将字符指针指向该字符串的首字符,答案 A 正确。选项 B 只能指向最后输入的一个字符,选项 C 语法错误,ge
43、tchar()只能输入一个字符给字符变量,选项 D 的没有语法错误,但指针 c 没有被赋初值,其可能指向一个有用的内存单元,因此,直接将一个字符串存放于该地址存在系统风险。34.若有定义语句:char str8=abcdef00;则 strlen(str)的值是( )。(分数:2.00)A.6 B.7C.8D.9解析:解析:系统会在字符数组末尾加一个字符(0)作为结束符,strlen()会将0作为字符串的结束符,因此,本题中的字符串的实际长度是 6。35.有以下程序: #include #include void main() char s115=a,b,c,d,s2=abcd,s3=abcd
44、e; 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 中的第 n 个字符之后。所以,strcat(s1,s3)会将 s3连接到 s1 后面,结果是 s1=“abcdabcde,strcpy(s1+strlen(s2),s2)会将 s2 拷贝到 s1 中从第 4 个字符
45、之后的位置,所以 s1=abcdabcd,所以 s1 的长度为 8。36.有以下程序(说明:字母 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.YTC.YE D.BY解析:解析:子函数的功能是将字符串中 ASC码不是 2 的整数倍的字符打印出来,A=65,B=66,E=69,据此便可以判断选项 C 正确。不用再考查 Y 的值是多少。37.有以下程序: #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