1、二级 C 语言笔试-400 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:40.00)1.算法是指A) 计算机程序 B) 解决问题的计算方法C) 排序算法 D) 解决问题的有限运算序列(分数:1.00)A.B.C.D.2.下列叙述中正确的是A) 循环链表是非线性结构 B) 双向链表是非线性结构C) 只有一个根结点的数据结构不一定是线性结构D) 有一个以上根结点的数据结构不一定是非线性结构(分数:1.00)A.B.C.D.3.下列对于线性链表的描述中正确的是A) 存储空间不一定连续,且各元素的存储顺序是任意的B) 存储空间不一定连续,且前件元素一定存储在后
2、件元素的前面C) 存储空间必须连续,且前件元素一定存储在后件元素的前面D) 存储空间必须连续,且各元素的存储顺序是任意的(分数:1.00)A.B.C.D.4.面向对象方法中,不属于对象基本特点的是A) 标识唯一性 B) 分类性 C) 封装性 D) 一致性(分数:1.00)A.B.C.D.5.在软件生命周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段是A) 概要设计 B) 详细设计 C) 可行性分析 D) 需求分析(分数:1.00)A.B.C.D.6.数据流图中方框表示的是A) 数据流 B) 存储文件 C) 控制流 D) 源,潭(分数:1.00)A.B.C.D.7.下列对于软件测试
3、的描述中正确的是A) 软件测试的主要目的是发现程序中的错误B) 软件测试的目的是证明程序是否正确C) 软件测试的目的是使程序运行结果正确D) 软件测试是为了证明软件中没有错误(分数:1.00)A.B.C.D.8.数据库、数据库系统和数据库管理系统之间的关系是A) 数据库包括数据库系统和数据库管理系统B) 数据库系统包括数据库和数据库管理系统C) 数据库管理系统包括数据库和数据库系统D) 三者没有明显的包含关系(分数:1.00)A.B.C.D.9.设有图书(图书编号,书名,第一作者,出版社)、读者(借书证号,姓名,单位,职称)和借阅(借书证号,图书编号,借书日期,还书日期)三张表,则表借阅的关键
4、字(键或码)为A) 借书证号,图书编号 B) 图书编号,借书日期C) 借书日期,还书日期 D) 借书证号,借书日期(分数:1.00)A.B.C.D.10.有三个关系 R、S 和 T 如下:(分数:1.00)A.B.C.D.11.下列叙述中正确的是A) 每个 C 语言程序文件中都必须要有一个 main()函数B) 在 C 语言程序中 main()函数的位置是固定的C) C 语言程序中所有函数之间都可以相互调用,与函数所在位置无关D) 在 C 语言程序的函数中不能定义另一个函数(分数:1.00)A.B.C.D.12.以下合法的十六进制数是A) 0x B) 0x4de C) 0x1h D) oX77
5、(分数:1.00)A.B.C.D.13.已知大写字母 A 的 ASC码的值是 65,小写字母 a 的 ASC码的值是 97,以下不能将变量 c 中的大写字母转换为对应小写字母的语句是A) c=(c-A)%26+a B) c=c+32C) c=c-A+a D) c=(A+c)%26-a(分数:1.00)A.B.C.D.14.若变量已正确定义并赋值,以下符合 C 语言语法的表达式是A) a:=b+1 B) a=b=c+2 C) int 18.5%3 D) a=a+7=c+b(分数:1.00)A.B.C.D.15.设变量 a 是 int 型,f 是 float 型,i 是 double 型,则表达式
6、 10+a+i*f 值的数据类型为A) int B) float C) double D) 不确定(分数:1.00)A.B.C.D.16.有以下程序:#include stdio.hmain()char c1=1,c2 =2;c1=getchar();c2=getchar();putchar(c1); putchar(c2);当运行时输入:a回车后,以下叙述正确的是A) 变量 c1 被赋予字符 a,c2 被赋予回车符B) 程序将等待用户输入第 2 个字符C) 变量 c1 被赋予字符 a,c2 中仍是原有字符 2D) 变量 c1 被赋予字符 a,c2 中将无确定值(分数:1.00)A.B.C.D
7、.17.下列程序的输出结果是#include “stdio.h“main()int i,a=0,b=0;for(i=1;i10;i+)if(i%2=0)a+;continue;b+;printf(“a=%d,b=%d“,a,b);A) a=4,b=4 B) a=4,b=5C) a=5,b=4 D) a=5,b=5(分数:1.00)A.B.C.D.18.设变量 a、b、c、d 和 y 都已正确定义并赋值。若有以下 if 语句:if(ab)if(c=d) y=0;else y=1;该语句所表示的含义是(分数:1.00)A.B.C.D.19.若 a 是数值类型,则逻辑表达式(a=1)|(a!=1)的
8、值是A) 0 B) 1 C) 2 D) 不知道 a 的值,不能确定(分数:1.00)A.B.C.D.20.有以下程序:#include stdio.hmain()int s;scanf(“%d“,case 2:printf(“%d“,s+4);break;case 3:printf(“%d“,s+3);default:printf(“%d“,s+1);break;scanf(“%d“,int *p=b=p5;则 b 的值是A) 15 B) 16 C) 18 D) 19(分数:1.00)A.B.C.D.22.以下程序的输出结果是Fun(int x,int y)return(x+y);main()
9、int a=1,b=2,c=3,sum;sum=Fun(a+,b+,a+b),c+);printf(“%d“,sum);A) 9 B) 8 C) 7 D) 6(分数:1.00)A.B.C.D.23.有以下程序:#include stdio.hmain()int i=5;doif(i%3=1)if(i%5=2)printf(“*%d“,i);break;i+;while(i! =0);printf(“/n“);程序的运行结果是A) *7 B) *3*5 C) *5 D) *2*6(分数:1.00)A.B.C.D.24.以下函数按每行 8 个输出数组中的数据:void fun(int*w,int
10、n)int i;for(i=0;in;i+)printf(“%d“,wi);printf(“/n“);下划线处应填入的语句是A) if(i/8=0)printf(“/n“); B) if(i/8=0) continue;C) if(i%8=0)printf(“/n“); D) if(i%8=0)continue;(分数:1.00)A.B.C.D.25.以下数组定义中错误的是A) int x3=0;B) int x23=1,2,3,4,5,6;C) int x3=1,2,3,4,5,6;D) int x23=1,2,3,4,5,6;(分数:1.00)A.B.C.D.26.有以下程序:#inclu
11、de string.hmain()char p=a,b,c,q10=a,b,c;printf(“%d%d/n“,strlen(p),strlen(q);以下叙述中正确的是A) 在给 p 和 q 数组置初值时,系统会自动添加字符串结束符,故输出的长度都为 3B) 由于 p 数组中没有字符串结束符,长度不能确定;但 q 数组中字符长度为 3C) 由于 q 数组中没有字符串结束符,长度不能确定;但 p 数组中字符长度为 3D) 由于 p 和 q 数组中没有字符串结束符,故长度都不能确定(分数:1.00)A.B.C.D.27.若有以下程序:#include stdio.hint a=1,3,5,7;m
12、ain()int i;int *p=a;for(i=0;i4;i+)ai=*p;printf(“%d/n“,a2);上面程序的输出结果是A) 5 B) 7 C) 1 D) 3(分数:1.00)A.B.C.D.28.若有定义语句:int m=5,4,3,2,1,i=4;,则下面对 m 数组元素的引用中错误的是A) m-i B) m2*2 C) mm0 D) mmi(分数:1.00)A.B.C.D.29.设有以下说明语句:typedef structint n;char ch8;PER;则下面叙述中正确的是A) PER 是结构体变量名 B) PER 是结构体类型名C) typedef struct
13、 是结构体类型 D) struct 是结构体类型名(分数:1.00)A.B.C.D.30.有以下程序:int fun(int n)if(n=1) return 1;elsereturn(n+fun(n-1);main()int x;scanf(“%d“,x=fun(x);printf(“%d/n“,x)执行程序时,给变量 x 输入 10,程序的输出结果是A) 54 B) 55 C) 65 D) 45(分数:1.00)A.B.C.D.31.以下程序的输出结果是#include stdio.hsub(int*s,int y)static int t=3;y=st;t-;main()int a=1,
14、2,3,4,i,x=0;for(i=0;i4;i+)sub(a,x);printf(“%d“,x);printf(“/n“);A) 1234 B) 4321 C) 0000 D) 4444(分数:1.00)A.B.C.D.32.有以下程序:#include stdio.h#define F(x,y) (x)*(y)main()int a=3,b=4;printf(“%d/n“,F(a+,b+);程序运行后的输出结果是A) 12 B) 15 C) 16 D) 20(分数:1.00)A.B.C.D.33.以下程序运行时,若从键盘输入 10 20 30回车,输出的结果是main()int i=0,j
15、=0,k=0;scanf(“%d%*d%d“,A) 10200 B) 102030 C) 10300 D) 10030(分数:1.00)A.B.C.D.34.有以下程序:#include stdio.hmain()char *a=“abcd“,“ef“,“gh“,“ijk“; int i;for(i=0;i4;i+) printf(“%c“,*ai);程序运行后的输出结果是A) aegi B) dfhk C) abcd D) abcdefghijk(分数:1.00)A.B.C.D.35.以下程序执行后的输出结果是fun(int x,int y)static int m=0,1=2;i+=m+1
16、;m=i+x+y;return m;main()int j=1,m=1,k;k= fun(j,m);printf(“%d,“,k);k= fun(j,m);printf(“%d/n“,k);A) 5,5 B) 5,11 C) 11,11 D) 11,5(分数:1.00)A.B.C.D.36.阅读下面程序,则执行后的结果是#include “stdio.h“main()char str=“tomeetme“,*p;for(p=str;pstr+7;p+=2) putchar(*p);printf(“/n“);A) tomeetme B) tmem C) oete D) tome(分数:1.00)
17、A.B.C.D.37.有以下程序:main()char ch=“uvwxyz“,*pc;pc=ch; printf(“%c/n“,*(pc+5);程序运行后的输出结果是A) z B) 0C) 元素 ch5的地址 D) 字符 y 的地址(分数:1.00)A.B.C.D.38.设有定义:struct complexint real,unreal;data1=1,8,data2;则以下赋值语句中错误的是A) data2=data1; B) data2=(2,6);C) data2.real=data1.real; D) data2.real=data1.unreal;(分数:1.00)A.B.C.D
18、.39.有以下程序:#include stdio.hmain()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);close(f);程序运行后的输出结果是A) 12 B) 14 C) 1234 D) 123456(分数:1.00)A.B.C.D.40.变量 a 中的
19、数据用二进制表示的形式是 01011101,变量 b 中的数据用二进制表示的形式是 111100000若要求将 a 的高 4 位取反,低 4 位不变,所要执行的运算是A) ab B) a|b C) aprintf(“%c%c/n“,c1,c2);若程序运行时从键盘输入 48回车,则输出结果为_。(分数:4.00)填空项 1:_47.设变量已正确定义为整型,则表达式 n=i=2,+i,i+的值为 1。(分数:4.00)填空项 1:_48.以下程序运行后的输出结果是_。#include stdio.hmain()int x=10,y=20,t=0;if(x=y)t=x;x=y;y=t;printf
20、(“%d%d/n“,x,y);(分数:4.00)填空项 1:_49.以下程序的功能是:借助指针变量找出数组元素中最大值所在的位置并输出该最大值。请在输出语句中填写代表最大值的输出项。#include stdio.hmain()int a10,*p,*s;for(p=a;p-a10;p+)scanf(“%d“,p);for(p=a,s=a;p-a10;p+) if(*p*s)s=p;printf(“max=%d/n“,_);(分数:4.00)填空项 1:_50.以下程序运行后的输出结果是_。main()int a=3,b=2,c=1;if(c=a)printf(“%d/n“,c);elsepri
21、ntf(“%d/n“,b);(分数:4.00)填空项 1:_51.有以下程序:int f1(int x,int y) return xy?x:y;int f2(int x,int y) returnxy?y:x;main()int a=4,b=3,c=5,d=2,e,f,g;e=f2(f1(a,b),f1(c,d);f=f1(f2(a,b),f2(c,d);g=a+b+c+d-e-f;printf(“%d,%d,%d/n“,e,f,g);程序运行后的输出结果是_。(分数:4.00)填空项 1:_52.以下程序运行后的输出结果是_。#include string.hmain()char ch=“
22、abc“,x34;int i;for(i=0;13;i+)strcpy(xi,ch);for(i=0;i3;i+) printf(“%s“,printf(“/n“);(分数:4.00)填空项 1:_53.以下程序的功能是:通过函数 func 输入字符并统计输入字符的个数,输入时用字符作为输入结束标志。请填空。#include stdio.hlong _;/*函数说明语句*/main()long a;a=func();printf(“n=%ld/n“,a);long func()long b;for(b=0;getchar()! =;b+;);retum b;(分数:4.00)填空项 1:_54
23、.下列程序的输出结果是_。main()int i;for(i=1;i+1;i+)if(i4)printf(“%d/n“,i);break;printf(“%d/n“,i+);(分数:4.00)填空项 1:_55.fseek 函数的正确调用形式是 1。(分数:4.00)填空项 1:_二级 C 语言笔试-400 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:40.00)1.算法是指A) 计算机程序 B) 解决问题的计算方法C) 排序算法 D) 解决问题的有限运算序列(分数:1.00)A.B.C.D. 解析:解析 算法是指对解决方案准确而完整的描述。2.下列叙述
24、中正确的是A) 循环链表是非线性结构 B) 双向链表是非线性结构C) 只有一个根结点的数据结构不一定是线性结构D) 有一个以上根结点的数据结构不一定是非线性结构(分数:1.00)A.B.C. D.解析:解析 线性结构指的是数据元素之间存在着“一对一”线性关系的数据结构,这样的结构中只有一个根结点,如循环链表和双向链表;非线性结构指的是数据元素之间存在着“一对多”非线性关系的数据结构,这样的结构中可能有一个根结点,如树形结构,也可能有多个根结点,如网状结构。3.下列对于线性链表的描述中正确的是A) 存储空间不一定连续,且各元素的存储顺序是任意的B) 存储空间不一定连续,且前件元素一定存储在后件元
25、素的前面C) 存储空间必须连续,且前件元素一定存储在后件元素的前面D) 存储空间必须连续,且各元素的存储顺序是任意的(分数:1.00)A. B.C.D.解析:解析 线性链表是链式存储结构。在链式存储结构中,存储数据结构的存储空间可以不连续,各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致。4.面向对象方法中,不属于对象基本特点的是A) 标识唯一性 B) 分类性 C) 封装性 D) 一致性(分数:1.00)A.B.C.D. 解析:解析 对象的基本特点有:标识唯一性、分类性、多态性、封装性和模块独立性。5.在软件生命周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段是A) 概要设
26、计 B) 详细设计 C) 可行性分析 D) 需求分析(分数:1.00)A.B.C.D. 解析:解析 通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。软件生命周期的主要活动阶段如下。可行性研究与计划制定:确定待开发软件系统的开发目标和总的要求,给出它的功能、性能、可靠性以及接口等方面的可能方案,制订完成开发任务的实施计划。需求分析:对待开发软件提出的需求进行分析并给出详细定义。编写软件规格说明书及初步的用户手册,提交评审。软件设计:系统设计人员和程序设计人员应该在反复理解软件需求的基础上给出软件的结构、模块的划分、功能的分配以及处理流程。软件实现:把软件设计转换成计算
27、机可以接受的程序代码。即完成源程序的编码,编写用户手册、操作手册等面向用户的文档,编写单元测试计划。软件测试:在设计测试用例的基础上,检验软件的各个组成部分,编写测试分析报告。运行和维护:将已交付的软件投入运行,并在运行使用中不断地维护,根据新提出的需求进行必要而且可能的扩充和删改。6.数据流图中方框表示的是A) 数据流 B) 存储文件 C) 控制流 D) 源,潭(分数:1.00)A.B.C.D. 解析:解析 数据流图是描述数据处理过程的工具,它从数据传递和加工的角度,来刻画数据流从输入到输出的变化过程。数据流图中的主要图形元素有:圆形表示加工,箭头表示数据流,双杠表示存储文件,方框表示源、潭
28、。7.下列对于软件测试的描述中正确的是A) 软件测试的主要目的是发现程序中的错误B) 软件测试的目的是证明程序是否正确C) 软件测试的目的是使程序运行结果正确D) 软件测试是为了证明软件中没有错误(分数:1.00)A. B.C.D.解析:解析 软件测试的目标是发现软件中的错误。8.数据库、数据库系统和数据库管理系统之间的关系是A) 数据库包括数据库系统和数据库管理系统B) 数据库系统包括数据库和数据库管理系统C) 数据库管理系统包括数据库和数据库系统D) 三者没有明显的包含关系(分数:1.00)A.B. C.D.解析:解析 数据库系统有数据库、数据库管理系统、数据库管理员、硬件平台、软件平台
29、5 部分构成。9.设有图书(图书编号,书名,第一作者,出版社)、读者(借书证号,姓名,单位,职称)和借阅(借书证号,图书编号,借书日期,还书日期)三张表,则表借阅的关键字(键或码)为A) 借书证号,图书编号 B) 图书编号,借书日期C) 借书日期,还书日期 D) 借书证号,借书日期(分数:1.00)A. B.C.D.解析:解析 在二维表中凡能唯一标识元组的最小属性集称为关键字,关键字具有标识元组、建立元组间联系等重要作用。此题中,借书证号,图书编号是表借阅的主键,借书证号、图书编号分别是外键,借书证号是读者表的主关键字,图书编号是图书表的主关键字。10.有三个关系 R、S 和 T 如下:(分数
30、:1.00)A.B.C.D. 解析:解析 在关系运算中,交的定义如下:设 R1 和 R2 为参加运算的两个关系,它们具有相同的度n,且相对应的属性值取自同一个域,则为交运算,结果仍为度等于 n 的关系,其中,交运算的结果既属于 R1,又属于 R2。11.下列叙述中正确的是A) 每个 C 语言程序文件中都必须要有一个 main()函数B) 在 C 语言程序中 main()函数的位置是固定的C) C 语言程序中所有函数之间都可以相互调用,与函数所在位置无关D) 在 C 语言程序的函数中不能定义另一个函数(分数:1.00)A. B.C.D.解析:解析 mam 函数是 C 语言程序的主函数,可以出现在
31、程序中的任何位置。函数是 C 语言程序的基本模块,函数内部可以再定义其他函数。但函数间可相互调用,被调用的既可以是 C 语言提供的库函数,也可以是用户自定义的函数。12.以下合法的十六进制数是A) 0x B) 0x4de C) 0x1h D) oX77(分数:1.00)A.B. C.D.解析:解析 考查十六进制数的表示方法。十六进制数以 0x 开头,后面跟着若干位 09 和 af 的数,所以正确答案为 B)。13.已知大写字母 A 的 ASC码的值是 65,小写字母 a 的 ASC码的值是 97,以下不能将变量 c 中的大写字母转换为对应小写字母的语句是A) c=(c-A)%26+a B) c
32、=c+32C) c=c-A+a D) c=(A+c)%26-a(分数:1.00)A.B.C.D. 解析:解析 无论大小写,字母间的间隔都相等,所以C-A=c-a,因此c=C-A+a,选项A)、C)正确。从题述可知,a-A=97-65=32,所以c=C+32,选项 B)正确。14.若变量已正确定义并赋值,以下符合 C 语言语法的表达式是A) a:=b+1 B) a=b=c+2 C) int 18.5%3 D) a=a+7=c+b(分数:1.00)A.B. C.D.解析:解析 选项 A)中包含一个不合法的运算符“:=”;选项 C)应改为(int)18.5%3;选项 D)可理解为两个表达式:a+7=
33、c+b 和 a=a+7,其中第一个是错的,因为 C 语言规定赋值号的左边只能是单个变量,不能是表达式或常量等。因此,正确答案是选项 B),它实际上相当于 a=(b=c+2),进而可分解为两个表达式:b=c+2 和 a=b。15.设变量 a 是 int 型,f 是 float 型,i 是 double 型,则表达式 10+a+i*f 值的数据类型为A) int B) float C) double D) 不确定(分数:1.00)A.B.C. D.解析:解析 根据混合运算规则,如果有一个数据是 float 型或 double 型,则其他数据类型先转化为double 型,运算的结果最终也是 doub
34、le 型。16.有以下程序:#include stdio.hmain()char c1=1,c2 =2;c1=getchar();c2=getchar();putchar(c1); putchar(c2);当运行时输入:a回车后,以下叙述正确的是A) 变量 c1 被赋予字符 a,c2 被赋予回车符B) 程序将等待用户输入第 2 个字符C) 变量 c1 被赋予字符 a,c2 中仍是原有字符 2D) 变量 c1 被赋予字符 a,c2 中将无确定值(分数:1.00)A. B.C.D.解析:解析 本题考查的是输入输出函数。函数 getchar()的作用是从终端(或系统隐含指定的输入设备)输入一个字符,
35、且只能接受一个字符(回车符也算是一个字符)。故本题中变量 c1 被赋予字符 a,c2 被赋予回车符。17.下列程序的输出结果是#include “stdio.h“main()int i,a=0,b=0;for(i=1;i10;i+)if(i%2=0)a+;continue;b+;printf(“a=%d,b=%d“,a,b);A) a=4,b=4 B) a=4,b=5C) a=5,b=4 D) a=5,b=5(分数:1.00)A.B. C.D.解析:解析 continue 语句的作用是跳过本次循环体中余下尚未执行的语句,接着再一次进行循环条件的判定。当能被 2 整除时,a 就会增加 1,之后执
36、行 continue 语句,直接执行到 for 循环体的结尾,进行i+,判断循环条件。18.设变量 a、b、c、d 和 y 都已正确定义并赋值。若有以下 if 语句:if(ab)if(c=d) y=0;else y=1;该语句所表示的含义是(分数:1.00)A.B.C. D.解析:解析 本题考查 if 语句的使用。整个语句都是以 ab 为假设的,在 a19.若 a 是数值类型,则逻辑表达式(a=1)|(a!=1)的值是A) 0 B) 1 C) 2 D) 不知道 a 的值,不能确定(分数:1.00)A.B. C.D.解析:解析 当 a=1 时,(a=1)|(a!=1)为真;当 a!=1 时,(a
37、=1)|(a!=1)也为真,故正确答案为 B)。20.有以下程序:#include stdio.hmain()int s;scanf(“%d“,case 2:printf(“%d“,s+4);break;case 3:printf(“%d“,s+3);default:printf(“%d“,s+1);break;scanf(“%d“,int *p=b=p5;则 b 的值是A) 15 B) 16 C) 18 D) 19(分数:1.00)A.B.C.D. 解析:解析 p=sum=Fun(a+,b+,a+b),c+);printf(“%d“,sum);A) 9 B) 8 C) 7 D) 6(分数:1
38、.00)A.B. C.D.解析:解析 逗号表达式 a+,b+,a+b 先计算 a+,a=2;再计算 b+,b=3;表达式的值就是 a+b 的值,为 5。表达式 c+的值是 c 递增前的值,为 3。所以 fun(a+,b+,a+b),c+)等价于 fun(5,3),返回值为 5+3=8。23.有以下程序:#include stdio.hmain()int i=5;doif(i%3=1)if(i%5=2)printf(“*%d“,i);break;i+;while(i! =0);printf(“/n“);程序的运行结果是A) *7 B) *3*5 C) *5 D) *2*6(分数:1.00)A.
39、B.C.D.解析:解析 整个程序中只有对 i 增加的语句而没有对 i 减少的语句,所以 2、3 都不可能出现,选项 B)和D)错误。而 i=5 时第一个 if 语句的表达式为假,所以选项 C)也错误。24.以下函数按每行 8 个输出数组中的数据:void fun(int*w,int n)int i;for(i=0;in;i+)printf(“%d“,wi);printf(“/n“);下划线处应填入的语句是A) if(i/8=0)printf(“/n“); B) if(i/8=0) continue;C) if(i%8=0)printf(“/n“); D) if(i%8=0)continue;(
40、分数:1.00)A.B.C. D.解析:解析 在 C 语言循环语句中,continue 用来跳出当次循环,因此 B)项和 D)项不正确。if(i/8=0)是指当 i 除以 8 的得数等于 O,即 i 的值小于 8 时,打印换行,因此 A)项也不正确。if(i%8=0)是指当 i 除以 8 的余数等于 0,即当间隔 8 个数时,打印换行,因此选项 C)正确。25.以下数组定义中错误的是A) int x3=0;B) int x23=1,2,3,4,5,6;C) int x3=1,2,3,4,5,6;D) int x23=1,2,3,4,5,6;(分数:1.00)A.B. C.D.解析:解析 二维数
41、组的初始化有以下几种形式:分行进行初始化;不分行进行初始化;部分数组元素进行初始化;省略第一维的定义,不省略第二维的定义。选项 B)等号右边分了 3 行,大于等号左边数组的行数 2。26.有以下程序:#include string.hmain()char p=a,b,c,q10=a,b,c;printf(“%d%d/n“,strlen(p),strlen(q);以下叙述中正确的是A) 在给 p 和 q 数组置初值时,系统会自动添加字符串结束符,故输出的长度都为 3B) 由于 p 数组中没有字符串结束符,长度不能确定;但 q 数组中字符长度为 3C) 由于 q 数组中没有字符串结束符,长度不能确
42、定;但 p 数组中字符长度为 3D) 由于 p 和 q 数组中没有字符串结束符,故长度都不能确定(分数:1.00)A.B. C.D.解析:解析 本题考查的是库函数的调用。strlen()是计算以“/0“结束的字符串的长度函数,函数的值为字符串的实际长度,不包括“/0“。题中“q10=a,b,c”虽然给出了数组大小,即数组实际分配的存储空间,但此字符串只占用前 3 个存储单元,其余存储单元系统自动加上“/0“,故数组 q 的长度为3;由于 p 数组中没有字符串结束符,故字符串的长度不能确定。27.若有以下程序:#include stdio.hint a=1,3,5,7;main()int i;i
43、nt *p=a;for(i=0;i4;i+)ai=*p;printf(“%d/n“,a2);上面程序的输出结果是A) 5 B) 7 C) 1 D) 3(分数:1.00)A.B.C. D.解析:解析 在 C 语言中,数组元素下标是从 0 开始的;指针变量 p 指向数组的首地址。for 循环语句中,指针变量 p 始终指向数组的首地址,因而执行循环赋值语句后数组各元素的值均变为 1。28.若有定义语句:int m=5,4,3,2,1,i=4;,则下面对 m 数组元素的引用中错误的是A) m-i B) m2*2 C) mm0 D) mmi(分数:1.00)A.B.C. D.解析:解析 数组 m 下标从
44、 04 计算,共 5 个元素,选项 C)中 m0=5,则 mm0为 m5中,超出了数组 m 的下标范围。因此正确答案为 C)。29.设有以下说明语句:typedef structint n;char ch8;PER;则下面叙述中正确的是A) PER 是结构体变量名 B) PER 是结构体类型名C) typedef struct 是结构体类型 D) struct 是结构体类型名(分数:1.00)A.B. C.D.解析:解析 本题中,typedef 声明新的类型名 PER 来代替已有的类型名,PER 代表上面指定的一个结构体类型,此时,也可以用 PER 来定义变量。30.有以下程序:int fun
45、(int n)if(n=1) return 1;elsereturn(n+fun(n-1);main()int x;scanf(“%d“,x=fun(x);printf(“%d/n“,x)执行程序时,给变量 x 输入 10,程序的输出结果是A) 54 B) 55 C) 65 D) 45(分数:1.00)A.B. C.D.解析:解析 本题考查的是函数的递归调用,在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用,执行结果为 1+2+3+4+5+6+7+8+9+10=55。31.以下程序的输出结果是#include stdio.hsub(int*s,int y)static
46、 int t=3;y=st;t-;main()int a=1,2,3,4,i,x=0;for(i=0;i4;i+)sub(a,x);printf(“%d“,x);printf(“/n“);A) 1234 B) 4321 C) 0000 D) 4444(分数:1.00)A.B.C. D.解析:解析 本题的考查点是函数的形参和实参的关系。x 作为函数 sub()的实参时,函数对 x 值的改变没有返回主函数,并没能使得 x 的值变化,所以在打印时,x 的值始终是 0。32.有以下程序:#include stdio.h#define F(x,y) (x)*(y)main()int a=3,b=4;pr
47、intf(“%d/n“,F(a+,b+);程序运行后的输出结果是A) 12 B) 15 C) 16 D) 20(分数:1.00)A. B.C.D.解析:解析 本题的考查点是带参数的宏定义。本题的程序中就定义了一个带参数的宏,对 F(a+,b+)进行展开后,宏的返回值为 12,注意 a+,b+都是先使用变量值,再自增。33.以下程序运行时,若从键盘输入 10 20 30回车,输出的结果是main()int i=0,j=0,k=0;scanf(“%d%*d%d“,A) 10200 B) 102030 C) 10300 D) 10030(分数:1.00)A.B.C. D.解析:解析 根据 scanf()函数附加的格式说明字符,可知%后的“*”是附加说明符,用来表示跳过它相应的数据,所以本题中忽略第 2 个数据的输入,则 1=10,j=30,k 的值不变,还是 0,所以输出结果是10300。34.有以下程序:#include stdio.hmain()char *a=“abcd“,“ef“,“gh“,“ijk“; int i;f