1、二级 C语言笔试-467 及答案解析(总分:100.50,做题时间:90 分钟)一、选择题(总题数:40,分数:68.00)1.下列选项中,不符合良好程序设计风格的是A) 源程序要文档化 B) 数据说明的次序要规范化C) 避免滥用 goto语句 D) 模块没计要保证高耦合、高内聚(分数:2.00)A.B.C.D.2.下列数据结构中,属于非线性结构的是A) 循环队列 B) 带链队列C) 二叉树 D) 带链栈(分数:2.00)A.B.C.D.3.下列叙述中正确的是_。A) 一个逻辑数据结构只能有一种存储结构B) 数据的逻辑结构属于线性结构,存储结构属于非线性结构C) 一个逻辑数据结构可以有多种存储
2、结构,且各种存储结构不影响数据处理的效率D) 一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率(分数:2.00)A.B.C.D.4.下列叙述中正确的是( )。A顺序存储结构的存储空间一定是连续的,链式存储结构的存储空间不一定是连续的B顺序存储结构只针对线性结构,链式存储结构只针对非线性结构C顺序存储结构能存储有序表,链式存储结构不能存储有序表D链式存储结构比顺序存储结构节省存储空间(分数:1.00)A.B.C.D.5.栈底至栈顶依次存放元素 A、B、C、D,在第五个元素 E入栈前,栈中元素可以出栈,则出栈序列可能是A) ABCED B) DCBEA C) DBCEA D)
3、CDABE(分数:2.00)A.B.C.D.6.冒泡排序在最坏情况下的比较次数是( )。An(n+1)/2 Bnlog 2nCn(n-1)/2 Dn/2(分数:1.00)A.B.C.D.7.数据的完整性是指数据的正确性、有效性和 _。A) 可维护性 B) 独立性 C) 安全性 D) 相容性(分数:2.00)A.B.C.D.8.设 R是一个二元关系,S 是一个三元关系,则下列运算中正确的是( )。A) R-S B) RS C) RS D) RS(分数:2.00)A.B.C.D.9.有以下程序:main()int i=1, j=2, k=3;if(i+=1程序运行后的输出结果是_。A) 1 2 3
4、 B) 2 3 4 C) 2 2 3 D) 2 3 3(分数:2.00)A.B.C.D.10.以下程序的输出结果是( )。main()int a=3;printf(“%d/n“,(a+a-=a*a);A-6 B12 C0 D-12(分数:1.00)A.B.C.D.11.设有定义:int x=2;,以下表达式中,值不为 6的是_。A) x*=x+1 B) x+,2*x C) x*=(1+x) D) 2*x,x+=2(分数:2.00)A.B.C.D.12.若有“double a;”,则正确的输入语句是( )。A) scanf(“%lf“,A) ; B) scanf(“%f“, C) scanf(“
5、%lf“,(分数:2.00)A.B.C.D.13.下列程序的输出结果是( )。main()int a,b,d=25;a=d/10%9;b=aA) 6,1 B) 2,1 C) 6,0 D) 2,0(分数:2.00)A.B.C.D.14.若执行下列的程序时,从键盘上输入 1和 2,则输出结果是( )。#includestdio.hmain()int a,b,s;scanf(“%d%d“,if(i+= =1A) 1 2 3 B) 2 3 4C) 2 2 3 D) 2 3 3(分数:2.00)A.B.C.D.17.下列程序的输出结果是( )。int f1(int x,int y)return xy?x
6、:y;int f2(int x,int y)return xy?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);A) 4,3,7 B) 3,4,7 C) 5,2,7 D) 2,5,7(分数:2.00)A.B.C.D.18.若 i、j 已定义成 int型,则以下程序段中内循环体的总执行次数是( )。 for(i=6;i0;i-) for(j=0;j4j+) A) 20 B) 24 C) 25 D) 3
7、0(分数:2.00)A.B.C.D.19.在执行完下列的 C语句段之后,则 B的值是( )。char a=A;int b;B=(34A) 0 B) 1 C) TRUE D) FALSE(分数:2.00)A.B.C.D.20.有下列函数定义:fun(float h)printf(“%f,%f/n”,h,h*h);该函数的类型是( )。A) int类型 B) float 类型C) void类型 D) 函数无类型说明,定义有错(分数:2.00)A.B.C.D.21.若有说明 int a3=0,0;,则不正确的叙述是( )。A) 数组 a的每个元素的初值都是 0B) 数组 a的第一维大小为 1C) 数
8、组 a的行数为 1D) 只有元素 a00和 a01可得到初值 0,其余元素均得不到初值 0(分数:2.00)A.B.C.D.22.有以下程序#inlucdemain()int n,*p=NULL;*p=n;printf(“Input n:“); scanf(“%d“,p); printf(“output n:“); printf(“%d/n“,p);该程序试图通过指针 p为变量 n读入数据并输出,但程序有多处错误,以下语句正确的是_。(A) int n,*p=NULL;(B) *p=n;(C) scanf(“%d“,p)(D) printf(“%d/n“,p);(分数:2.00)A.B.C.D
9、.23.有以下程序:void change(int k)k0=k5;main()int x10=1,2,3,4,5,6,7,8,9,10),n=0;while(n=4)change(xn);n+;for(n=0;n5;n+)printf(“%d“,xn);printf(“/n“);程序运行后的输出结果是_。A) 6 7 8 9 10 B) 1 3 5 7 9C) 1 2 3 4 5 D) 6 2 3 4 5(分数:2.00)A.B.C.D.24.以下程序的输出结果是 _。#includestdio.hvoid prt(int*x,int*y,int*z)printf(“%d,%d,%d/n“,
10、+*x,+*y,*(z+);int a=10,b=40,c=20;main()prt(,以下叙述中正确的是_。A) 定义 line是一个数组,每个数组元素是一个基类型为 char的指针变量B) 定义 line是一个指针变量,该变量可以指向一个长度为 5的字符型数组C) 定义 line是一个指针数组,语句中的*号称为间址运算符D) 定义 line是一个指向字符型函数的指针(分数:2.00)A.B.C.D.27.若 fp是指向某文件的指针,且通过该文件指针读数据已读到文件末尾,则函数 feof(fp)的返回值是( )。A) EOF B) -1 C) 1 D) NULL(分数:1.00)A.B.C.
11、D.28.下列选项中,值为 1的表达式是( )。A) 1-0 B) 1-/0 C) 1-0 D) /0,0(分数:1.00)A.B.C.D.29.下列二维数组的说明中,不正确的是( )。A) floata40,1,8,5,9; B) inta34;C) #define N 5 D) inta29.5;float aN3;(分数:2.00)A.B.C.D.30.以下能正确定义字符串的语句是_。(A) char str=/064;(B) char str=“kx43“;(C) char str=“;(D) char str=“/0“;(分数:2.00)A.B.C.D.31.下列程序的运行结果是(
12、)。#includestdio.h#includestring.hmain()char*s1=“abDuj“;char*s2=“ABdUG“;int t;t=strcmp(s1,s2);printf(“%d“,t);A) 正数 B) 负数 C) 零 D) 不确定的值(分数:2.00)A.B.C.D.32.以下程序(strcat 函数用以连接两个字符串)运行后的输出结果是 #includestdio.h #includestring.h main() char a20=“ABCD/OEFG/0“, b=“IJK“; strcat(a, b); printf(“%s/n:, A); A) ABCD
13、/0FG/0IJK B) ABCDIJK C) IJK D) EFGIJK(分数:2.00)A.B.C.D.33.有以下程序#includestdio.hint fun()static int x=1;x*=2;return x;main()( int i, s=1;for(i=1; i=3; i+)s*=fun();printf(“%d/n“, s);程序运行后的输出结果是_。A) 0 B) 10 C) 30 D) 64(分数:1.00)A.B.C.D.34.以下程序运行后的输出结果是#includestdio.hint b=2;int fun(int *k)b=*k+b; return(b
14、);main()int a10=1, 2, 3, 4, 5, 6, 7, 8, i;for(i=2; i4; i+)b=fun( printf(“%d“, b);printf(“/n“);A) 10 12 B) 8 10 C) 10 28 D) 10 16(分数:2.00)A.B.C.D.35.有以下程序#include stdio.h#define N 4void 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
15、(“%d,“,yi);printf(“/n“);程序的运行结果是_。A) 1,2,3,4, B) 1,0,7,0, C) 1,4,5,9, D) 3,4,8,10,(分数:2.00)A.B.C.D.36.有以下程序#includestdio.h#includestring.htypedef structchar name9;char sex;float score2;)STU;void f(STU a)STU b=“Zhao“,m,85.0,90.0);int i;strcpy(a.name,b.name);a.sex=b.sex:for(i=0;i2;i+)ascorei=b.scorei;
16、main()STU c=“Qian“,f,95.0,92.0;f(c):printf(“%s,%c,%2.0f,%2.0f/n“,c.name,c.sex,c.score0,c.score1);程序的运行结果是( )。AQian,f,95,92 BQian,m,85,90CZhao,f,95,92 DZhao,m,85,90(分数:1.00)A.B.C.D.37.下列程序的运行结果为( )。#define MAX(x,y)(x)(y)?(x):(y)main()int a=2,b=3,c=1,d=3,t;printf(“%d/n“,(MAX(a+b,c+d)*100);A) 500 B) 5
17、C) 4 D) 400(分数:1.00)A.B.C.D.38.调用 gets和 puts函数时,必须包含的头文件是( )。A) stdio.h B) stdlib.h C) define D) 以上都不对(分数:1.00)A.B.C.D.39.若 fp是指向某文件的指针,且尚未读到文件末尾,则函数 feof(fp)的返回值是( )。A) EOF B) -1 C) 非零值 D) 0(分数:2.00)A.B.C.D.40.读取二进制文件的函数调用形式为:fread(buffer, size, count, pf);,其中 buffer代表的是_。A) 一个文件指针,指向待读取的文件B) 一个整型变
18、量,代表待读取的数据的字节数C) 一个内存块的首地址,代表读入数据存放的地址D) 一个内存块的字节数(分数:2.00)A.B.C.D.二、填空题(总题数:15,分数:32.50)41.对于长度为 n的顺序存储的线性表,当随机插入和删除个元素时,需平均移动元素的个数为U /U。(分数:2.00)填空项 1:_42.数据结构分为逻辑结构和存储结构,循环队列属于 1 结构。(分数:2.00)填空项 1:_43.在面向对象方法中,对象之间进行通信的构造称为 1。(分数:2.00)填空项 1:_44.测试用例包括输入值集和 1 值集。(分数:2.00)填空项 1:_45.在两种基本测试方法中, 1 测试
19、的原则之。一是保证所测模块中每一个独立路径至少要执行一次。(分数:2.00)填空项 1:_46.数据的逻辑结构在计算机存储空间中的存放形式称为数据的U /U。(分数:2.00)填空项 1:_47.数据库设计分为以下六个设计阶段:需求分析阶段、U /U、逻辑设计阶段、物理设计阶段、实施阶段、运行和维护阶段。(分数:2.00)填空项 1:_48.以下程序的功能是从键盘输入若干学生的成绩,并输出最高成绩和最低成绩,当输入负数时结束。请填空。#include stdiohmain()float x,amax,amin;scanf(“%f“,while(!x);(分数:2.00)填空项 1:_50.以下
20、程序的运行结果是_。#includestdio.hlong fib(int g)switch(g)case 0:return 0;case 1:case 2:return 1;return(fib(g-1)+fib(g-2);main()long k;k=fib(5);printf(“k=%51d/n“,k);(分数:2.00)填空项 1:_51.以下程序运行后的输出结果是U /U。main()int a, b, c;a=25;b=025;c=0x25;printf(“% d % d % d/n“, a, b, c);(分数:2.00)填空项 1:_52.以下程序的输出结果是_。 #inclu
21、de main() int a5=2,4,6,8,10, *p; p=a; p+; printf(“%d“,*p); (分数:2.00)填空项 1:_53.以下程序的输出结果是_。#includestdio.h#includestring.hchar*fun(char*t)char*p=t;return(p+strlen(t)/2);main()char*str=“abcdefgh“;str=fun(str);puts(str);(分数:2.50)填空项 1:_54.以下程序的功能是:将值为三位正整数的变量 X中的数值按照个位、十位、百位的顺序拆分并输出。请填空#includestdio.hm
22、ain()int x=256;printf(“%d-%d-%d/n“,_,x/10%10,x/100);(分数:4.00)填空项 1:_55.在使用报表向导创建报表时,如果数据源包括父表和子表,应该选取 1 报表向导。(分数:2.00)填空项 1:_二级 C语言笔试-467 答案解析(总分:100.50,做题时间:90 分钟)一、选择题(总题数:40,分数:68.00)1.下列选项中,不符合良好程序设计风格的是A) 源程序要文档化 B) 数据说明的次序要规范化C) 避免滥用 goto语句 D) 模块没计要保证高耦合、高内聚(分数:2.00)A.B.C.D. 解析:解析 编程风格是在不影响性能的
23、前提下,有效地编排和组织程序,以提高可读性和可维护性。更直接地说,风格意味着要按照规则进行编程。这些规则包括:程序文档化。就是程序文档包含恰当的标识符、适当的注解和程序的视觉组织等。数据说明。出于阅读理解和维护的需要,最好使模块前的说明语句次序规范化。此外,为方便查找,在每个说明语句的说明符后,数据名应按照字典顺序排列。功能模块化。即把源程序代码按照功能划分为低耦合、高内聚的模块。注意 goto语句的使用。合理使用goto语句可以提高代码的运行效率,但 goto语句的使用会破坏程序的结构特性。因此,除非确实需要,否则最好不使用 goto语句。2.下列数据结构中,属于非线性结构的是A) 循环队列
24、 B) 带链队列C) 二叉树 D) 带链栈(分数:2.00)A.B.C. D.解析:解析 根据数据结构中各数据元素之间前后关系的复杂程度,一般将数据结构分为两大类型:线性结构与非线性结构。线性结构表示数据元素之间为一对一的关系,非线性结构表示数据元素之间为一对多或者多对一的关系。根据各种结构的定义知二叉树是一种非线性结构。3.下列叙述中正确的是_。A) 一个逻辑数据结构只能有一种存储结构B) 数据的逻辑结构属于线性结构,存储结构属于非线性结构C) 一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率D) 一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率(分
25、数:2.00)A.B.C.D. 解析:解析 数据的逻辑结构反映数据元素之间的逻辑关系,数据的存储结构(也称数据的物理结构)是数据的逻辑结构在计算机存储空间中的存放形式。同一种逻辑结构的数据可以采用不同的存储结构,但影响数据处理效率。4.下列叙述中正确的是( )。A顺序存储结构的存储空间一定是连续的,链式存储结构的存储空间不一定是连续的B顺序存储结构只针对线性结构,链式存储结构只针对非线性结构C顺序存储结构能存储有序表,链式存储结构不能存储有序表D链式存储结构比顺序存储结构节省存储空间(分数:1.00)A. B.C.D.解析:解析 顺序存储是把逻辑上相邻的数据元素存储在物理上相邻的存储单元中,主
26、要用于线性的数据结构,而链式存储结构空间不一定是连续的。无需担心容量问题。5.栈底至栈顶依次存放元素 A、B、C、D,在第五个元素 E入栈前,栈中元素可以出栈,则出栈序列可能是A) ABCED B) DCBEA C) DBCEA D) CDABE(分数:2.00)A.B. C.D.解析:解析 栈操作原则上“后进先出”,栈底至栈顶依次存放元素 A、B、C、D,则表明这 4个元素中D是最后进栈,B、C 处于中间,A 最早进栈,所以出栈时一定是先出 D,再出 C,最后出 A。6.冒泡排序在最坏情况下的比较次数是( )。An(n+1)/2 Bnlog 2nCn(n-1)/2 Dn/2(分数:1.00)
27、A.B.C. D.解析:解析 对 n个结点的线性表采用冒泡排序,在最坏情况下,需要经过 n/2次的从前往后的扫描和n/2次的从后往前的扫描,需要的比较次数为 n(n-1)/2。7.数据的完整性是指数据的正确性、有效性和 _。A) 可维护性 B) 独立性 C) 安全性 D) 相容性(分数:2.00)A.B.C.D. 解析:评析 数据模型的完整性规则是给定的数据模型中数据及其联系所具有的制约和依存规则,用以限定符合数据模型的数据库状态及其状态的变化,以保证数据的正确性、有效性和相容性。8.设 R是一个二元关系,S 是一个三元关系,则下列运算中正确的是( )。A) R-S B) RS C) RS D
28、) RS(分数:2.00)A.B. C.D.解析:解析 关系的交()、并()和差(-)运算要求两个关系是同元的,显然作为二元的 R和三元 S只能做笛卡尔积运算。9.有以下程序:main()int i=1, j=2, k=3;if(i+=1程序运行后的输出结果是_。A) 1 2 3 B) 2 3 4 C) 2 2 3 D) 2 3 3(分数:2.00)A.B.C.D. 解析:解析 对于 if语句,根据优先级顺序,先判断(+j=-3|k+=3),此时,+j=-3 成立,就不用计算“|”后面的表达式,此时 k=3,由于 i+=1成立,自加后 i=2,if 语句的条件为真,故输出的结果为:2, 3,
29、3。10.以下程序的输出结果是( )。main()int a=3;printf(“%d/n“,(a+a-=a*a);A-6 B12 C0 D-12(分数:1.00)A.B.C.D. 解析:解析 本题可以写成:表达式 a+a-=a*a中*的优先级最高,其次是-=,+的优先级最低,因此先求a*a,所以原表达式可写成 a+a-=9,再算 a-=9,原表达式可写为 a=a-9=-6,最后算 a+a,因为此时 a=-6,所以 a+a=-6+(-6)=-12,故选择 D选项。11.设有定义:int x=2;,以下表达式中,值不为 6的是_。A) x*=x+1 B) x+,2*x C) x*=(1+x) D
30、) 2*x,x+=2(分数:2.00)A.B.C.D. 解析:评析 选项 D中,2*x 表达式的结果为 4,x+=2 的结果为 4,由于 2*x时 x的值没有改变,所以最终结果不等于 6,因此选项 D是错误的。12.若有“double a;”,则正确的输入语句是( )。A) scanf(“%lf“,A) ; B) scanf(“%f“, C) scanf(“%lf“,(分数:2.00)A.B.C.D. 解析:解析 函数 scanf()的调用形式是:scanf(格式字符串,输入项地址表)。其中,“格式字符串”是要输入的变量的格式符;“输入项地址表”是要输入的变量的地址。本题中定义变量 a为双精度
31、型变量,双精度变量的格式符为“le”;变量的地址用取地址符“A) 6,1 B) 2,1 C) 6,0 D) 2,0(分数:2.00)A.B. C.D.解析:解析 算术运行符“/”“%”的优先级处于同一级,并且两者的结合性都是从左到右。所以算术表达式运算过程为:a=25/10%9=2%9=2:当逻辑运算符“if(i+= =1A) 1 2 3 B) 2 3 4C) 2 2 3 D) 2 3 3(分数:2.00)A.B.C.D. 解析:解析 本题考查自增运算符“+”、逻辑与运算符“int f2(int x,int y)return xy?y:x;main( )int a=4,b=3,c=5,d=2,
32、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);A) 4,3,7 B) 3,4,7 C) 5,2,7 D) 2,5,7(分数:2.00)A. B.C.D.解析:解析 根据函数 int f1(int,int y)return xy?x:y和 int f2(int x,int y)return x,y?y:x;的定义可知,如果 xy 成立,则函数 n返回 x的值,函数 f2返回 y的值。所以 f1(a,b)=4,f1(c,d)=5,f2(a,b)=3,f3(c,d
33、)=2故 e=f2(4,5)=4,f=f1(3,2)3,g=4+3+5+2-4-3=7。18.若 i、j 已定义成 int型,则以下程序段中内循环体的总执行次数是( )。 for(i=6;i0;i-) for(j=0;j4j+) A) 20 B) 24 C) 25 D) 30(分数:2.00)A.B. C.D.解析:解析 本题考查的是嵌套 for循环执行次数。对于外层 i的循环中任何一个 i,内层 j的循环中的 j都要从 0变化到 3,j=4 时退出循环;然后外层 i循环的 i减少 1,内层循环的 i仍要从 0变化到3,j=4 时退出循环直到外层 i循环的 i变为 0,退出 i循环。所以执行多
34、重循环时,对外层循环变量的每一个值,内层循环的循环变量都要从初始值变化到终值。对外层循环的每一次循环,内层循环要执行完整的循环语句。外层 for语句执行 6次,内层 for语句执行 4次,所以内循环体执行 6*4=24次。19.在执行完下列的 C语句段之后,则 B的值是( )。char a=A;int b;B=(34A) 0 B) 1 C) TRUE D) FALSE(分数:2.00)A.B. C.D.解析:解析 本题考查 C语言 3个知识点:将一个字符赋给一个字符变量时,并不是将该字符本身存储到内存中,而是将该字符对应的 ASCII码存储到内存单元中:大写字母的 ASCII码值小于其对应小写
35、字母的 ASCII码值:只要逻辑与运算符该函数的类型是( )。A) int类型 B) float 类型C) void类型 D) 函数无类型说明,定义有错(分数:2.00)A. B.C.D.解析:解析 本题考查默认函数的函数值的类型。在函数定义时,由于函数没有说明其类型,系统默认一律自动按整型处理,因此,函数的类型为 int类型。21.若有说明 int a3=0,0;,则不正确的叙述是( )。A) 数组 a的每个元素的初值都是 0B) 数组 a的第一维大小为 1C) 数组 a的行数为 1D) 只有元素 a00和 a01可得到初值 0,其余元素均得不到初值 0(分数:2.00)A.B.C.D. 解
36、析:解析 本题考查给二维数组元素赋值。给二维数组元素赋值时应注意两点:在对二维数组元奉赋初值时,可以只对部分元素赋初值,未赋初值的元素自动取 0。二维数组第一维的大小由如下规则确定:当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小;当初值的个数不能被第二维的常量表达式的值除尽时,第一维的大小二所得商数+1。22.有以下程序#inlucdemain()int n,*p=NULL;*p=n;printf(“Input n:“); scanf(“%d“,p); printf(“output n:“); printf(“%d/n“,p);该程序试图通过指针 p为变量 n读入数据并
37、输出,但程序有多处错误,以下语句正确的是_。(A) int n,*p=NULL;(B) *p=n;(C) scanf(“%d“,p)(D) printf(“%d/n“,p);(分数:2.00)A. B.C.D.解析:23.有以下程序:void change(int k)k0=k5;main()int x10=1,2,3,4,5,6,7,8,9,10),n=0;while(n=4)change(xn);n+;for(n=0;n5;n+)printf(“%d“,xn);printf(“/n“);程序运行后的输出结果是_。A) 6 7 8 9 10 B) 1 3 5 7 9C) 1 2 3 4 5
38、D) 6 2 3 4 5(分数:2.00)A. B.C.D.解析:解析 本题主要考查数组元素的地址作为实参,当 n=0时,把 x0的地址传递给被调函数change(),即把形参 k和实参 x指向同一个存储单元,执行被调函数后 k0=6,即 x0=6;当 n=1时,执行被调函数后 x1=7,以此类推,最后得到 x数组的值为 6,7,8,9,10。24.以下程序的输出结果是 _。#includestdio.hvoid prt(int*x,int*y,int*z)printf(“%d,%d,%d/n“,+*x,+*y,*(z+);int a=10,b=40,c=20;main()prt(,以下叙述中
39、正确的是_。A) 定义 line是一个数组,每个数组元素是一个基类型为 char的指针变量B) 定义 line是一个指针变量,该变量可以指向一个长度为 5的字符型数组C) 定义 line是一个指针数组,语句中的*号称为间址运算符D) 定义 line是一个指向字符型函数的指针(分数:2.00)A. B.C.D.解析:解析 本题考查指针数组的定义,说明符*line5中,遵照运算符的优先级,的优先级高于*号,因此 line先与结合,构成一个数组,在它前面的*号则说明了数组 line是指针类型,它的每个元素都是基类型为 char的指针。所以选项 A叙述正确。27.若 fp是指向某文件的指针,且通过该文
40、件指针读数据已读到文件末尾,则函数 feof(fp)的返回值是( )。A) EOF B) -1 C) 1 D) NULL(分数:1.00)A.B.C. D.解析:解析 EOF 是指向文本文件的结束标志,NULL 是打开文件错误时的返回值。feof(fp)用来判断文件指针是否指向了文件末尾,如果指向了文件末尾就返回 1,否则返回 0。文本文件和二进制文件均可使用此函数。28.下列选项中,值为 1的表达式是( )。A) 1-0 B) 1-/0 C) 1-0 D) /0,0(分数:1.00)A.B. C.D.解析:解析 在 C程序中,字符量可参与任何整数运算。字符参与运算时,首先要将字符转换为对应的
41、ASCII码值再参与整数运算。字符1对应的 ASCII码值是 49,字符0对应的 ASCII码值是 48,字符/0是字符串结束标识符 NULL,其对应的 ASCII码值是 0。29.下列二维数组的说明中,不正确的是( )。A) floata40,1,8,5,9; B) inta34;C) #define N 5 D) inta29.5;float aN3;(分数:2.00)A.B.C.D. 解析:解析 C 语言规定,对于二维数组,只可以省略第一个方括号中的常量表达式,而不能省略第二个方括号中的常量表达式;二维数组的一般定义格式:类型说明符数组名常量表达式常量表达式)。30.以下能正确定义字符串
42、的语句是_。(A) char str=/064;(B) char str=“kx43“;(C) char str=“;(D) char str=“/0“;(分数:2.00)A.B.C.D. 解析:31.下列程序的运行结果是( )。#includestdio.h#includestring.hmain()char*s1=“abDuj“;char*s2=“ABdUG“;int t;t=strcmp(s1,s2);printf(“%d“,t);A) 正数 B) 负数 C) 零 D) 不确定的值(分数:2.00)A. B.C.D.解析:解析 本题考查字符串比较函数和两个字符串比较的原则两个知识点,原则
43、是依次比较两个字符串同一位置的 对字符,若它们的 ASCII码值相同,则继续比较下一对字符,若它们的 ASCII码值不同,则 ASCII码值较大的字符所在的字符串较大;若所有字符相同,则两个字符串相等;若一个字符串全部 i个字符与另一个字符串的前 i个字符相同,则字符串较长的较大。strcmp(s1,s2)的返回值,当 str1str2 时,返回值0;当 str1=str2时,返回值为 0;当 str1str2,返回值0。32.以下程序(strcat 函数用以连接两个字符串)运行后的输出结果是 #includestdio.h #includestring.h main() char a20=“
44、ABCD/OEFG/0“, b=“IJK“; strcat(a, b); printf(“%s/n:, A); A) ABCD/0FG/0IJK B) ABCDIJK C) IJK D) EFGIJK(分数:2.00)A.B. C.D.解析:解析 本题的关键是看懂字符数组 a的定义和初始化。程序中对数组 a的定义和初始化语句为“char a20=“ABCD/0EFG/0“”,字符串中字符D后出现字符串结束标记/0,所以 a数组中实际存放的字符串为“ABCD“,语句“strcat(a,b);“实现字符串 a和字符串 b的连接,所以 a中的内容为字符串“ABCDIJK“。33.有以下程序#incl
45、udestdio.hint fun()static int x=1;x*=2;return x;main()( int i, s=1;for(i=1; i=3; i+)s*=fun();printf(“%d/n“, s);程序运行后的输出结果是_。A) 0 B) 10 C) 30 D) 64(分数:1.00)A.B.C.D. 解析:解析 静态局部变量只在定义它的函数内有效,程序仅分配一次内存,函数返回后,该变量不会消失,下一次依据上一次的结果值。此题中第一次循环时,调用 fun函数后 x的值为 2,s 的值为 2;第二次循环时,调用 fun函数后 x的值为 4,s 的值为 8;第三次循环时,调
46、用 fun函数后 x的值为 8,s 的值为 64。34.以下程序运行后的输出结果是#includestdio.hint b=2;int fun(int *k)b=*k+b; return(b);main()int a10=1, 2, 3, 4, 5, 6, 7, 8, i;for(i=2; i4; i+)b=fun( printf(“%d“, b);printf(“/n“);A) 10 12 B) 8 10 C) 10 28 D) 10 16(分数:2.00)A.B.C. D.解析:解析 第一次 for循环,循环参数 i=2,fun(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“);程序的运行结果是_。A) 1,2,3,4, B) 1,0,7,0, C) 1,4,5,9, D) 3,4,8,10,(分数:2.00)A.B. C.D.解析:评析 在主函数中,定义并初始化了 4行 4列的二维数组 x。对于二维数组元素的赋值,可以只对部分元素赋初值,未赋初值的元素自动取 0。x 数组元素赋初值后各元素为:36.有以下程序#includestdio.h#includestring.htype