1、国家二级(C 语言)机试模拟试卷 152及答案解析(总分:86.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.算法的有穷性是指( )。(分数:2.00)A.算法程序的运行时间是有限的B.算法程序所处理的数据量是有限的C.算法程序的长度是有限的D.算法在执行过程中所需要的临时工作单元数2.一个栈的初始状态为空。现将元素 1、2、3、4、5、A、B、C、D、E 依次入栈,然后再依次出栈,则元素出栈的顺序是( )。(分数:2.00)A.12345ABCDEB.EDCBA54321C.ABCDE12345D.54321EDCBA3.下列关于线性链表的叙述中,正确的是( )
2、。(分数:2.00)A.各数据结点的存储空间可以不连续,但它们的存储顺序与逻辑顺序必须一致B.各数据结点的存储顺序与逻辑顺序可以不一致,但它们的存储空间必须连续C.进行插入与删除时,不需要移动表中的元素D.以上三种说法都不对4.在长度为 n的有序线性表中进行二分查找,最坏情况下需要比较的次数是( )。(分数:2.00)A.O(n)B.O(n 2 )C.O(log 2 n)D.O(nlog 2 n)5.假定已建立以下数据链表结构,且指针 p和 q已指向如下图所示的结点: (分数:2.00)A.(*)pnext=(*q)next;free(p)B.b=qnext;free(q)C.p=q;free
3、(q)D.pnext=qnext;free(q)6.软件开发中,需求分析阶段可以使用的工具是( )。(分数:2.00)A.N-S图B.DFD图C.PAD图D.程序流程图7.在面向方法中,不属于“对象”基本特点的是( )。(分数:2.00)A.一致性B.分类性C.多态性D.标识唯一性8.数据流图中带有箭头的线段表示的是( )。(分数:2.00)A.控制流B.事件驱动C.模块调用D.数据流9.在数据管理技术发展的三个阶段中,数据共享最好的是( )。(分数:2.00)A.人工管理阶段B.文件系统阶段C.数据库系统阶段D.三个阶段相同10.一间宿舍可住多个学生,则实体宿舍和学生之间的联系是( )。(分
4、数:2.00)A.一对一B.一对多C.多对一D.多对多11.有三个关系 R、S 和 T如下: (分数:2.00)A.笛卡尔积B.交C.并D.自然连接12.以下叙述中正确的是( )。(分数:2.00)A.C程序的基本组成单位是语句B.C程序中的每一行只能写一条语句C.简单 C语句必须以分号结束D.C语言必须在一行内写完13.C源程序中不能表示的数制是( )。(分数:2.00)A.二进制B.八进制C.十进制D.十六进制14.以下叙述中错误的是( )。(分数:2.00)A.用户定义的函数中可以没有 return语句B.用户定义的函数中可以有多个 return语句,以便可以调用一次返回多个函数值C.用
5、户定义的函数中若没有 return语句,则应当定义函数为 void类型D.函数的 return语句中可以没有表达式15.以下选项中不能作为 C语言合法常量的是( )。(分数:2.00)A.cdB.01e+6C.aD.01116.如有表达式(w)?(一 x):(+y),则其中与 w等价的表达式是( )。(分数:2.00)A.w=1B.w=0C.w!=1D.w!=017.以下不能正确表示代数式 (分数:2.00)A.2*a*bcdB.a*bcd*2C.acd*b*2D.2*a*bc*d18.以下选项中正确的定义语句是( )。(分数:2.00)A.double a;b;B.double a=b=7;
6、C.double a=7,b=7;D.double,a,b;19.若变量已正确定义为 int型,要通过语句 scanf(“d,d,d“,&a,&b,&c);给 a赋值 1、给 b赋值 2、给 c赋值 3,以下输入形式中错误的是(u 代表一个空格)( )。(分数:2.00)A.1,2,3回车B.1u2u3回车C.1,uu2,uu回车3回车D.uu1,2,3回车20.执行以下程序段后,w 的值为( )。 int w=A,x=14,y=15; w=(xy)&(wa);(分数:2.00)A.一 1B.NULLC.1D.021.有以下程序: #includestdioh main() char a=4;
7、 printf(“dn“,a=a1); 程序运行的结果是( )。(分数:2.00)A.40B.16C.8D.422.有以下程序段:int a,b,c;a=10;b=50;c=30;if(ab)a=b,b=c;c=a;printf(“a=d b=d c=d“,a,b,c);程序的输出结果是( )。(分数:2.00)A.a=10 b=50 c=10B.a=10 b=50 c=30C.a=10 b=30 c=10D.a=10 b=30 c=5023.有以下程序:#includestdiohmain() int x=1,y=2,z=3; if(xy) if(yz)printf(“d“,+z); els
8、e printf(“d“,+y); printf(“dn“,x+);程序运行的结果是( )。(分数:2.00)A.3 3 1B.4 1C.2D.124.有以下程序:#includestdiohmain() int i=5: do if(i3=1) if(i5=2) printf(“* d“,i);break; i+; while(i!=0); printf(“n“); 程序运行的结果是( )。(分数:2.00)A.*7B.*3*5C.*5D.*2*625.有以下程序: #includestdioh main() int i,j; for(i=3;i1;i 一一) for(j=1;j=2;j+)
9、 printf(“d“,i+j); printf(“n“); 程序运行的结果是( )。(分数:2.00)A.2 3 4 3 4 5B.4 3 2 5 4 3 4 5C.2 3 3 4 2 3D.4 5 3 426.若有定义语句:char s10=“123456700“;,则 strlen(s)的值是( )。(分数:2.00)A.7B.8C.9D.1027.若有定义语句: int m=5,4,3,2,1,i=4;, 则下面对 m数组元素的引用中错误的是( )。(分数:2.00)A.m一一 iB.m2*2C.mm0/D.mmi/28.有以下程序:#includestdiohvoid fun(int
10、 a,int n) int i,t; for(i=0;in2;i+) t=ai; ai=an 一 1-i; an 一 1一 i=t; main() int k10=1,2,3,4,5,6,7,8,9,10,i; fun(k,5); for(i=2;i8;i+) printf(“d“,ki); printf(“n“); 程序运行的结果是( )。(分数:2.00)A.3456787B.876543C.1098765D.32167829.有以下程序: #includestdioh void fun(int a,int b) int t; t=a;a=b;b=t; main() int c10=1,2
11、,3,4,5,6,7,8,9,0,i; for(i=0;i10;i+=2) fun(ci,ci+11); for(i=0;i10;i+) printf(“d,“,ci); printf(“n“); 程序运行的结果是( )。(分数:2.00)A.1,2,3,4,5,6,7,8,9,0,B.2,1,4,3,6,5,8,7,0,9,C.0,9,8,7,6,5,4,3,2,1,D.0,1,2,3,4,5,6,7,8,9,30.有以下程序: #includestdioh #define N 4 void fun(int aN,int b) int i; for(i=0;iN;i+) bi=aii; ma
12、in() int xN=(1,2,3,4,5,6,7,8,9,10,yN,i; fun(x,y); for(i=0;iN;i+) printf(“d“,yi); printf(“n“); 程序运行的结果是( )。(分数:2.00)A.1 2 3 4B.1 0 7 0C.1 4 5 9D.3 4 8 031.若有定义语句:double x5=10,2,3,4,50,*p=x,则错误引用 x数组元素的是( )。(分数:2.00)A.*pB.x5C.*(p+1)D.*x32.下面的函数调用语句中,func 函数的实参个数是( )。 func(f2(v1,v2),(v3,v4,v5),(v6,max(
13、v7,v8)(分数:2.00)A.3B.4C.5D.833.有以下程序: #includestdioh int fun(int a,int b) if(b=0)return a; else return(fun(一一 a,一一 b); main() printf(“dn“,fun(4,2); 程序运行的结果是( )。(分数:2.00)A.1B.2C.3D.434.有以下程序: #includestdioh int fun(int(*s)4,int n,int k) int m,i; m=s0k:for(i=1;in;i+) if(sikm) m=sik: return m; main() in
14、t a44=1,2,3,4,11,12,13,14,21,22,23,24,31,32,33,34; printf(“dn“,fun(a,4,0); 程序运行的结果是( )。(分数:2.00)A.4B.34C.31D.3235.有以下程序: #includestdioh #includestdlibh int fun(int n) int *p; p=(int*)malloc(sizeof(int); *p=n;return *p; main() int a; a=fun(10); printf(“dn“,a+fun(10); 程序运行的结果是( )。(分数:2.00)A.0B.10C.20D
15、.出错36.以下关于宏的叙述中正确的是( )。(分数:2.00)A.宏名必须用大写字母表示B.宏定义必须位于源程序中所有语句之间C.宏替换没有数据类型限制D.宏调用比函数调用耗费时间37.以下程序段中完全正确的是( )。(分数:2.00)A.int *p;scanf(“d“,&p);B.int *p;scanf(“d“,p);C.int k,*p=&k;scanf(“d“,p)D.int k,*p;*p=&k;scanf(“d“,p)38.有以下程序: #includestdioh struct st int x,y; data2=1,10,2,20; main() struct st *p=
16、data; printf(“d“,p 一y); printf(“dn“,(+p)一x); 程序运行的结果是( )。(分数:2.00)A.10 1B.20 1C.10 2D.20 239.有以下程序: #includestdioh main() struct STU char name9; char sex; double score2; struct STU a=“Zhao“,m,85,900,b=“Qian“,f,95,920; b=a: printf(“s c 20f20fn“,bname,bsex,bscore0,bscore1); 程序运行的结果是( )。(分数:2.00)A.Qian
17、 f 95 92B.Qian m 85 90C.Zhao f 95 92D.Zhao m 85 9040.有以下程序: #includestdioh main() FILE *pf; char *s1=“China“,* s2=“Beijing“; pf=fopen(“abcdat“,“wb+“); fwrite(s2,7,1,pf); rewind(pf);*文件位置指针回到文件开头* fwrite(s1,5,1,pf); fclose(pf); 以上程序执行后,abcdat 文件的内容是( )。(分数:2.00)A.ChinaB.ChinangC.ChinaBeijingD.Beijing
18、China二、程序填空题(总题数:1,分数:2.00)41.给定程序中,函数 fun的功能是:求 ss所指字符串数组中长度最长的字符串所在的行下标,作为函数值返回,并把其串长放在形参 n所指变量中。ss 所指字符串数组中共有 M个字符串,且串长N。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:不得增行或删行,也不得更改程序的结构! 试题程序: #includestdioh #includestringh #define M 5 #define N 20 *found* int fun(char(*ss)【1】,int *n) int i,k=0,len=0;
19、for(i=0;iM;i+) len=strlen(ssi); *found* if(i=0) *n=【2】; if(len*n) *found* 【3】;k=i; return(k); main() char ssMN=“shanghai“,“guangzhou“,“beijing“,“tianjing“,“cchongqing“; int n,k,i; printf(“The original strings are:n“); for(i=0;iM;i+) puts(ssi); k=fun(ss,&n); printf(“The length of longest string is:dn
20、“,n); printf(“The longest string is:sn“,ssk); (分数:2.00)_三、程序修改题(总题数:1,分数:2.00)42.下列给定程序中,fun 函数的功能是:根据形参 m,计算下列公式的值。 t=1+12+13+14+1m 例如,若输入 5,则应输出 2283333。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构! 试题程序: #includestdlibh #includeconioh #includestdioh double fun(int m) double t=10;int i
21、; for(i=2;i=m;i+) *found* t+=10k; *found* return i; void main() int m; system(“CLS“); printf(“Please enter linteger number:“); scanf(“d“,&m); printf(“The result islfn“,fun(m); (分数:2.00)_四、程序设计题(总题数:1,分数:2.00)43.请编写函数 fun,其功能是:计算并输出给定 10个数的方差。 S=( (X x) 2 10 05 其中:S=( (分数:2.00)_国家二级(C 语言)机试模拟试卷 152答案
22、解析(总分:86.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.算法的有穷性是指( )。(分数:2.00)A.算法程序的运行时间是有限的 B.算法程序所处理的数据量是有限的C.算法程序的长度是有限的D.算法在执行过程中所需要的临时工作单元数解析:解析:算法原则上能够精确地运行,而且人们用纸笔做有限次运算后即可完成。有穷性是指算法程序的运行时间是有限的。2.一个栈的初始状态为空。现将元素 1、2、3、4、5、A、B、C、D、E 依次入栈,然后再依次出栈,则元素出栈的顺序是( )。(分数:2.00)A.12345ABCDEB.EDCBA54321 C.ABCDE123
23、45D.54321EDCBA解析:解析:栈是按照“先进后出”的原则组织数据的,入栈的顺序为 12345ABCDE,则出栈的顺序应为其逆序,即 EDCBA54321。3.下列关于线性链表的叙述中,正确的是( )。(分数:2.00)A.各数据结点的存储空间可以不连续,但它们的存储顺序与逻辑顺序必须一致B.各数据结点的存储顺序与逻辑顺序可以不一致,但它们的存储空间必须连续C.进行插入与删除时,不需要移动表中的元素 D.以上三种说法都不对解析:解析:一般来说,在线性表的链式存储结构中,各数据结点的存储序号是不连续的,并且各节点在存储空间中的位置关系与逻辑关系也不一致。线性链表中数据的插入和删除都不需要
24、移动表中的元素,只需改变节点的指针域即可。故 C选项正确。4.在长度为 n的有序线性表中进行二分查找,最坏情况下需要比较的次数是( )。(分数:2.00)A.O(n)B.O(n 2 )C.O(log 2 n) D.O(nlog 2 n)解析:解析:二分查找的最坏情况是不断的二分直至无法再分时,仍然没有查找成功。对于有序的线性表,二分查找法只需比较 log 2 n次。5.假定已建立以下数据链表结构,且指针 p和 q已指向如下图所示的结点: (分数:2.00)A.(*)pnext=(*q)next;free(p)B.b=qnext;free(q)C.p=q;free(q)D.pnext=qnext
25、;free(q) 解析:解析:要删除结点 q,应首先由 q的上一个结点 p的指针域指向 q的指针域所指向的结点,即 p一next=q 一next;,然后才能释放结点 q,即 free(q)。6.软件开发中,需求分析阶段可以使用的工具是( )。(分数:2.00)A.N-S图B.DFD图 C.PAD图D.程序流程图解析:解析:结构化分析方法是结构化程序设计理论在软件需求解析阶段的运用,数据流图(Data Flow Diagram,DFD)是结构化分析常用的工具之一,数据字典、判定树和判定表也是常用的结构化分析工具。程序流程图、NS 图、PAD 图等图形工具用于详细设计的过程中。7.在面向方法中,不
26、属于“对象”基本特点的是( )。(分数:2.00)A.一致性 B.分类性C.多态性D.标识唯一性解析:解析:对象的基本特点有: 标识唯一性,是指对象是可区分的; 分类性,是指可将具有相同属性和操作的对象抽象成类; 多态性,是指同一个操作可以是不同对象的行为; 封装性,是指对象的内部对外不可见,在外面不可直接使用对象的处理能力,也不能直接修改对象的内部状态; 模块独立性,是指模块内部各部分及模块间的关系的一种衡量标准,由内聚和耦合来度量。8.数据流图中带有箭头的线段表示的是( )。(分数:2.00)A.控制流B.事件驱动C.模块调用D.数据流 解析:解析:数据流图基本符号的含义:矩形表示数据的外
27、部实体;圆角的矩形表示变换数据的处理逻辑;“=”表示数据的存储;箭头表示数据流。9.在数据管理技术发展的三个阶段中,数据共享最好的是( )。(分数:2.00)A.人工管理阶段B.文件系统阶段C.数据库系统阶段 D.三个阶段相同解析:解析:数据库系统阶段实现了数据共享,具有数据的集成性,这使得数据可被多个应用所共享,还可以极大地减少数据冗余性。A 项,在人工管理阶段,数据不保存,没有对数据进行管理的软件,数据不能共享;B 项,文件系统阶段是数据库系统发展的初级阶段,它提供了简单的数据共享与数据管理能力,但是这种能力十分有限。从人工管理阶段到文件系统阶段再到数据库系统阶段,对数据共享的能力在不断增
28、强。10.一间宿舍可住多个学生,则实体宿舍和学生之间的联系是( )。(分数:2.00)A.一对一B.一对多 C.多对一D.多对多解析:解析:实体间的联系有如下情况:一对一(1:1);一对多(1:m);多对多(m:n)。本题中,一间宿舍对应多个学生,那么宿舍和学生之间的联系是一对多,学生和宿舍的联系是多对一。11.有三个关系 R、S 和 T如下: (分数:2.00)A.笛卡尔积B.交C.并D.自然连接 解析:解析:交和并运算要求关系 R和 S具有相同的属性,BC 两项错误。R 与 S的笛卡儿积是一个 4元关系,有 4个元素,A 项错误。R 与 S有公共的属性 B,可通过公共属性的相等值进行连接,
29、这种连接称之为自然连接。12.以下叙述中正确的是( )。(分数:2.00)A.C程序的基本组成单位是语句B.C程序中的每一行只能写一条语句C.简单 C语句必须以分号结束 D.C语言必须在一行内写完解析:解析:C 程序的基本组成单位是函数,A 项错误;C 程序以分号作为每个语句结尾,一行能写多条语句,也可以将一条语句分几行书写,BD 两项错误;而简单 C语言语句必须以分号结束,所以 C项正确。13.C源程序中不能表示的数制是( )。(分数:2.00)A.二进制 B.八进制C.十进制D.十六进制解析:解析:C 语言中整型常量可以用十进制数、八进制数、十六进制数来表示。虽然计算机只能识别二进制数,但
30、二进制不能用来表示整型常量。14.以下叙述中错误的是( )。(分数:2.00)A.用户定义的函数中可以没有 return语句B.用户定义的函数中可以有多个 return语句,以便可以调用一次返回多个函数值 C.用户定义的函数中若没有 return语句,则应当定义函数为 void类型D.函数的 return语句中可以没有表达式解析:解析:用户定义的函数有两种:void 函数,可以没有 return语句,如果有 return语句,也不可以返回任何表达式;指定返回类型函数,至少有一个返回语句。在一个函数内,可以根据需要在多处出现 return语句,但无论有多少个 return语句,return 语句
31、只会被执行一次,然后退出函数,并且只能返回一个函数值。15.以下选项中不能作为 C语言合法常量的是( )。(分数:2.00)A.cd B.01e+6C.aD.011解析:解析:常量包括整型常量、实型常量、字符常量和字符串常量等。单引号表示字符常量,但不能包含字符串。表达字符串常量时需用双引号。16.如有表达式(w)?(一 x):(+y),则其中与 w等价的表达式是( )。(分数:2.00)A.w=1B.w=0C.w!=1D.w!=0 解析:解析:?:表达式形式为表达式 1?表达式 2:表达式 3。当表达式 1的值为真,则结果为表达式 2的值;当表达式 1的值为假,则结果为表达式 3的值。可见表
32、达式 w等价于 w!=0。17.以下不能正确表示代数式 (分数:2.00)A.2*a*bcdB.a*bcd*2C.acd*b*2D.2*a*bc*d 解析:解析:*与优先级相同,所以采用左结合的方式。D 项若改为:2*a*b(c*d),则正确。18.以下选项中正确的定义语句是( )。(分数:2.00)A.double a;b;B.double a=b=7;C.double a=7,b=7; D.double,a,b;解析:解析:同一类型变量的定义时,不同变量之间需要用“,”分隔;定义变量时初始化赋值时不能用等号连接;变量类型说明后面不能用逗号,而是用空格分离。19.若变量已正确定义为 int型
33、,要通过语句 scanf(“d,d,d“,&a,&b,&c);给 a赋值 1、给 b赋值 2、给 c赋值 3,以下输入形式中错误的是(u 代表一个空格)( )。(分数:2.00)A.1,2,3回车B.1u2u3回车 C.1,uu2,uu回车3回车D.uu1,2,3回车解析:解析:scanf 函数要求除格式控制符以外的字符都要原样输入。逗号是非格式符,所以需要原样输入,否则就不能正确读入数据。B 项前两个数据后面没有紧跟一个逗号,格式不匹配,所以输入形式错误。20.执行以下程序段后,w 的值为( )。 int w=A,x=14,y=15; w=(xy)&(wa);(分数:2.00)A.一 1B.
34、NULLC.1 D.0解析:解析:因为 x=14,y=15 都是非零整数,因此 xy=1。又因为A+32=a,知 wa也为真,因此(xy)&(wa)的值为 1。21.有以下程序: #includestdioh main() char a=4; printf(“dn“,a=a1); 程序运行的结果是( )。(分数:2.00)A.40B.16C.8 D.4解析:解析:左移一位相当于原数乘以 2,右移一位相当于除以 2。a1 结果为 4*2=8,没有超过 char类型的范围。22.有以下程序段:int a,b,c;a=10;b=50;c=30;if(ab)a=b,b=c;c=a;printf(“a=
35、d b=d c=d“,a,b,c);程序的输出结果是( )。(分数:2.00)A.a=10 b=50 c=10 B.a=10 b=50 c=30C.a=10 b=30 c=10D.a=10 b=30 c=50解析:解析:因为 a=10,b=50,所以 ab,if 语句判断条件不成立,于是执行 c=a,得到 c=10,a 和 b的值不变。23.有以下程序:#includestdiohmain() int x=1,y=2,z=3; if(xy) if(yz)printf(“d“,+z); else printf(“d“,+y); printf(“dn“,x+);程序运行的结果是( )。(分数:2.
36、00)A.3 3 1B.4 1C.2D.1 解析:解析:else 子句总是与最前面最近的不带 else的 if相结合,与书写格式无关,所以本题中的else语句与第二个 if语句配对,且 if和 else都在第一个 if的控制范围内。首先判断 xy 不成立,直接退出第一个 if语句,执行 printf(“dn“,x+)。(x+)的值是 x加之前的值,所以输出结果为 1。24.有以下程序:#includestdiohmain() int i=5: do if(i3=1) if(i5=2) printf(“* d“,i);break; i+; while(i!=0); printf(“n“); 程序
37、运行的结果是( )。(分数:2.00)A.*7 B.*3*5C.*5D.*2*6解析:解析:在 do while循环中,总是先执行后判断,所以循环体至少会被执行一次。在循环中,如果满足(i3=1)&(i5=2),那么输出 i的值,退出循环,否则 i+,如果 i=0则跳出循环。25.有以下程序: #includestdioh main() int i,j; for(i=3;i1;i 一一) for(j=1;j=2;j+) printf(“d“,i+j); printf(“n“); 程序运行的结果是( )。(分数:2.00)A.2 3 4 3 4 5B.4 3 2 5 4 3 4 5C.2 3 3
38、 4 2 3D.4 5 3 4 解析:解析:外层主循环 i从 3减到 1执行了 3次(最后一次循环条件不成立,不执行),嵌套的循环 j从 1增到 2,每轮执行 2次。每次输出 i+j的值,就可以得到如 D选项的输出结果。每次换行发生在外循环完成一次循环之后。26.若有定义语句:char s10=“123456700“;,则 strlen(s)的值是( )。(分数:2.00)A.7 B.8C.9D.10解析:解析:C 语言规定以字符0作为字符串结束的标识符。strlen 函数返回的是字符串的长度,“123456700”与“1234567”等效,所以字符串长度是 7。27.若有定义语句: int
39、m=5,4,3,2,1,i=4;, 则下面对 m数组元素的引用中错误的是( )。(分数:2.00)A.m一一 iB.m2*2C.mm0/ D.mmi/解析:解析:数组的下标从零开始,数组 m中有 5个元素,所以数组 m即为 m0=5,m1=4,m2=3,m3=2,m4=1。C 项,m0=5,引用数组元素为 m5,但是数组下标范围是 04,所以 m5溢出,引用错误。28.有以下程序:#includestdiohvoid fun(int a,int n) int i,t; for(i=0;in2;i+) t=ai; ai=an 一 1-i; an 一 1一 i=t; main() int k10=
40、1,2,3,4,5,6,7,8,9,10,i; fun(k,5); for(i=2;i8;i+) printf(“d“,ki); printf(“n“); 程序运行的结果是( )。(分数:2.00)A.3456787B.876543C.1098765D.321678 解析:解析:由于数组名本身是一个地址,所以在用数组名作为实参传递时,对应的形参相当于一个指针变量,在函数中可以通过指针变量来引用数组元素,从而改变元素的值。本题中函数 fun的作用是将数组A的前 n个元素进行逆转,fun(k,5)的结果是数组 k的前五个元素 1、2、3、4、5 变为 5、4、3、2、1。逆转后,输出数组中第 3个
41、至第 8个元素。29.有以下程序: #includestdioh void fun(int a,int b) int t; t=a;a=b;b=t; main() int c10=1,2,3,4,5,6,7,8,9,0,i; for(i=0;i10;i+=2) fun(ci,ci+11); for(i=0;i10;i+) printf(“d,“,ci); printf(“n“); 程序运行的结果是( )。(分数:2.00)A.1,2,3,4,5,6,7,8,9,0, B.2,1,4,3,6,5,8,7,0,9,C.0,9,8,7,6,5,4,3,2,1,D.0,1,2,3,4,5,6,7,8,
42、9,解析:解析:在 C语言中,函数参数传递的作用是“传值”,形参和实参是两个没有关系的变量。函数fun交换了参数值,但只是交换了形参的值,结果并不会传递给实参。所以数组 c没有发生变化,原样输出。30.有以下程序: #includestdioh #define N 4 void fun(int aN,int b) int i; for(i=0;iN;i+) bi=aii; main() int xN=(1,2,3,4,5,6,7,8,9,10,yN,i; fun(x,y); for(i=0;iN;i+) printf(“d“,yi); printf(“n“); 程序运行的结果是( )。(分数:
43、2.00)A.1 2 3 4B.1 0 7 0 C.1 4 5 9D.3 4 8 0解析:解析:数组 x有 4列。fun 函数中 for循环的作用是将二维数组前 4行的对角线元素分别赋给 b0,b1,b2,b3。在主函数中,二维数组初始化为1,2,3,4,5,6,7,8,9,10,所以可以看出对角线元素为 1 0 7 0。31.若有定义语句:double x5=10,2,3,4,50,*p=x,则错误引用 x数组元素的是( )。(分数:2.00)A.*pB.x5 C.*(p+1)D.*x解析:解析:引用一维数组元素有多种方式。直接引用的表达式为:数组名下标。数组大小为 n时,下标的取值范围为
44、0(n 一 1),所以本题中 x的下标为 04,x5溢出,B 项错误。此外还可以通过指针引用一维数组元素。指针 p指向该数组,所以*p 表示 x0,A 项正确;指针 p+1指向数组 x的第二个元素的地址,*(p+1)表示引用 x的第二个元素,C 项正确;x 为 x数组元素的首地址,*x 表示对 x0的引用,D项正确。32.下面的函数调用语句中,func 函数的实参个数是( )。 func(f2(v1,v2),(v3,v4,v5),(v6,max(v7,v8)(分数:2.00)A.3 B.4C.5D.8解析:解析:函数调用中,实参有多个时,它们之间应该用逗号分隔。本题中的实参有 3个,为f2(v
45、1,v2)、(v3,v4,v5)、(v6,max(v7,v8)。其中 f2(v1,v2)是函数做参数,(v3,v4,v5)是逗号表达式做参数,(v6,max(v7,v8)是逗号与函数相结合做参数。33.有以下程序: #includestdioh int fun(int a,int b) if(b=0)return a; else return(fun(一一 a,一一 b); main() printf(“dn“,fun(4,2); 程序运行的结果是( )。(分数:2.00)A.1B.2 C.3D.4解析:解析:fun 函数是一个递归函数,其功能是:当 b的值为零时,返回此时 a的值;否则,返回fun(一一 a,一一 b),即将 a和 b的值分别减 1后返回 fun(a,b)。当 b不断递减时,a 也不断递减,直到 b为零。执行过程为:执行 fun(4,2),b=2,返回 f(3,1),此时 b=1,返回 f(2,0),b=0,返回 a的值 2。34.有以下程序: #includestdioh int fun(int(*s)4,int n,int k) int m,i; m=s0k:for(i=1;in;i+) if(sikm) m=sik: return m; main() int a44=1,2,3,4