1、国家二级( C语言)笔试模拟试卷 4及答案与解析 1 下列叙述中正确的是 ( )。 ( A)数据的逻辑结构与存储结构必定一一对应 ( B)由于计算机存储空间是向量式的存储结构,因此,数据的存储结构一定是线性结构 ( C)程序设计语言小的数组般是顺序存储结构,因此,利用数组只能处理线性结构 ( D)以上 3种说法都不对 2 下列数据结构中,能用二分法进行查找的是 ( )。 ( A)顺序存储的有序线性表 ( B)线性链表 ( C)二叉链表 ( D)有序线性链表 3 对于长度为 n的线性表,在最坏情 况下,下列各排序法所对应的比较次数中正确的是 ( )。 ( A)冒泡排序为 n/2 ( B)冒泡排序
2、为 n ( C)快速排序为 n ( D)快速排序为 n(n-1)/2 4 程序设计方法要求在程序设计过程中, ( )。 ( A)先编制出程序,经调试使程序运行结果正确后再画出程序的流程图 ( B)先编制出程序,经调试使程序运行结果正确后再在程序中的适当位置处加注释 ( C)先画出流程图,再根据流程图编制出程序,最后经调试使程序运行结果正确后再在程序中的适当位置处加注释 ( D)以上 3种说法都不对 5 下列描述中正确的是 ( )。 ( A)软件工程只是解决软件项目的管理问题 ( B)软件工程主要解决软件产品的生产率问题 ( C)软件工程的主要思想是强调在软件开发过程中需要应用工程化原则 ( D
3、)软件工程只是解决软件开发中的技术问题 6 在面向对象方法中,实现信息隐蔽是依靠 ( )。 ( A)对象的继承 ( B)对象的多态 ( C)对象的封装 ( D)对象的分类 7 冒泡排序在最坏情况下的比较次数是 ( )。 ( A) n(n+1)/2 ( B) nlog2n ( C) n(n-1)/2 ( D) n/2 8 下列实体的联系中,属于多对多联系的是 ( )。 ( A)学生与课程 ( B)学校与校长 ( C)住院的病人与病床 ( D)职工与工资 9 在面向对象的程序设计中,下列叙述中错误的是 ( )。 ( A)对象是面向对象软件的基本模块 ( B)对象不是独立存在的实体,各个对象之间有关
4、联,彼此依赖 ( C)下一层次的对象可以继承上 层次对象的某些属性 ( D)同样的消息被不同对象接受时,可导致完全不同的行动 10 下列关于 E-R图的描述中正确的是 ( )。 ( A) E-R图只能表 示实体之间的联系 ( B) E-R图只能表示实体和实体之间的联系 ( C) E-R图只能表示实体和属性 ( D) E-R图能表示实体、属性和实体之间的联系 11 以下不合法的用户标识符是 ( )。 ( A) j2_KEY ( B) Double ( C) 4d ( D) _8_ 12 以下叙述中正确的是 ( )。 ( A) C语言的源程序不必通过编译就可以直接运行 ( B) C语言中的每条叫执
5、行语句最终都将被转换成二进制的机器指令 ( C) C源程序经编译形成的二进制代码可以直接运行 ( D) C语言中的函数不可以单独进 行编译 13 按照 C语言规定的用户标识符命名规则,不能出现在标识符中的是 ( )。 ( A)大写字母 ( B)连接符 ( C)数字字符 ( D)下划线 14 以下 4组用户定义标识符中,全部合法的一组是 ( )。 ( A) _main enclude sin ( B) If -max turbo ( C) txt REAL 3COM ( D) int K_2 _001 15 若在定义语句: int a, b, c, *p= c;之后,接着执行以下选项中的语 句,
6、则能正确执行的语句是 ( )。 ( A) scanf(“%d”a, b, c); ( B) scanf(“%d%d%d”,a, b, c); ( C) scanf(“%d”,P); ( D) scanf(“%d”, p); 16 设 a和 b均为 double 型变量,且 a=5.5、 b=2.5,则表达式 (int) a +b/b的值是( )。 ( A) 6.500000 ( B) 6 ( C) 5.500000 ( D) 6.000000 17 若变景均已正确定义井赋值,以下合法的 C语言赋值语句是 ( ) ( A) x=y =5; ( B) x=n%2.5; ( C) x+ n=i; (
7、 D) x=5=4+1; 18 有以下程序: main () int x=102, y=012; printf(“%2d,%2dn”,x,y); 执行后输出结果是 ( )。 ( A) 10,01 ( B) 02,12 ( C) 102,10 ( D) 02,10 19 若有定义: float x=1.5; int a=1, b=3, c=2;则正确的 switch 语句是 ( )。 ( A) switch(x) case 1.0: printf(“*n“); case 2.0: printf(“*n“); ( B) switch(int)x); case 1: printf(“*n“); ca
8、se 2: printf(“*n“); ( C) switch(a +b) case 1: printf(“*n“); case 2+1: printf(“*n“); ( D) switch(a+ b) case 1: printf(“*n“); case c: printf(“*n“); 20 有定义语句: “int a=1, b=2, c=3, x; ”,则以下选项中各程序段执行后, x的值不为 3的是 ( )。 ( A) if(c a)x=1; else if (b a) x=2; else x=3; ( B) if(a 3)x=3; else if (a 2) x=2; else x=
9、1; ( C) if(a 3) x=3; if (a 2) x=2; if (a 1) x=1; ( D) if(a b)x=b; if (b c) x=c; if (c a) x=a; 21 下列叙述中正确的是 ( )。 ( A) break语句只能用于 switch语句 ( B)在 switch语句中必须使用 default ( C) break语句必须与 switch语句中的 case配对使用 ( D)在 switch语句中,不一定使用 break语句 22 若整型变量 a、 b、 c、 d中的值依次为: 1、 4、 3、 2。则条件表达式 a b?a:cd?c:d的值是 ( )。 (
10、A) 1 ( B) 2 ( C) 3 ( D) 4 23 设有定义: int a=2,b=3,c=4;,则以下选项中值为 0的表达式是 ( )。 ( A) (!a=1) k=a b ? b:a; k=k c ? c:k; 执行该程序段后, k的值是 ( )。 ( A) 3 ( B) 2 ( C) 1 ( D) 0 25 以下 程序中, while循环的循环次数是 ( )。 main() int i=0; while(i 10) if(i 1) continue; if(i=5) break; i+; ( A) 1 ( B) 10 ( C) 6 ( D)死循环,不能确定次数 26 以下程序的输出
11、结果是 ( )。 main() int a=0,i; for(i=1;i 5;i+) switch(i) casc 0: case 3:a+=2; case 1: case 2:a+=3; default:a+=5; printf(“%dn“,a); ( A) 31 ( B) 13 ( C) 10 ( D) 20 27 已有定义: char a=“xyz“,b=x,y,z;,以下叙述中正 确的是 ( )。 ( A)数组 a和 b的长度相同 ( B) a数组长度小于 b数组长度 ( C) a数组长度大于 b数组长度 ( D)以述说法都不对 28 有以下程序; void f(int *x,int
12、*y) int t; t=*x; *x=*y; *y=t; main() int a8=1,2,3,4,5,6,7,8,i,*p,*q; p=a; q= while (p q) f(p,q);p+; q-; for(i=0;i 8; i+) printf(“%d,“,ai); 程序运行后的输出结果是 ( )。 ( A) 8,2,3,4,5,6,7,1, ( B) 5,6,7,8,1,2,3,4, ( C) 1,2,3,4,5,6,7,8, ( D) 8,7,6,5,4,3,2,1, 29 若有一些定义和语句: #include stdio.h int a=4,b=3,*p,*q,*w; p=
13、q= w=q; q=NULL; 则以下选项中错误的语句是 ( )。 ( A) *q=0; ( B) w=p; ( C) *p=a; ( D) *p=*w; 30 有以下程序 : main() int y=10; while(y-); printf(“y=%dn“,y); 程序执行后的输出结果是 ( )。 ( A) y=0 ( B) y=-1 ( C) y=1 ( D) while构成无限循环 31 有以 下程序: main() int a10=1,2,3,4,5,6,7,8,9,10),*p= printf(“%dn“,*p+*q); 程序运行后的输出结果是 ( )。 ( A) 16 ( B)
14、 10 ( C) 8 ( D) 6 32 若有以下函数首部: int fun(double x10,int *n) 则下面针对此函数的函数声明语句中正确的是 ( )。 ( A) int fun(double x, int *n); ( B) int fun(double, int); ( C) int fun(double *x, int n); ( D) int fun(double*, int*); 33 以下程序调用 fmdmax函数返回数组中的量大值: findmax(int *a,int n) int *p,*s; for(p=a,s=a;p-a n;p+) if(_)s=p; re
15、turn(*s); main() int x5=12,21,13,6,18; printf(“%dn“,findmax(x,5); 在下划线处应填入的是 ( )。 ( A) p s ( B) *p *s ( C) ap as ( D) p-a p-s 34 有以下程序: main() char a1=M,a2=m; printf(“%cn“,(a1,a2); 以下叙述中正确的是 ( )。 ( A)程序输出大写字母 M ( B)程 序输出小写字母 m ( C)格式说明符不足,编译出错 ( D)程序运行时产生出错信息 35 有以下程序: #include stdio.h int fun(char
16、s) int n=0; while(*s=9s+; return(n); main() char s10=6,1,*,4,*,9,*,0,*; printf(“%dn“,fun(s); 程序的运行结果是( )。 ( A) 9 ( B) 61490 ( C) 61 ( D) 5 36 有以下程序: main() int c=35; printf(“%dn“,c 程序运行后的输出结果是 ( )。 ( A) 0 ( B) 70 ( C) 35 ( D) 1 37 有以下程序; main() char s=“aaiou“,*ps; ps=s; printf(“%cn“,*ps+4); 程序运行后的输出
17、结果是 ( )。 ( A) a ( B) e ( C) u ( D)元素 s4的地址 38 有以下程序: void sort(int a, int n) int i,j,t; for(i=0;i n-1;i+) for(j=i+1;j n;j+) if(ai aj) t=ai; ai=aj; aj=t; main() int aa10=1,2,3,4,5,6,7,8,9,10,i; sort(aa+2,5); for(i=0;i 10;i+)printf(“%d,“,aai); printf(“n“); 程序运行后的输出结果是( )。 ( A) 1,2,3,4,5,6,7,8,9,10, (
18、B) 1,2,7,6,3,4,5,8,9,10, ( C) 1,2,7,6,5,4,3,8,9,10, ( D) 1,2,9,8,7,6,5,4,3,10, 39 有以下程序: void sum(int a) a0=a-1+a1; main() int a10=1,2,3,4,5,6,7,8,9,10; sum( printf(“%dn“,a2); 程序运行后的输出结果是 ( )。 ( A) 6 ( B) 7 ( C) 5 ( D) 8 40 设有定义语句: char c1=92,c2=92;,则以下表达式中值为零的是 ( )。 ( A) c1c2 ( B) c1 while(*ps) ps+
19、; for(ps-;ps-str =0;ps-) puts(ps); 执行后输出结果是 ( )。 ( A) yz xyZ ( B) z yz ( C) z yz ( D) x xy xyz xyz 42 下面程序的功能是输出以下形式的金字塔图案: * * * * main() int i,j; for(i=1;i =4;i+) for(j=1;j =4-i;j+)printf(“ “); for(j=1;j =( );j+)printf(“*“); printf(“n“); 在下划线处应填入的是 ( )。 ( A) i ( B) 2*1-1 ( C) 2*i+1 ( D) i+2 43 有以下
20、程序段: main() int a=5,*b,*c; c= b= 程序在执行了 “c= b=”语句后,表达式 “*c”的值是 ( )。 ( A)变量 a的地 址 ( B)变量 b中的值 ( C)变量 a中的值 ( D)变量 b的地址 44 有以下程序: #include string.h main() char str20=“Hello“,“beijing“,*p=str; ptintf(“%n“,strlen(p+20); 程序运行后的输出结果是 ( )。 ( A) 0 ( B) 5 ( C) 7 ( D) 20 45 有以下程序: point(char *p) p+=3; main() c
21、har b4=a,b,c,d, *p=b; point(p); printf(“%cn“,*p); 程序运行后的输出结果是 ( )。 ( A) a ( B) b ( C) c ( D) d 46 以下叙述中错误的是 ( )。 ( A) C程序必须由一个或一个以上的函数组成 ( B)函数调用可以作为一个独立的语句存在 ( C)若函数有返回值,必须通过咖语句返回 ( D)函数形参的值也可以传回 给对应的实参 47 程序中已构成如下图所示的不带头结点的单向链表结构,指针变量 s、 p、 q均已正确定义,并用于指向链表结点,指针变量 s总是作为头指针指向链表的第一个结点。 若有以下程序段: q=s;
22、s=s- next; p=s; while (p- next) p=p- next; p- next=q; q- next=NULL; 该程序段实现的功能是 ( )。 ( A)首结点成为尾结点 ( B)尾结点成为首结点 ( C)删除首结点 ( D)删除尾结点 48 有以下程序: #include stdio.h main() int a=1,b=2,c=3,x; x=(ab) printf(“%dn“,x); 程序的运行结果是 ( )。 ( A) 0 ( B) 1 ( C) 2 ( D) 3 49 有以下程序: #include stdio.h main() FILE *fp; int i,k
23、=0, n=0; fp=fopen(“d1.dat“,“w“); for(i=1;i 4;i+) fprintf(fp,“%d“,i); fclose(fp); fp=fopen(“d1.dat“,“r“); fscanf(fp,“%d%d“, printf(“%d%dn“,k,n); fclose(fp); 执行后输出结果是 ( )。 ( A) 1 2 ( B) 123 0 ( C) 1 23 ( D) 0 0 50 有以下程序: #include stdio.h main() FILE *fp; int i,k,n; fp=fopen(“data.dar“,“w+“); for(i=1;i
24、 6;i+) fprintf(fp,“%d “,i); if(i%3=0) fprintf(fp,“n“); rewind(fp); fscanf(fp,“%d%d“, printf(“%d%dn“,k,n); fclose(fp); 程序运行后的输出结 果是 ( )。 ( A) 0 0 ( B) 123 45 ( C) 1 4 ( D) 1 2 51 在运算过程中,能够使空表与非空表的运算统一的结构是【 】。 52 软件工程研究的内容主要包括:【 】技术和软件工程管理。 53 与结构化需求分析方法相对应的是【 】方法。 54 关系模型的完整性规则是对关系的某种约束条件,包括实体完整性、【 】
25、和自定义完整性。 55 数据模型按不同的应用层次分为三种类型,它们是【 】数据模型、逻辑数据模型和物理数据模型。 56 若 x和 y都是 double型变量,且 x的初值为 3.0,y的初值为 2.0,则表达式pow(y,fabs(x)的值为【 】。 57 没有 char a,b;,,若要通过 a return(x*y-m); main() int a=7,b,5; prntf(“%dn“,fun(a,B) /m); 59 下列程序执行后输出的结果是【 】。 main() int arr10,i,k=0); fot(i=0;i 10;i+)arti=i; for(i=1:i 4;i+) k+=
26、arri+i; printf(“%dn“,k); 60 下面程序有两个 printf语句,如果第一个 printf语句输出的是 194,则第二个printf语句的输 出结果是【 】。 main() int a10=1,2,3,4,5,6,7,8,9,0,*p; p=a; printf(“%xn“,p); printf(“%xn,p+9); 61 函数 delete(s,i,n)的作用是从字符串 s中删除从第 i个字符开始的 n个字符,请填空。 void delete(char s,int i, int n) int j,k,legth=0; while(slength) 【 】 ; -i; j
27、=i; if(【 】 ) k=i+n; if(i+n length) while(k length) sj+=sk+; sj=0 62 下述函数统计一个字符串中的单词个数,单词是指处在空格之间的字符序列,请填空。 int word(char*s) int num=0,flag=0; while(*s) if(【 】 =) flag=0; else if(【 】 )flag=1;num+ return 【 】 国家二级( C语言)笔试模拟试卷 4答案与解析 1 【正确答案】 D 【试题解析】 一种数据的逻辑结构根据需要可以表示成多种存储结构,数据的逻辑结构与存储结构不一定一一对应,选项 A错误。
28、计算机的存储空间是向量式的存储结构,但一种数据的逻辑结构根据需要可以表示成多种存储结构,如线性链表是线性表的链式存储结构,数据的存储结构不一定是线性结构,因此选项 B错误。数组一 般是顺序存储结构,但利用利用数组也能处理非线性结构。选项 C错误。由此可知,只有选项 D的说法正确。 2 【正确答案】 A 【试题解析】 二分查找只适用于顺序存储的有序表。 3 【正确答案】 D 【试题解析】 假设线性表的长度为 n,在最坏情况下,冒泡排序和快速排序需要的比较次数为 n(n-1)/2。 4 【正确答案】 D 【试题解析】 程序设计的过程应是先画出流程图,然后根据流程图编制出程序,所以选项 A错误。程序
29、中的注释是为了提高程序的可读性,注释必须在编制程序的同时加入,所以,选项 B和选项 C错误。综上所述,本题的正确答案为选项D。 5 【正确答案】 C 【试题解析】 软件工程学是研究软件开发和维护的普遍原理与技术的一门工程学科,选项 A说法错误。软件工程是指采用工程的概念、原理、技术和方法指导软件的开发与维护,软件工程学的主要研究对象包括软件开发与维护的技术、方法、工具和管理等方面,选项 B和选项 D的说法均过于片面,选项 C正确。 6 【正确答案】 C 【试题解析】 通常认为,面向对象方法具有封装性、继承性,多态性几大特点。所谓封装就是将相关的信息、操作与处理融合在一个 内含的部件中 (对象中
30、 )。简单地说,封装就是隐藏信息。 7 【正确答案】 C 【试题解析】 冒泡排序的基本思想是:将相邻的两个元素进行比较,如果反序,则交换;对于一个待排序的序 列,经一趟排序后,最大值的元素移动到最后的位置,其它值较大的元素也向最终位置移动,此过程称为一趟冒泡。对于有 n个数据的序列,共需 n-1趟排序,第 i趟对从 1到 n-i个数据进行比较、交换。冒泡排序的最坏情况是待排序序列逆序,第 1趟比较 n-1次,第 2趟比较 n-2次,依此类推,最后一趟比较 1次,一共进行 n-1趟排序。因此,冒泡排序在最坏情况下的比较次数是 (n-1)+(n-2)+1 ,结果为 n(n-1)/2。 8 【正确答
31、案】 A 【试题解析】 只有选项 A符合多对多联系的条件,因为一个学生可以选修多门课程 ,而一门课程又可以由多个学生来选修,所以学生与课程之间的联系是多对多联系。 9 【正确答案】 B 【试题解析】 在面向对象的程序设计中,一个对象是一个可以独立存在的实体。各个对象之间相对独立,相互依赖性小。所以,选项 B错误,应为本题的正确答案。 10 【正确答案】 D 【试题解析】 E-R图中,用图框表示实体、属性和实体之间的联系。用 E-R图不仅可以简单明了地描述实体及其相互之间的联系,还可以方便地描述多个实体集之间的联系和一个实体集内部实体之间的联系。选项 A、选项 B和选项 C的说法都错误 ,正确答
32、案是选项 D。 11 【正确答案】 C 【试题解析】 用户标识符是由字母,数字和下划线组成,并且第一个字符必须为字母或下划线,并且不能与 C语言关键字相同。选项 C的第一个字符为数字 4不符合定义,故应该选择 C。 12 【正确答案】 B 【试题解析】 C语言采用编译方式将源程序转换为二进制的目标代码,编写好一个 C程序到完成运行一般经过以下几个步骤:编辑;编译,就是将已经编辑好的源程序翻译成二进制的目标代码,经编译后的得到的二进制代码还不能直接执行,因为每一个模块往往是单独编译的,必须把经 过编译的各个模块的目标代码与系统提供的标准模块连接后才能运行;连接,将各模块的二进制目标代码与系统标准
33、模块经连接处理后,得到具有绝对地址的可执行文件,它是计算机能直接执行的文件;执行,执行一个经过编译和连接的可执行的目标文件。由以上定义可知,选项 A、 C、 D均不正确。所以, 4个选项中选项 B符合题意。 13 【正确答案】 B 【试题解析】 C语言的标识符要符合以下规定: 标识符是个以字母或下划线开头的,由字母、数字、下划线组成的字符串: 标识符不能与任意一个关键字同名: 标识符 中的字母区分大小写。 故本题应该选择 B。 14 【正确答案】 A 【试题解析】 选项 B中 -max不是字母、数字或下划线组成的字符序列,故选项B不正确;选项 C中 3COM不是由字母或下划线开头,故选项 C不
34、正确:选项 D中 int为 C语言中的关键字,故选项 D不正确:选项 A中全部为合法的标识符,所以, 4个选项中选项 A符合题意。 15 【正确答案】 C 【试题解析】 scantf()函数要求,除了第 1个参数为格式化字符串以外,其余参数均为相应变量的地址值。本题中,只有 p是地址值,故应该选择 C。 16 【正确答案】 D 【试题解析】 在这个表达式中,优先级最高的是 (int)a,也就是对 5.5取整,结果是 5,其次是 b/b,即 2.5/2.5,结果是 1.000000,最后相加结果为 6.000000(表达式的最终结果为实型 ),所以 4个选项中 D正确。 17 【正确答案】 A
35、【试题解析】 “%”运算符的作用是求模,意思是做除法求余,这就要求两个运算分量均为整数。选项 B中, 2.5不是整数,故非法;选项 C中,表达式 x+n计算后得到的是一临时值,临时值不能做左值,故非法;选项 D中,由于 “=”运 算符的结合性是 “从右到左 ”,故先计算 5=4+1,5是常量不能做左值,故选项 D也非法。选项 A, y=5是一个逻辑表达式,其值为真或假,可以用做右值,所以是合法的。故本题应该选择 A。 18 【正确答案】 C 【试题解析】 本题中, printf(“%2d,%2dn“,x, y)表示输出形式是十进制整数,域宽是 2,而在 C语言中规定:当域宽小于实际宽度时域宽不
36、起作用,按实际宽度输出因此最后的输出值为 102和 10,所以, 4个选项中选项 C符合题意。 19 【正确答案】 C 【试题解析】 switch 后的括号中只能是整型或字符型表达式,选项 A中使用的是浮点型变量 x,故不正确。选项 B在 switch的括号后面多了一个分号,故也不正确。 switch的 case标号后只能是常量或常量表达式,而不能是变量,所以选项D也不正确。故应该选择 C。 20 【正确答案】 C 【试题解析】 选项 A首先判断 if语句条件中表达式的值 “3 1”为假,然后执行最近的 else后面的语句,该 else后面又为 if-else语句,在这个 if-else语句中
37、首先判断该 if语句条件中表达式的值 “2 1”为假,程序执行其最近的 else后面 的语句,将 3赋值给 x。 选项 B中首先判断 if语句条件中表达式的值 “1 3”为真,然后执行最近的 else后面的语句 “x=3”,后面的 else不再执行,最后 x的值为 3。 选项 C中,首先选执行第一条 if语句,由于 “1 3”为真,执行此 if后面的语句“x=3”,接着执行第二条 if语句,由于 “1 2”为真,执行此 if后面的语句 “x=2”,接着执行第三条 if语句,由于 “1 1”为假,后面的语句不执行,所以最后的 x值为 2不为 3。 选项 D中,首先选执行第一条 if语句,由于 “
38、a b”为真,执行此 if后面的语 句“x=b”;接着执行第二条 if语句,由于 “b c”,为真,执行此 if后面的语句“x=c”,接着执行第三条 if语句,由于 “c a”为假,后面的语句不执行,所以最后的 x值为 c即为 3。所以, 4个选项中选项 C符合题意。 21 【正确答案】 D 【试题解析】 break语句除了能用于 switch语句外,还可以用于循环语句中,因此选项 A不正确。在 switch语句中,可以使用 default来执行所有 case均失配时的分支,也可以不使用 default,此时若所有 case均失配则跳出 switch,因此选项B不正确 。在 switch语句中
39、,每个 case的作用就是标出一个执行的起点,当符合某个 case时,程序就从该 case所标出的起点处开始执行,若没有 break语句中断执行的话,程序会一直执行到 switch的最后一条语句,而不是碰到下一个 case就跳出 switch。虽然 break与 case的配对使用会让所有 case分支互不重叠条理明确,但不配对使用在 C语言中也是允许的。因此选项 C不正确,应该选择 D。 22 【正确答案】 A 【试题解析】 因为条件运算符的结合方向为 “自右至左 ”,所以表达式 a b?a:cd?c:d相当于 a b?a:(c d?c:d)。由于 a=1, b=4,所以 a b的结果为 “
40、真 ”,所以整个表达式的值为 a的值 1。所以, 4个选项中选项 A符合题意。 23 【正确答案】 A 【试题解析】 选项 A中 (!a=1)”语句。因 continue的作用是结束本次循环,即跳过本次循环体中余下尚未执行的语句,接着再一次进行循环的条件判断,所以 i的值未发生变化,循环条件仍然为真, if语句也仍然成立,因此循环将无止境地进行下去。所以, 4个选项中, D为所选。 26 【正确答案】 A 【试题解析】 在本题中,因为每个 case语句后面都没有 break语句,所以,第一轮循环 (i 1)执行过后 a的值为 8,第 2轮 (i=2)执行过后 a的值为 16,第 3轮(i=3)
41、执行过后 a的值为 26,第 4轮 (i=4)执行过后 a的 值为 31,然后执行 “i+”语句,这时循环条件为假,循环结束。所以, 4个选项中 A正确。 27 【正确答案】 C 【试题解析】 对字符型一维数组在定义时初始化,既可以使用初始化列表,也可以使用字符串常量。不过由于字符串常量会自动在结尾添加 0,字符做结束标志,所以用字符串常量的初始化列表项个数是字符串的长度加 1。因此题目中的char a=“xyz“;等价于 char a=x,y,z,0);,所以 a数组长度大于 b数组长度,应该选 C。 28 【正确答案】 D 【试 题解析】 本题程序开头定义了一个函数 f(),在函数中用一个
42、临时变量 t交换了两个指针参数所指的地址内容,所以该函数的作用就是交换两个参数所指的内容。在主函数中,首先定义了一个 int型数组 a,并定义了两个血型指针 p、 q分别指向数组 a的第一个元素和最后一个元素。然后使用一个 while循环调用函数 f()不断交换两个指针所指的内容,每次交换后 p往后移动一个元素, q往前移动个元素,直到 q不再大于 p,即直到两个指针在数组 a的中间相遇为止。所以,程序最终运行的结果是数组 a中的所有元素全被反序排列一次。故应该选择选项 D。 29 【正确答案】 A 【试题解析】 本题中定义了 3个指向整型的指针变量 p、 q、 w,并让 p指向 a,让 q指
43、向 b,通过将 q的值赋给 w,使 w也指向 b,最后将 NULL赋值给 q。由整形变量指针的定义可知,可以给整型指针指向的变量赋一个常数值 (表达式 ),故选项 C和选项 D是正确的;可以给指针变量赋一个同种类型的指针变量 (或地址值 ),故选项 B也是正确的:选项 A错误,因为 q不指向任何变量,给一个空指针指向的单元赋值是错误的。所以,应该选 A。 30 【正确答案】 B 【试题解析】 本题中有一个陷阱,很多考生 会根据程序的书写格式来判断:while循环的循环体为 printf(“y=%dn“,y);语句。其实 while的循环体是一条空语句,即 y-后面的那个分号就是 while的循
44、环体。所以本题只要弄清楚表达式 y-何时为 “假 ”,即等于 0,就能得出结果了。因为 -运算符是后缀形式,所以表达式y-的值是 y自减之前的值,即 y等于。时,表达式 y-就等于 0了。但此时的 y还要被减 1,所以循环结束后, y的值为 -1。故应该选择 B。 31 【正确答案】 B 【试题解析】 题目中首先定义了一个 int型数组 a并初始化了 ,然后定义了两个指针变量 p和 q,并分别初始化 p为指向数组元素 a3、 q指向 p后面的第 2个元素即指向 a5。所以最终输出的值为 a3+a5的值 10。应该选 B。 32 【正确答案】 D 【试题解析】 本题中的 fun函数有两个参数,一
45、个类型是 double型一维数组,另 个是 int型指针。而在 C语言中,一维数组用作函数参数和该数组元素的指针类型是等价的。所以本题的正确答案是选项 D。 33 【正确答案】 B 【试题解析】 在 main()函数中定义了一个具有 5个元素的 x数组并赋初值,然后调 用 findmax()函数求数组中元素的最大值。调用时把数组元素 x的首地址,传给了形参指针变量 a,把 5传给形参 n。在函数 findmax()中定义了两种指针变量 p和 s,其中。用来记录最大元素的地址, p作为循环控制变量,表示每个元素的地址。求最大值的算法是先将第一个元素 (用 s记下它的地址 )做为最大值,然后用最大
46、值 (*s)与后面的每个元素比较 (*p),若后面的元素大,则用 s记下它的地址,所以下划线应填 “*s *p”或 “*p *s”。所以, 4个选项中 B为所选。 34 【正确答案】 B 【试题解析】 因为整个 逗号表达式的值为逗号表达式最后一个子表达式的值,所以本题输出的是 a2的值 m。故应该选择 B。 35 【正确答案】 C 【试题解析】 题目 fun()函数中 while循环的意思是:判断 s所指内容是否为数字字符,如果是数字字符,则计算表达式 n=10*n+*s-0;。其中 *s-0的作用是将相应的数字字符转换为数值,例如字符 8减去字符 0后,得到的结果就是数值 8了。n=10*n+的作用是将累计变量 n中原来内容乘以 10,然后再加上刚转换的数字字符的数值,例如原来 n的值为 1, *s现在的内容为 2,那么执行了 n=10*n+*s-0;语句后, n的值变为 12,如果接下来再来一个 8字符,执行 n=10*n+*s-O;语