1、二级 C 语言-636 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:40.00)1.下列叙述中正确的是_。(分数:1.00)A.线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的B.线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构C.线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构D.线性表的链式存储结构与顺序存储结构在存储空间的需求上没有可比性2.下列叙述中正确的是_。(分数:1.00)A.栈是一种先进先出的线性表B.队列是一种后进先出的线性表C.栈与队列都是非线性结构D.以上三种说法都不对3.软件测试的目的是_。(分数:
2、1.00)A.评估软件可靠性B.发现并改正程序中的错误C.改正程序中的错误D.发现程序中的错误4.在软件开发中,需求分析阶段产生的主要文档是_。(分数:1.00)A.软件集成测试计划B.软件详细设计说明书C.用户手册D.软件需求规格说明书5.软件生命周期是指_。(分数:1.00)A.软件产品从提出、实现、使用维护到停止使用退役的过程B.软件从需求分析、设计、实现到测试完成的过程C.软件的开发过程D.软件的运行维护过程6.面向对象方法中,继承是指_。(分数:1.00)A.一组对象所具有的相似性质B.一个对象具有另一个对象的性质C.各对象之间的共同性质D.类之间共享属性和操作的机制7.层次型、网状
3、型和关系型数据库划分原则是_。(分数:1.00)A.记录长度B.文件的大小C.联系的复杂程度D.数据之间的联系方式8.一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则试题工作人员与实体计算机之间的联系是_。(分数:1.00)A.一对一B.一对多C.多对多D.多对一9.数据库设计中反映用户对数据要求的模式是_。(分数:1.00)A.内模式B.概念模式C.外模式D.设计模式10.有三个关系 R、S 和 T 如下: (分数:1.00)A.自然连接B差C交D并11.计算机能直接执行的程序是_。(分数:1.00)A.源程序B.目标程序C.汇编程序D.可执行程序12.以下叙述中正确的是_。(
4、分数:1.00)A.C 语言规定必须用 main 作为主函数名,程序将从此开始执行B.可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行C.C 语言程序将从源程序中第一个函数开始执行D.main 的各种大小写拼写形式都可以作为主函数名,如 MAIN,Main 等13.以下选项中可用做 C 程序合法实数的是_。(分数:1.00)A.3.0e0.2B1e0CE9D.9.12E14.下列定义变量的语句中错误的是_。 Aint_int; Bdouble int_; Cchar For; D (分数:1.00)A.B.C.D.15.表达式:(int)(double)9/2)-9%2 的值是
5、_。(分数:1.00)A.0B.3C.4D.516.设变量均已正确定义,若要通过 scanf(“%d%c%d%c“, 语句为变量 a1 和 a2 赋数值 10 和 20,为变量 c1 和 c2 赋字符 x 和 y。以下所示的输入形式中正确的是_。(注:代表空格字符)(分数:1.00)A.10X回车20Y回车B.10X20YC.10X回车20Y回车D.10X20Y回车17.以下选项中不能作为 C 语言合法常量的是_。(分数:1.00)A.0.1e+6B.“cd“C.“/a“D.“/011“18.if 语句的基本形式是:if(表达式)语句,以下关于“表达式”值的叙述中正确的是_。(分数:1.00)
6、A.必须是逻辑值B.必须是整数值C.必须是正数D.可以是任意合法的数值19.有如下嵌套的 if 语句: if(ab) if(ac)k=a; else k=c; else if(bc)k=b; else k=c; 以下选项中与上述 if 语句等价的语句是_。(分数:1.00)A.k=(ab)?(bc)?a:b):(bc)?b:c);B.k=(ab)?(ac)?a:c):(bc)?b:c);C.k=(ab)?a:b;k=(bc)?b:c;D.k=(ab)?a:b;k=(ac)?a:c;20.有以下程序: #includestdio.h main() int k=5; while(-k)printf
7、(“%d“,k-=3); printf(“/n“); 程序执行后的输出结果是_。(分数:1.00)A.1B.2C.4D.死循环21.有以下程序: #inctudestdio.h main() int i,j; for(i=3;i=1;i-) for(j=1;j=2;j+)printf(“%d“,i+j); printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.4 32 54 3B.4 53 42 3C.2 33 44 5D.2 33 42 322.有以下程序: #includestdio.h main() int k=5,n=0; do switch(k) case 1:
8、case 3:n+=1;k-;break; default:n=0;k-; case 2:case 4:n+=2;k-;break; printf(“%d“,n); while(k0 程序运行后的输出结果是_。(分数:1.00)A.02356B.0235C.235D.235623.以下关于 return 语句的叙述中正确的是_。(分数:1.00)A.一个自定义函数中必须有一条 return 语句B.一个自定义函数中可以根据不同情况设置多条 return 语句C.定义成 void 类型的函数中可以有带返回值的 return 语句D.没有 return 语句的自定义函数在执行结束时不能返回到调用处
9、24.已定义以下函数: int fun(int*p) return*p; fun 函数的返回值是_。(分数:1.00)A.一个整数B.不确定的值C.形参 p 中存放的值D.形参 p 的地址值25.以下程序段完全正确的是_。(分数:1.00)A.int*p;scanf(“%d“,B.int*p;scanf(“%d“,p);C.int k,*p=scanf(“%d“,p);D.int k,*p;*p=scanf(“%d“,p);26.设有定义: double a10,$s=a; 以下能够代表数组元素 a3的是_。(分数:1.00)A.(*s)3B.*(s+3)C.*s3D.*s+327.有以下程序
10、: #includestdio.h void f(int*q) int 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); 程序运行后的输出结果是_。(分数:1.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.有以下程序: #includestdio.h int fun(int(*s)4,int n,int k) int m,i; m=s0k; for(i=1;in;i+) if(sikm) m=sik; ret
11、urn m; main() int a44=1,2,3,4, 11,12,13,14, 21,22,23,24, 31,32,33,34; printf(“%d/n“,fun(a,4,0); 程序运行后的输出结果是_。(分数:1.00)A.4B.34C.31D.3229.以下选项中正确的语句组是_。(分数:1.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”的语句是_。(分数:1.00)
12、A.if(strcmp(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.有以下程序: #includestdio.h void fun(char*p) +p; printf(“%s/n“,*p); main() char*a=“Morning“,“Afternoon“,“Evening“,“Night“; fun(a); 程序运行后的输出结果是_。(分数:1.00)A.AfternoonB.fternoonC.Morn
13、ingD.orning32.有以下程序,程序中库函数 islower(ch)用以判断 ch 中的字母是否为小写字母: #includestdio.h #includectype.h void fun(char*p) int i=0; while(pi) if(pi=“ i+; main() char s1100=“ab cd EFG!“; fun(s1); printf(“%s/n“,s1); 程序运行后的输出结果是_。(分数:1.00)A.ab cd EFg!B.Ab Cd EFg!C.ab cd EFG!D.aB cD EFG!33.有以下程序: #includestdio.h int f
14、(int x) int y; if(x=0|x=1)return(3); y=x*x-f(x-2); return t; main() int z; z=f(3); printf(“%d/n“,z); 程序运行后的输出结果是_。(分数:1.00)A.0B.9C.6D.834.有以下程序: #includestdio.h int 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); prin
15、tf(“%d/n“,s); 程序执行后的输出结果是_。(分数:1.00)A.55B.50C.45D.6035.有以下结构体说明、变量定义和赋值语句: struct STD char name10; int age; char sex; s5,*ps; ps= 则以下 scanf 函数调用语句有错误的是_。(分数:1.00)A.scanf(“%s“,s0.name);B.scanf(“%d“,C.scanf(“%c“,D.scanf(“%d“,ps-age);36.若有以下语句: typedef struct S int g;char h;T; 以下叙述中正确的是_。(分数:1.00)A.可用
16、S 定义结构体变量B.可用 T 定义结构体变量C.S 是 struct 类型的变量D.T 是 struct S 类型的变量37.有以下程序: #includestdio.h #includestring.h struct A int a; char b10; double c; ; struct A f(struct A t); main() struct A a=1001,“ZhangDa“,1098.0; a=f(a); printf(“%d,%s,%6.1f/n“,a.a,a.b,a.c); struct A f(struct A t) t.a=1002; strcpy(t.b,“Cha
17、ngRong“); t.c=1202.0; return t; 程序运行后的输出结果是_。(分数:1.00)A.1002,ZhangDa,1202.0B.1002,ChangRong,1202.0C.1001,ChangRong,1098.0D.1001,ZhangDa,1098.038.设有宏定义: #define IsDIV(k,n)(k%n=1)?1:0) 且变量 m 已正确定义并赋值,则宏调用: IsDIV(m,5) x=(ab) printf(“%d/n“,x); 程序运行后的输出结果是_。(分数:1.00)A.3B.1C.2D.040.有以下程序: #includestdio.h
18、main() FILE*fp; int k,n,a6=1,2,3,4,5,6; fp=fopen(”d2.dat“,“w“); fprintf(fp,“%d%d%d/n“,a0,a1,a2); fprintf(fp,“%d%d%d/n“,a3,a4,a5); fclose(fp); fp=fopen(“d2.dat“,“r“); fscanf(fp,“%d%d“, printf(“%d%d/n“,k,n); fclose(fp); 程序运行后的输出结果是_。(分数:1.00)A.1 2B.1 4C.123 4D.123 456二、(共 18 分)(总题数:1,分数:18.00)41.下列给定程
19、序中,函数 fun 的功能是:将 s 所指字符串中的所有数字字符移到所有非数字字符之后,并保持数字字符串和非数字字符串原有的次序。 例如,s 所指的字符串为“det35adh3kjsdf7/”,执行后结果为“defadhajsdf3537”。 请在程序的下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。 注意:不得增行或删行,也不得更改程序的结构! #includestdio.h void fun(char*s) int i,j=0,k=0;char t180,t280; for(i=0;si!=“/0“;i+) if(si=“0“ 1; else t1k+=si; t2j=0;t1
20、k=0; /*found*/ for(i=0;ik;i+) 2; /*found*/ for(i=0;i 3;i+)sk+i=t2i; main() char s80=“ba3a54j7sd567sdffs“; printf(“/nThe original string is:%s/n“,s); fun(s); printf(“/nThe result is:%s/n“,s); (分数:18.00)三、(共 18 分)(总题数:1,分数:18.00)42.下列给定程序中函数 fun 的功能是:用冒泡法对 6 个字符串进行升序排列。 请改正程序中的错误,使它能得出正确的结果。 注意:不得增行或删
21、行,也不得更改程序的结构! #includestdio.h #includestring.h #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); /*found*/ *(pstr+i)=pstr+j; *(pstr+j)=p; main() int i; char*pstr6,str6MAXLINE; for(i=0;i6;i+)pstri=stri; printf(“/
22、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(“%s/n“,pstri); (分数:18.00)_四、(共 24 分)(总题数:1,分数:24.00)43.编写函数 fun,其功能是:求 ss 所指字符串中指定字符的个数,并返回此值。 例如,若输入字符串 123412132,输入字符为 1,则输出 3。 注意:请勿改动主函数 main 和其他函
23、数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。#includestdio.h #includestring.h #define M 81 int fun(char*ss,char c) main() char aM,ch; void NONO(); printf(“/nPlease enter a string:“);gets(a); printf(“/nPlease enter a char:“);ch=getchar(); printf(“/nThe number of the char is:%d/n“,fun(a,ch); NONO(); void NONO() /
24、*本函数用于打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。*/ int i; FILE *rf,*wf; char aM,bM,ch; rf=fopen(“in.dat“,“r“); wf=fopen(“out.dat“,“w“); for(i=0;i10;i+) fscanf(rf,“%s“,a); fscanf(rf,“%s“,b); ch=*b; fprintf(wf,“%c=%d/n“,ch,fun(a,ch); fclose(rf); fclose(wf); (分数:24.00)_二级 C 语言-636 答案解析(总分:100.00,做题时间:90 分钟)一、选择题
25、(总题数:40,分数:40.00)1.下列叙述中正确的是_。(分数:1.00)A.线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的B.线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构 C.线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构D.线性表的链式存储结构与顺序存储结构在存储空间的需求上没有可比性解析:解析 线性链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间,所以一般要多于顺序存储结构。2.下列叙述中正确的是_。(分数:1.00)A.栈是一种先进先出的线性表B.队列是一种后进先出的线性表C.栈与队列都是非线性结构D.以上三种说法都不对 解析
26、:解析 栈是一种先进后出的线性表,队列是一种先进先出的线性表,栈与队列都是线性结构。3.软件测试的目的是_。(分数:1.00)A.评估软件可靠性B.发现并改正程序中的错误C.改正程序中的错误D.发现程序中的错误 解析:解析 软件测试是为了发现错误而执行程序的过程,测试要以查找错误为中心,而不是为了演示软件的正确功能。不是为了评估软件或改正错误。4.在软件开发中,需求分析阶段产生的主要文档是_。(分数:1.00)A.软件集成测试计划B.软件详细设计说明书C.用户手册D.软件需求规格说明书 解析:解析 需求分析阶段的工作可以概括为:需求获取、需求分析、编写需求规格说明书、需求评审四个方面。所以选择
27、 D。5.软件生命周期是指_。(分数:1.00)A.软件产品从提出、实现、使用维护到停止使用退役的过程 B.软件从需求分析、设计、实现到测试完成的过程C.软件的开发过程D.软件的运行维护过程解析:解析 通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。也就是说,软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时期都属于软件生命周期。6.面向对象方法中,继承是指_。(分数:1.00)A.一组对象所具有的相似性质B.一个对象具有另一个对象的性质C.各对象之间的共同性质D.类之间共享属性和操作的机制 解析:解析 继承是面向对象的方法的一个主要特征,是使用已有的类的定
28、义作为基础建立新类的定义技术。广义地说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们,所以说继承是指类之间共享属性和操作的机制。7.层次型、网状型和关系型数据库划分原则是_。(分数:1.00)A.记录长度B.文件的大小C.联系的复杂程度D.数据之间的联系方式 解析:解析 层次模型的基本结构是树形结构,网状模型是一个不加任何条件限制的无向图,关系模型采用二维表来表示,所以三种数据库的划分原则是数据之间的联系方式。8.一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则试题工作人员与实体计算机之间的联系是_。(分数:1.00)A.一对一B.一对多C.多对多 D.多对一解析:解
29、析 因为一个人可以操作多个计算机,而一台计算机又可以被多个人使用,所以两个实体之间是多对多的关系。9.数据库设计中反映用户对数据要求的模式是_。(分数:1.00)A.内模式B.概念模式C.外模式 D.设计模式解析:解析 数据库系统的三级模式是概念模式、外模式和内模式。概念模式是数据库系统中全局数据逻辑结构的描述,是全体用户公共数据视图。外模式也称子模式或用户模式,它是用户的数据视图,给出了每个用户的局部数据描述,所以选择 C。内模式又称物理模式,它给出了数据库物理存储结构与物理存取方法。10.有三个关系 R、S 和 T 如下: (分数:1.00)A.自然连接B差 C交D并解析:解析 关系 T
30、中的元组是 R 关系中有而 S 关系中没有的元组的集合,所以进行的是差的运算。11.计算机能直接执行的程序是_。(分数:1.00)A.源程序B.目标程序C.汇编程序D.可执行程序 解析:解析 计算机能直接执行的程序是二进制的可执行程序,扩展名为.exe。所以选择 D 选项。12.以下叙述中正确的是_。(分数:1.00)A.C 语言规定必须用 main 作为主函数名,程序将从此开始执行 B.可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行C.C 语言程序将从源程序中第一个函数开始执行D.main 的各种大小写拼写形式都可以作为主函数名,如 MAIN,Main 等解析:解析 C 语
31、言中的主函数只能是 main()函数,不能任意指定,所以 B 选项错误。C 语言从主函数main()开始,到主函数 main()结束,所以 C 选项错误。主函数必须写成小写的 main,不能混淆大小写,所以 D 选项错误。13.以下选项中可用做 C 程序合法实数的是_。(分数:1.00)A.3.0e0.2B1e0 CE9D.9.12E解析:解析 A 选项中 e 后面的指数必须为整数,所以错误。C 语言规定,E 之前必须要有数字,所以 C选项错误。E 后面必须要有数字,且必须为整数,所以 D 选项错误。14.下列定义变量的语句中错误的是_。 Aint_int; Bdouble int_; Cch
32、ar For; D (分数:1.00)A.B.C.D. 解析:解析 C 语言规定,变量命名必须符合标识符的命名规则。D 选项中包含了非法字符“$”,所以错误。标识符由字母、数字或下划线组成,且第一个字符必须是大小写英文字母或者下划线,而不能是数字。大写字符与小写字符被认为是两个不同的字符,所以 For 不是关键字 for。15.表达式:(int)(double)9/2)-9%2 的值是_。(分数:1.00)A.0B.3 C.4D.5解析:解析 先将整型数据 9 强制转换成 double 型,然后除以 2 得到的结果与 double 型保持一致,即为 4.5,然后将 4.5 强制转换成整型数据
33、4,然后计算 9%2 的值为 1,最后计算 4-1 的值为 3,所以选择 B选项。16.设变量均已正确定义,若要通过 scanf(“%d%c%d%c“, 语句为变量 a1 和 a2 赋数值 10 和 20,为变量 c1 和 c2 赋字符 x 和 y。以下所示的输入形式中正确的是_。(注:代表空格字符)(分数:1.00)A.10X回车20Y回车B.10X20YC.10X回车20Y回车 D.10X20Y回车解析:解析 输入数据的格式必须与 scanf()的格式控制串完全匹配,如果 A、B、C 选项中在数字 10 后面均输入了空格,则会将空格赋给变量 c1,而不是把 X 赋给 c1,所以选择 C 选
34、项。17.以下选项中不能作为 C 语言合法常量的是_。(分数:1.00)A.0.1e+6B.“cd“ C.“/a“D.“/011“解析:解析 要想表示字符串常量应该用双引号表示,即“cd”,单引号用于表示字符常量,所以 B 选项中的表示方法错误。18.if 语句的基本形式是:if(表达式)语句,以下关于“表达式”值的叙述中正确的是_。(分数:1.00)A.必须是逻辑值B.必须是整数值C.必须是正数D.可以是任意合法的数值 解析:解析 if 语句中的表达式可以是任意合法的数值,如常量、变量表达式。所以 D 选项正确。19.有如下嵌套的 if 语句: if(ab) if(ac)k=a; else
35、k=c; else if(bc)k=b; else k=c; 以下选项中与上述 if 语句等价的语句是_。(分数:1.00)A.k=(ab)?(bc)?a:b):(bc)?b:c);B.k=(ab)?(ac)?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.有以下程序: #includestdio.h main() int k=5; while(-k)printf(“%d“,k-=3); printf(“/n“); 程序执行后的输出结果是_。(分数:1.00)A.1 B.2C.4D.死循环解析:解析 -k 先自减再使用,所以第一次判断条件即为 while(4),条件为真,执行打印 k 的值 k=4-3,结果为 1;第二次判断条件即为 while(0),条件为假,结束循环,打印回车换行符。所以选择 A 选项。21.有以下程序: #inctudestdio.h main() int i,j; for(i=3
37、;i=1;i-) for(j=1;j=2;j+)printf(“%d“,i+j); printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.4 32 54 3B.4 53 42 3 C.2 33 44 5D.2 33 42 3解析:解析 第一次执行外循环,i 的值为 3,第一次执行内循环 j 的值为 1,j=2 条件成立,打印i+j 的值,即 4;第二次执行内循环 j 的值为 2,j=2 条件成立,打印 i+j 的值,即 5;再判断条件不成立,打印回车换行符,跳出内循环。第二次执行外循环,i 的值为 2,内循环的执行同第一次一样,所以打印 3 和 4,打印回车换行,结束内循
38、环。第三次执行外循环 i 的值为 1,同理内循环中打印 2 和 3,打印回车换行符,结束内循环。22.有以下程序: #includestdio.h main() int k=5,n=0; do switch(k) case 1:case 3:n+=1;k-;break; default:n=0;k-; case 2:case 4:n+=2;k-;break; printf(“%d“,n); while(k0 程序运行后的输出结果是_。(分数:1.00)A.02356B.0235C.235 D.2356解析:解析 k 的值为 5,逐个对 case 语句进行匹配,均不匹配,执行 default 下
39、的语句 n=0;k-。再执行 case2:case4:后面的语句 n+=2;k-;。执行 break 语句跳出 switch 判断,打印 n 的值,即 2。经过第一次循环后,k 的值为 3,然后进行 k0k-;。再执行 break 语句跳出循环,此时打印 n 的值 3,此时 k 的值为 2。第三次执行循环体 k 的值为 2,满足条件,执行 case2:case4:后面的语句 n+=2;k-;。执行 break 语句跳出循环体,打印 n 的值 5。此时 n 不满足条件 k0 fun 函数的返回值是_。(分数:1.00)A.一个整数 B.不确定的值C.形参 p 中存放的值D.形参 p 的地址值解析
40、:解析 返回值为指针变量指向的数据,该数据已被定义为整型。因此 A 选项正确。25.以下程序段完全正确的是_。(分数:1.00)A.int*p;scanf(“%d“,B.int*p;scanf(“%d“,p);C.int k,*p=scanf(“%d“,p); D.int k,*p;*p=scanf(“%d“,p);解析:解析 A 选项中错在没有对指针进行初始化,是无效指针,并且在 scanf(“%d“,的左端*p 是指针所指内存空间的值, 以下能够代表数组元素 a3的是_。(分数:1.00)A.(*s)3B.*(s+3) C.*s3D.*s+3解析:解析 语句*s=a;表示指针变量 s 指向
41、一维数组 a 的首地址。a3表示引用数组 a 的第 4 个元素,*(s+i)表示引用指针 s 所指数组 a 的第 i+1 个元素,选项 A、C、D 的表示方法错误,只有 B 选项正确。27.有以下程序: #includestdio.h void f(int*q) int 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); 程序运行后的输出结果是_。(分数:1.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,解析:解析
42、 本题考查的是函数的地址调用,将数组名作为数组首地址进行传递,然后取首个数组元素值进行加 1 运算,循环 5 次。因此 A 选项正确。28.有以下程序: #includestdio.h 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, 11,12,13,14, 21,22,23,24, 31,32,33,34; printf(“%d/n“,fun(a,4,0); 程序运行后的输出结果是_。(分数:1.00)A.4B.34C.
43、31 D.32解析:解析 本题重点考察二维数组名作为实参进行参数传递,在主函数中调用了 fun 函数,实参为二维数组名 a 和两个整数 4、0,这样对应定义 fun 函数首部有三种形式,这里采用了第一种形式行指针,这样在 fun 函数对 sij进行操作实际上就是对主函数中的 aij进行操作,再分析 fun 函数的作用便可知,是求二维数组第 0 列中最大的那个元素。因此 C 选项正确。29.以下选项中正确的语句组是_。(分数:1.00)A.char*s;s=“BOOK!“;B.char*s;s=“BOOK!“; C.char s10;s=“BOOK!“;D.char s;s=“BOOK!“;解析
44、:解析 A 选项去掉大括号就正确了;C 选项和 D 选项应在定义时赋初值。因此 B 选项正确。30.若有定义语句: char*s1=“OK“,*s2=“ok“; 以下选项中,能够输出“OK”的语句是_。(分数:1.00)A.if(strcmp(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);解析:解析 strcmp(s1,s2)是字符串比较函数,比较规则是两个字符串自左向右逐个字符相比(按照ASCII 码值大小),以第一个
45、不相同的字符的大小作为比较结果。因为“O“o“,所以 strcmp(s1,s2)为负值,只有 B 选项正确。31.有以下程序: #includestdio.h void fun(char*p) +p; printf(“%s/n“,*p); main() char*a=“Morning“,“Afternoon“,“Evening“,“Night“; fun(a); 程序运行后的输出结果是_。(分数:1.00)A.Afternoon B.fternoonC.MorningD.orning解析:解析 本题主函数中定义了一个指针数组 a,可以将它看成一个以字符指针为元素的一维数组。和一般的一维数组名能赋给同类型指针变量一样,该字符指针数组也可以赋给指向字符指针的指针,所以数组名 a 可以用做函数 fun()的实参。在 fun()函数中,+p 操作使形参 p 往后移动一个字符指针的位置,即指针 a1的位置。故最后通过 printf()函数输出的字符串为“Afternoon”。因此 A 选项正确。32.有以下程序,程序中库函数 islower(ch)用以判断 ch 中的字母是否为小写字母: #includestdio.h #inc