1、国家二级(C 语言)机试模拟试卷 147及答案解析(总分:86.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.下列叙述中正确的是( )。(分数:2.00)A.线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的B.线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构C.线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构D.线性表的链式存储结构与顺序存储结构在存储空间的需求上没有可比性2.下列叙述中正确的是( )。(分数:2.00)A.栈是一种先进先出的线性表B.队列是一种后进先出的线性表C.栈与队列都是非线性结构D.以上三种说法都不对3.软件测
2、试的目的是( )。(分数:2.00)A.评估软件可靠性B.发现并改正程序中的错误C.改正程序中的错误D.发现程序中的错误4.在软件开发中,需求分析阶段产生的主要文档是( )。(分数:2.00)A.软件集成测试计划B.软件详细设计说明书C.用户手册D.软件需求规格说明书5.软件生命周期是指( )。(分数:2.00)A.软件产品从提出、实现、使用维护到停止使用退役的过程B.软件从需求分析、设计、实现到测试完成的过程C.软件的开发过程D.软件的运行维护过程6.面向对象方法中,继承是指( )。(分数:2.00)A.一组对象所具有的相似性质B.一个对象具有另一个对象的性质C.各对象之间的共同性质D.类之
3、间共享属性和操作的机制7.层次型、网状型和关系型数据库划分原则是( )。(分数:2.00)A.记录长度B.文件的大小C.联系的复杂程度D.数据之间的联系方式8.一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则实体工作人员与实体计算机之间的联系是( )。(分数:2.00)A.一对一B.一对多C.多对多D.多对一9.数据库设计中反映用户对数据要求的模式是( )。(分数:2.00)A.内模式B.概念模式C.外模式D.设计模式10.有三个关系 R、S 和 T如下: (分数:2.00)A.自然连接B.差C.交D.并11.计算机能直接执行的程序是( )。(分数:2.00)A.源程序B.目标程
4、序C.汇编程序D.可执行程序12.以下叙述中正确的是( )。(分数:2.00)A.C语言规定必须用 main作为主函数名,程序将从此开始执行B.可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行C.C语言程序将从源程序中第一个函数开始执行D.mmn的各种大小写拼写形式都可以作为主函数名,如 MAIN,Main 等13.以下选项中可用做 C程序合法实数的是( )。(分数:2.00)A.30e02B.1eoC.E9D.912E14.下列定义变量的语句中错误的是( )。(分数:2.00)A.int_int;B.double int_;C.char For;D.float US$;15.
5、表达式:(int)(double)92)-92 的值是( )。(分数:2.00)A.0B.3C.4D.516.设变量均已正确定义,若要通过 scanf(“dcdc“,&a1,&c1,&a2,&c2);语句为变量 a1和 a2赋数值 10和 20,为变量 c1和 c2赋字符 X和 Y。以下所示的输入形式中正确的是( )。(注:代表空格字符)(分数:2.00)A.10X回车 20Y回车B.10X20Y回车C.10X回车 20Y回车D.10X20Y回车17.以下选项中不能作为 C语言合法常量的是( )。(分数:2.00)A.01e+6B.cdC.aD.01118.if语句的基本形式是:if(表达式)
6、语句,以下关于“表达式”值的叙述中正确的是( )。(分数:2.00)A.必须是逻辑值B.必须是整数值C.必须是正数D.可以是任意合法的数值19.有如下嵌套的 if语句:if(ab)if(ae) k=a;else k=c;elseif(bc)k=b;else k=c;以下选项中与上述 if语句等价的语句是( )。(分数:2.00)A.k=(ab)?(bc)?a:b):(bc)?b:c);B.k=(ab)?(ae)?a:c):(bc)?b:c);C.k=(ab)?a:b;k=(bc)?b:c;D.k=(ab)?a:b;k=(ac)a:c;20.有以下程序:#includestdiohmain()i
7、nt k=5;while(-k)printf(“d“,k-=3);printf(“n“);程序执行后的输出结果是( )。(分数:2.00)A.1B.2C.4D.死循环21.有以下程序:#includestdiohmain()int i,j;for(i-3;i=1;i-)for(j=1;j=2;j+)printf(“d“,i+j);printf(“n“);程序运行后的输出结果是( )。(分数:2.00)A.4 3 2 5 4 3B.4 5 3 4 2 3C.2 3 3 4 4 5D.2 3 3 4 2 322.有以下程序:#includestdiohmain()int k=5,n=0;doswi
8、tch(k)case1:case3:n+=1;k-;break;default:n=0;k-;ease2:case4:n+=2;k-;break;printf(“d“,n);while(k0&n5);程序运行后的输出结果是( )。(分数:2.00)A.02356B.0235C.235D.235623.以下关于 return语句的叙述中正确的是( )。(分数:2.00)A.一个自定义函数中必须有一条 return语句B.一个自定义函数中可以根据不同情况设置多条 return语句C.定义成 void类型的函数中可以有带返回值的 return语句D.没有 return语句的自定义函数在执行结束时不能
9、返回到调用处24.已定义以下函数:int fun(int*p)return*p;fun 函数的返回值是( )。(分数:2.00)A.一个整数B.不确定的值C.形参 P中存放的值D.形参 P的地址值25.以下程序段完全正确的是( )。(分数:2.00)A.int*p;seanf(“d“,&p);B.int*p;searrf(“d“,P);C.int k,*p=&k;seanf(“d“,p);D.int k,*p;*p=&k;seanf(“d“,p);26.设有定义:double a10,*s=a;以下能够代表数组元素 a3的是( )。(分数:2.00)A.(*s)3B.*(s+3)C.*s3D.
10、*s+327.有以下程序:#includestdiohvoid f(int*q)im i=0;for(;i5;i+)(*q)+;main()int a5=1,2,3,4,5,i;f(a);for(i=0;i5;i+)printf(“d,“,ai);程序运行后的输出结果是( )。(分数:2.00)A.6,2,3,4,5,B.2,2,3,4,5,C.1,2,3,4,5,D.2,3,4,5,6,28.有以下程序:#includestdiohint fun(int(*s)4,int n,int k)int m,i;m=s0k;for(i=1;in;i+)if(sikm)m=sik;return m;m
11、ain()int a44=1,2,3,4,11,12,13,14,2l,22,23,24,3l,32,33,34;printf(“dn“,fun(a,4,0);程序运行后的输出结果是( )。(分数:2.00)A.4B.34C.31D.3229.以下选项中正确的语句组是( )。(分数:2.00)A.char*s;s=“BOOK!“;B.char*s;s=“BOOK!“;C.char s10;s=“BOOK!“;D.char s;s=“BOOK!“;30.若有定义语句:char*s1=“OK“,*s2=“ok“;以下选项中,能够输出“OK”的语句是( )。(分数:2.00)A.if(strcmp(
12、s1,s2)!=0)puts(s2);B.if(strcmp(s1,s2)!=0)puts(s1);C.if(strcmp(s1,s2)=1)puts(s1);D.if(strcmp(s1,s2)=0)puts(s1);31.有以下程序:#ineludestdiohvoid fur,(char*p)+p;printf(“sn“,*p);main()char*a=“Morning“,“Afternoon“,“Evening“,“Night“;fun(a);程序运行后的输出结果是( )。(分数:2.00)A.AfternoonB.fternoonC.MorningD.orning32.有以下程序,
13、程序中库函数 islower(ch)用以判断 ch中的字母是否为小写字母:#includestdioh#includectypehvoid fun(char*p)int i=0;while(pi)if(pi=&islower(pi-1)pi-1=pi-1-a+A;i+;main()char s1100=“ab cd EFG!“;fun(s1);printf(“sn“,s1);程序运行后的输出结果是( )。(分数:2.00)A.ab cd EFg!B.Ab Cd EFg!C.ab cd EFG!D.aB cD EFG!33.有以下程序:#includestdiohint f(int x)int
14、y;if(x=0|x=1)return(3);y=x*x-f(x-2);return y;main()int z;z=f(3);printf(“dn“,z);程序运行后的输出结果是( )。(分数:2.00)A.0B.9C.6D.834.有以下程序:#includestdiohint fun(int x,int n)static int sum=0,i;for(i=0;in;i+)sum+=xi;return sum;main()int a=1,2,3,4,5,b=6,7,8,9,s=0;s=fun(a,5)+fun(b,4);printf(“dn“,s);程序执行后的输出结果是( )。(分数:
15、2.00)A.55B.50C.45D.6035.有以下结构体说明、变量定义和赋值语句:struet STDchar name10;int age;char sex;s5,*ps;ps=&s0;则以下 scaanf函数调用语句有错误的是( )。(分数:2.00)A.seanf(“s“,s0name);B.seanf(“d“,&s0age);C.scanf(“c“,&(ps-sex);D.seanf(“d“,ps-age);36.若有以下语句:typedef struetSint g;char h;T;以下叙述中正确的是( )。(分数:2.00)A.可用 S定义结构体变量B.可用 T定义结构体变量
16、C.S是 struct类型的变量D.T是 struct S类型的变量37.有以下程序:#includestdioh#includestringhstruet Aint a;char b10;double c:;struct A f(struet A t);main()struet A a=1001,“ZhangDa“,10980;a=f(a);printf(“d,s,61fn“,aa,ab,ac);struet A f(struet A t)ta=1002:strcpy(tb,“ChangRong“);tc=12020;return t;程序运行后的输出结果是( )。(分数:2.00)A.10
17、02,ZhangDa,12020B.1002,ChangRong,12020C.1001,ChangRong,10980D.1001,ZhangDa,1098038.设有宏定义:#define IsDIV(k,n)(kn=1)?1:0)且变量 m已正确定义并赋值,则宏调用:IsDIV(m,5)&IsDIV(m,7)为真时所要表达的是( )。(分数:2.00)A.判断 m是否能被 5和 7整除B.判断 m被 5和 7整除是否都余 1C.判断 m被 5或者 7整除是否余 1D.判断 m是否能被 5或者 7整除39.有以下程序:#includestdiohmain()int a=1,b=2,c=3,
18、x;x=(ab)&c;printf(“dn“,x);程序运行后的输出结果是( )。(分数:2.00)A.3B.1C.2D.040.有以下程序:#includestdiohmain()FILE*fp;int k,n,a6=1,2,3,4,5,6;fp=fopen(“d2dat“,“w“);fprintf(fp,“dddn“,a0,a1,a2);fprintf(fp,“dddn“,a3,a4,a5);felose(fp);fp=fopen(“d2dat“,“r“);fscanf(fp,“dd“,&k,&n);printf(“ddn“,k,n);fclose(fp);程序运行后的输出结果是( )。(
19、分数:2.00)A.1 2B.1 4C.123 4D.123 456二、程序填空题(总题数:1,分数:2.00)41.下列给定程序中,函数 fun的功能是:在形参 ss所指字符串数组中查找与形参 t所指字符串相同的串,找到后返回该串在字符串数组中的位置(即下标值),若未找到则返回-1。ss 所指字符串数组中共有 N个内容不同的字符串,且串长小于 M。请在程序的下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序在文件 BLANK1C 中。不得增行或删行,也不得更改程序的结构!#includestdioh#includestringh#define N5#define M
20、8int fun(char(*ss)M,char*t)int i;*found*for(i=0;i【1】;i+)*found*if(stremp(ssi,t)=0)return【2】;return-1;main()char chNM=“if“,“while“,“switch“,“int“,“for“,tM;int n,i;printf(“nThe original stringnn“);for(i=0;iN;i+)puts(ehi);printf(“n“);printf(“nEnter a string for search:“);gets(t);n=fun(ch,t);*found*if(n
21、=【3】)printf(“nDont found!n“);else printf(“nThe position isdn“,n);(分数:2.00)_三、程序修改题(总题数:1,分数:2.00)42.给定程序 modilc 的主函数中,将 a、b、c 三个结点链成一个单向链表,并给各结点的数据域赋值,函数 fun()的作用是:累加链表结点数据域中的数据作为函数值返回。请改正函数 fun中指定部位的错误,使它能得出正确的结果。注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构。试题程序:#includestdiohtypedef struet listint data;strue
22、t list*next;LIST;int fun(UST*h)LIST*p;*found*int t;p=h;*found*while(*p)*found*t=t+pdata;p=(*p)next;return t;main()LIST a,b,c,*h;adata=34;bdata=51;cdata=87;Cnext=0;h=&a;a)next=&b;bnext=&c;printf(“总和=dn“,fun(h);(分数:2.00)_四、程序设计题(总题数:1,分数:2.00)43.请编写函数 fun,其功能是:判断 t所指字符串中的字母是否由连续递增字母序列组成(字符串长度大于等于 2)。例
23、如字符串:uvwxyz 满足要求;而字符串:uvxwyz 不满足要求。注意:部分源程序存放在PROGlC 中,请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun指定的部位填入所编写的若干语句。试题程序:#includestdioh#includestringhvoid NONO();int fun(char*t)main()char s26;printf(“请输入一个字母组成的字符串:“);gets(s);if(fun(s)printf(“s 是由连续字母组成的字符串n“,s);else pfinff(“s 不是由连续字母组成的字符串!n“,s);NONO();void NONO
24、()*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*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=strchr(s,n);if(p)*p=0;if(fun(s)fprintf(wf,“sn“,s+2);else finff(wf,“sn“,strrev(s);fclose(fp);fclose(wf);(分数:2.00)_国家二级(C 语言)机试模拟试卷 147答案解析(总分:86.00,做题时间:90 分钟)一
25、、选择题(总题数:40,分数:80.00)1.下列叙述中正确的是( )。(分数:2.00)A.线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的B.线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构 C.线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构D.线性表的链式存储结构与顺序存储结构在存储空间的需求上没有可比性解析:解析:线性链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间,所以一般要多于顺序存储结构。2.下列叙述中正确的是( )。(分数:2.00)A.栈是一种先进先出的线性表B.队列是一种后进先出的线性表C.栈与队列都是非线性结构D.以上三种
26、说法都不对 解析:解析:栈是一种先进后出的线性表,队列是一种先进先出的线性表,栈与队列都是线性结构。3.软件测试的目的是( )。(分数:2.00)A.评估软件可靠性B.发现并改正程序中的错误C.改正程序中的错误D.发现程序中的错误 解析:解析:软件测试是为了发现错误而执行程序的过程,测试要以查找错误为中心,而不是为了演示软件的正确功能。不是为了评估软件或改正错误。4.在软件开发中,需求分析阶段产生的主要文档是( )。(分数:2.00)A.软件集成测试计划B.软件详细设计说明书C.用户手册D.软件需求规格说明书 解析:解析:需求分析阶段的工作可以概括为:需求获取、需求分析、编写需求规格说明书、需
27、求评审四个方面。所以选择 D。5.软件生命周期是指( )。(分数:2.00)A.软件产品从提出、实现、使用维护到停止使用退役的过程 B.软件从需求分析、设计、实现到测试完成的过程C.软件的开发过程D.软件的运行维护过程解析:解析:通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。也就是说,软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时期都属于软件生命周期。6.面向对象方法中,继承是指( )。(分数:2.00)A.一组对象所具有的相似性质B.一个对象具有另一个对象的性质C.各对象之间的共同性质D.类之间共享属性和操作的机制 解析:解析:继承是面向对象的方法的
28、一个主要特征,是使用已有的类的定义作为基础建立新类的定义技术。广义地说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们,所以说继承是指类之间共享属性和操作的机制。7.层次型、网状型和关系型数据库划分原则是( )。(分数:2.00)A.记录长度B.文件的大小C.联系的复杂程度D.数据之间的联系方式 解析:解析:层次模型的基本结构是树形结构,网状模型是一个不加任何条件限制的无向图,关系模型采用二维表来表示,所以三种数据库的划分原则是数据之间的联系方式。8.一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则实体工作人员与实体计算机之间的联系是( )。(分数:2.00)A.一对一
29、B.一对多C.多对多 D.多对一解析:解析:因为一个人可以操作多个计算机,而一台计算机又可以被多个人使用,所以两个实体之间是多对多的关系。9.数据库设计中反映用户对数据要求的模式是( )。(分数:2.00)A.内模式B.概念模式C.外模式 D.设计模式解析:解析:数据库系统的三级模式是概念模式、外模式和内模式。概念模式是数据库系统中全局数据逻辑结构的描述,是全体用户公共数据视图。外模式也称子模式或用户模式,它是用户的数据视图,给出了每个用户的局部数据描述,所以选择 c。内模式又称物理模式,它给出了数据库物理存储结构与物理存取方法。10.有三个关系 R、S 和 T如下: (分数:2.00)A.自
30、然连接B.差 C.交D.并解析:解析:关系 T中的元组是 R关系中有而 s关系中没有的元组的集合,所以进行的是差的运算。11.计算机能直接执行的程序是( )。(分数:2.00)A.源程序B.目标程序C.汇编程序D.可执行程序 解析:解析:计算机能直接执行的程序是二进制的可执行程序,扩展名为exe。所以选择 D选项。12.以下叙述中正确的是( )。(分数:2.00)A.C语言规定必须用 main作为主函数名,程序将从此开始执行 B.可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行C.C语言程序将从源程序中第一个函数开始执行D.mmn的各种大小写拼写形式都可以作为主函数名,如 MA
31、IN,Main 等解析:解析:C 语言中的主函数只能是 main()函数,不能任意指定,所以 B选项错误。C 语言从主函数main()开始,到主函数 main()结束,所以 C选项错误。主函数必须写成小写的 main,不能混淆大小写,所以 D选项错误。13.以下选项中可用做 C程序合法实数的是( )。(分数:2.00)A.30e02B.1eo C.E9D.912E解析:解析:A 选项中 e后面的指数必须为整数,所以错误。C 语言规定,E 之前必须要有数字,所以 C选项错误。E 后面必须要有数字,且必须为整数,所以 D选项错误。14.下列定义变量的语句中错误的是( )。(分数:2.00)A.in
32、t_int;B.double int_;C.char For;D.float US$; 解析:解析:C 语言规定,变量命名必须符合标识符的命名规则。D 选项中包含了非法字符“$”,所以错误。标识符由字母、数字或下划线组成,且第一个字符必须是大小写英文字母或者下划线,而不能是数字。大写字符与小写字符被认为是两个不同的字符,所以 For不是关键字 for。15.表达式:(int)(double)92)-92 的值是( )。(分数:2.00)A.0B.3 C.4D.5解析:解析:先将整型数据 9强制转换成 double型,然后除以 2得到的结果与 double型保持一致,即为45,然后将 45 强制
33、转换成整型数据 4,然后计算 92 的值为 1,最后计算 4-1的值为 3,所以选择B选项。16.设变量均已正确定义,若要通过 scanf(“dcdc“,&a1,&c1,&a2,&c2);语句为变量 a1和 a2赋数值 10和 20,为变量 c1和 c2赋字符 X和 Y。以下所示的输入形式中正确的是( )。(注:代表空格字符)(分数:2.00)A.10X回车 20Y回车B.10X20Y回车C.10X回车 20Y回车 D.10X20Y回车解析:解析:输入数据的格式必须与 scanf()的格式控制串完全匹配,如果 A、B、C 选项中在数字 10后面均输入了空格,则会将空格赋给变量 c1,而不是把
34、X赋给 c1,所以选择 C选项。17.以下选项中不能作为 C语言合法常量的是( )。(分数:2.00)A.01e+6B.cd C.aD.011解析:解析:要想表示字符串常量应该用双引号表示,即“cd”,单引号用于表示字符常量,所以 B选项中的表示方法错误。18.if语句的基本形式是:if(表达式)语句,以下关于“表达式”值的叙述中正确的是( )。(分数:2.00)A.必须是逻辑值B.必须是整数值C.必须是正数D.可以是任意合法的数值 解析:解析:if 语句中的表达式可以是任意合法的数值,如常量、变量表达式。所以 D选项正确。19.有如下嵌套的 if语句:if(ab)if(ae) k=a;els
35、e k=c;elseif(bc)k=b;else k=c;以下选项中与上述 if语句等价的语句是( )。(分数:2.00)A.k=(ab)?(bc)?a:b):(bc)?b:c);B.k=(ab)?(ae)?a:c):(bc)?b:c); C.k=(ab)?a:b;k=(bc)?b:c;D.k=(ab)?a:b;k=(ac)a:c;解析:解析:题目中嵌套语句的含义是当 ab 且 ac 成立,则将 a的值赋给 k。如果 ab 成立而 ac不成立将 c的值赋给 k。如果 ab 不成立而 bc 成立,将 b的值赋给 k。如果如果 ab 不成立且 bc也不成立,将 c的值赋给 k。判断条件表达式只有
36、B选项可以表示这个含义。20.有以下程序:#includestdiohmain()int k=5;while(-k)printf(“d“,k-=3);printf(“n“);程序执行后的输出结果是( )。(分数:2.00)A.1 B.2C.4D.死循环解析:解析:-k 先自减再使用,所以第一次判断条件即为 while(4),条件为真,执行打印 k的值 k=4-3,结果为 1;第二次判断条件即为 while(0),条件为假,结束循环,打印回车换行符。所以选择 A选项。21.有以下程序:#includestdiohmain()int i,j;for(i-3;i=1;i-)for(j=1;j=2;j
37、+)printf(“d“,i+j);printf(“n“);程序运行后的输出结果是( )。(分数:2.00)A.4 3 2 5 4 3B.4 5 3 4 2 3 C.2 3 3 4 4 5D.2 3 3 4 2 3解析:解析:第一次执行外循环,i 的值为 3,第一次执行内循环 j的值为 1,j=2 条件成立,打印 i+j的值,即 4;第二次执行内循环 j的值为 2,j=2 条件成立,打印 i+j的值,即 5;再判断条件不成立,打印回车换行符,跳出内循环。第二次执行外循环,i 的值为 2,内循环的执行同第一次一样,所以打印3和 4,打印回车换行,结束内循环。第三次执行外循环 i的值为 1,同理内
38、循环中打印 2和 3,打印回车换行符,结束内循环。22.有以下程序:#includestdiohmain()int k=5,n=0;doswitch(k)case1:case3:n+=1;k-;break;default:n=0;k-;ease2:case4:n+=2;k-;break;printf(“d“,n);while(k0&n5);程序运行后的输出结果是( )。(分数:2.00)A.02356B.0235C.235 D.2356解析:解析:k 的值为 5,逐个对 case语句进行匹配,均不匹配,执行 default下的语句 n=0;k-。再执行 case2:cased:后面的语句 n+
39、=2;k-;。执行 break语句跳出 switch判断,打印 n的值,即 2。经过第一次循环后,k 的值为 3,然后进行 k0&n5 条件判断为真。第二次执行循环体,执行 case3:后面的语句 n+=1;k-;。再执行 break语句跳出循环,此时打印 n的值 3,此时 k的值为 2。第三次执行循环体 k的值为 2,满足条件,执行 case2:cased:后面的语句 n+=2;k-;。执行 break语句跳出循环体,打印 n的值 5。此时 n不满足条件 k0&n5,所以结束循环。整个程序的打印结果为 235。23.以下关于 return语句的叙述中正确的是( )。(分数:2.00)A.一个
40、自定义函数中必须有一条 return语句B.一个自定义函数中可以根据不同情况设置多条 return语句 C.定义成 void类型的函数中可以有带返回值的 return语句D.没有 return语句的自定义函数在执行结束时不能返回到调用处解析:解析:在函数中允许有多个 return语句,但每次调用只能有一个 return语句被执行,因此只能返回一个函数值。定义成 void类型的函数不允许从该函数取得返回值,也不允许使用 return语句,C 选项描述错误。没有 return语句的函数在执行到函数的最后一条语句后会自动返回到调用处,A、D 选项描述错误。因此 B选项正确。24.已定义以下函数:in
41、t fun(int*p)return*p;fun 函数的返回值是( )。(分数:2.00)A.一个整数 B.不确定的值C.形参 P中存放的值D.形参 P的地址值解析:解析:返回值为指针变量指向的数据,该数据已被定义为整型。因此 A选项正确。25.以下程序段完全正确的是( )。(分数:2.00)A.int*p;seanf(“d“,&p);B.int*p;searrf(“d“,P);C.int k,*p=&k;seanf(“d“,p); D.int k,*p;*p=&k;seanf(“d“,p);解析:解析:A 选项中错在没有对指针进行初始化,是无效指针,并且在 scanf(“d“,&p)中无需再
42、进行取地址操作;B 选项中没有对指针进行初始化,是无效指针;D 选项中语句*p=&k;的左端*p 是指针所指内存空间的值,&k 是地址,应为 p=&k。因此 C选项正确。26.设有定义:double a10,*s=a;以下能够代表数组元素 a3的是( )。(分数:2.00)A.(*s)3B.*(s+3) C.*s3D.*s+3解析:解析:语句*s=a;表示指针变量 s指向一维数组 a的首地址。a3表示引用数组 a的第 4个元素,*(s+i)表示引用指针 s所指数组 a的第 i+1个元素,选项 A、C、D 的表示方法错误,只有 B选项正确。27.有以下程序:#includestdiohvoid
43、f(int*q)im i=0;for(;i5;i+)(*q)+;main()int a5=1,2,3,4,5,i;f(a);for(i=0;i5;i+)printf(“d,“,ai);程序运行后的输出结果是( )。(分数:2.00)A.6,2,3,4,5, B.2,2,3,4,5,C.1,2,3,4,5,D.2,3,4,5,6,解析:解析:本题考查的是函数的地址调用,将数组名作为数组首地址进行传递,然后取首个数组元素值进行加 1运算,循环 5次。因此 A选项正确。28.有以下程序:#includestdiohint fun(int(*s)4,int n,int k)int m,i;m=s0k;
44、for(i=1;in;i+)if(sikm)m=sik;return m;main()int a44=1,2,3,4,11,12,13,14,2l,22,23,24,3l,32,33,34;printf(“dn“,fun(a,4,0);程序运行后的输出结果是( )。(分数:2.00)A.4B.34C.31 D.32解析:解析:本题重点考察二维数组名作为实参进行参数传递,在主函数中调用了 fun函数,实参为二维数组名 a和两个整数 4、0,这样对应定义 fun函数首部有三种形式,这里采用了第一种形式行指针,这样在 fun函数对 sij进行操作实际上就是对主函数中的 aij进行操作,再分析 fun
45、函数的作用便可知,是求二维数组第 0列中最大的那个元素。因此 C选项正确。29.以下选项中正确的语句组是( )。(分数:2.00)A.char*s;s=“BOOK!“;B.char*s;s=“BOOK!“; C.char s10;s=“BOOK!“;D.char s;s=“BOOK!“;解析:解析:A 选项去掉大括号就正确了;C 选项和 D选项应在定义时赋初值。因此 B选项正确。30.若有定义语句:char*s1=“OK“,*s2=“ok“;以下选项中,能够输出“OK”的语句是( )。(分数:2.00)A.if(strcmp(s1,s2)!=0)puts(s2);B.if(strcmp(s1,
46、s2)!=0)puts(s1); C.if(strcmp(s1,s2)=1)puts(s1);D.if(strcmp(s1,s2)=0)puts(s1);解析:解析:strcmp(s1,s2)是字符串比较函数,比较规则是两个字符串自左向右逐个字符相比(按照ASCII码值大小),以第一个不相同的字符的大小作为比较结果。因为;00,所以 strcmp(s1,s2)为负值,只有 B选项正确。31.有以下程序:#ineludestdiohvoid fur,(char*p)+p;printf(“sn“,*p);main()char*a=“Morning“,“Afternoon“,“Evening“,“Night“;fun(a);程序运行后的输出结果是( )。(分数:2.00)A.Afternoon B.fternoonC.MorningD.orning解