1、二级 C语言笔试-459 及答案解析(总分:91.00,做题时间:90 分钟)一、选择题(总题数:40,分数:59.00)1.某二叉树有 5个度为 2的结点,则该二叉树中的叶子结点数是A) 10 B) 8 C) 6 D) 4(分数:2.00)A.B.C.D.2.有下列二叉树,对此二叉树前序遍历的结果为( )(分数:2.00)A.B.C.D.3.为了使模块尽可能独立,要求A) 模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强B) 模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱C) 模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱D) 模块的内聚程度要尽量低,且各模块间的耦合程度要尽
2、量强(分数:2.00)A.B.C.D.4.在面向对象方法中,不属于“对象”基本特点的是_。A) 一致性 B) 分类性 C) 多态性 D) 标识唯一性(分数:2.00)A.B.C.D.5.若有运算符:、=、%、sizeof,则它们按优先级(由高至低)的正确排列顺序为( )。A) %、sizeof、= B) sizeof、%、=、C) sizeof、%、= D) sizeof、%、=(分数:2.00)A.B.C.D.6.若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是A) 函数的实参和其对应的形参共占同一存储单元B) 形参只是形式上的存在,不占用具体存储单元C) 同名的实参和形参
3、占同一存储单元D) 函数的形参和实参分别占用不同的存储单元(分数:1.00)A.B.C.D.7.若有定义:double a=22;int i=0, k=18;,则不符合 C语言规定的赋值语句是A) a=a+, i+; B) i=(a+k)=(i+k);C) i=a%11; D) i=!a;(分数:1.00)A.B.C.D.8.下列程序的输出结果是( )。mainint x=8,y=8;printf(“%d %d/n“,x-,-y);A) 8 8 B) 7 7 C) 7 8 D) 8 7(分数:2.00)A.B.C.D.9.下列程序输出的结果是( )。main()int a;a=-4+4*5-6
4、;printf(“%d”,a);a=4+4%5-6;printf(“%d”,a);a=-3+4%6/5;printf(“%d”,a);a=(7+6)%5/2;printf(“%d”,a);A) 10 2-3 1 B) 10-2 2 1 C) 11-22 1 D) 10 2 2 1(分数:1.00)A.B.C.D.10.下列条件语句中,功能与其他语句不同的是 _。A) if (a) printf(“%d/n“,x);else printf(“%d/n“,y);B) if(a= =0) printf(“%d/n“,y);else printf(“%d/n“,x);C) if(a!=0)printf
5、(“%d/n“,x);else printf(“%d/n“,y);D) if(a= =0)printf(“%d/n“,x);else printf(“%d/n“,y);(分数:1.00)A.B.C.D.11.语句“printf(“a/bhow/are/y/bou/n“);“的输出结果是( )。A) a/bhow/are/y/bou B) a/bhow/are/y/bouC) howareyou D) ahowarey/bou(分数:1.00)A.B.C.D.12.if语句的基本形式是:if(表达式)语句,以下关于“表达式”值的叙述中正确的是_。A) 必须是逻辑值 B) 必须是整数值C) 必须是
6、正数 D) 可以是任意合法的数值(分数:1.00)A.B.C.D.13.以下不正确的叙述是( )。A) 在 C程序中,逗号运算符的优先级最低B) 在 C程序中,APH 和 aph是两个不同的变量C) 若变量 a和 b类型相同,执行了赋值表达式 a=b后 b中的值将放入 a中,而 b中的值不变D) 当从键盘输入数据时,对于整型变量只能输入整型数值,而实型变量只能输入实型数值(分数:1.00)A.B.C.D.14.sizeof(float)是( )。A) 一个双精度型表达式 B) 一个整型表达式C) 一种函数调用 D) 一个不合法的表达式(分数:1.00)A.B.C.D.15.运行下列程序时,若输
7、入的数据为“1,2,3”,则输出结果是( )。main()float a,b,c,t;scanf(“%f,%f,%f“,if(ab)t=a;a=b;b=t;if(ac)t=a;a=c;c=t;if(bc)t=b;b=c;c=t;)printf(“%f/n%f/n%f/n“,a,b,c);A) 1.00 B) 1.002.00 3.003.00 2.00C) 1 D) 3.0000003 2.0000002 1.000000(分数:1.00)A.B.C.D.16.有如下程序:#includestdio.hmain()int x=1,a=0,b=0;switch(x)casc 0:b+;case
8、1:a+;case 2:a+;b+;printf(“a=%d,b=%d/n“,a,b);该程序的输出结果是( )。A) a=2,b=1 B) a=1,b=1 C) a=1,b=0 D) a=2,b=2(分数:1.00)A.B.C.D.17.若程序执行时的输入数据是“2473“,则下述程序的输出结果是#includestdio.hvoid main()int cs;while(cs=getchar()!=,/n)switch(cs=2)case0case 1:putchar(cs+4);case 2:putchar(cs+4);break;case 3:putchar(cs+3);default
9、:putchar(cs+2);A) 668977 B) 668966 C) 6677877 D) 6688766(分数:1.00)A.B.C.D.18.定义 int*swap()指的是_。A) 个返回整型值的函数 swap()B) 一个返回指向整型值指针的函 swap()C) 一个指向函数 swap()的指针,函数返回一个整型值D) 以上说法均错(分数:2.00)A.B.C.D.19.若有定义语句:int m=5,4,3,2,1,i=4;,则下面对 m数组元素的引用中错误的是_。A) m-i B) m2*2 C) mm0 D) mmi(分数:2.00)A.B.C.D.20.下列程序的输出结果是
10、( )。#includestdiohmain()int a=2,b=3,p;p=f(a,b);printf(“%d“,p);int f(a,b)int c;if(ab)c=1;else if(a=b)c=0;else c=-1;return(c) ;A) -1 B) 0 C) 1 D) 2(分数:1.00)A.B.C.D.21.下列程序段的运行结果是( )。#includestdio.hvoid main()char str=“ABC“,*p=str;printf(“%d/n“,*(p+3);A) 67 B) 0 C) 字符C的地址 D) 字符C(分数:2.00)A.B.C.D.22.下面程序
11、的输出是( )。main()int t=1;fun(fun(t);fun(int h)static int a3=1,2,3;int k;for(k=0;k3;k+)ak+=ak-h;for(k=0;k3;k+)printf(“%d“,ak);printf(“/n“);return(ah);A1,2,3,1,5,9,B1,3,5,1,3,5,C1,3,5,0,4,8,D1,3,5,-1,3,7,(分数:1.00)A.B.C.D.23.有以下程序:#includestdio.hvoid fun(int D)int d=2;p=d+;printf(“%d“,p);main()int a=1;fun
12、(a);printf(“%d/n“,a);程序运行后的输出结果是( )。A32 B12 C21 D22(分数:1.00)A.B.C.D.24.若有如下程序段,其中 s,a,b,c 均已定义为整型变量,且 a,c 均已赋值(c 大于 0):s=a;for(b=1;b=c;b+) s=s+1;则与上述程序段功能等价的赋值语句是( )。A) s=a+b; B) s=a+c; C) s=s+c; D) s=b+c;(分数:1.00)A.B.C.D.25.以下叙述中正确的是( )。A) 预处理命令行必须位于源文件的开头B) 在源文件的一行上可以有多条预处理命令C) 宏名必须用大写字母表示D) 宏替换不占
13、用程序的运行时间(分数:1.00)A.B.C.D.26.下面程序段的运行结果是( )。#includestdio.hvoid main()char str=“ABC“,*p=str;pfintf(“%d/n“,*(p+3);A) 67 B) 0 C) 字符C的地址 D) 字符C(分数:2.00)A.B.C.D.27.下列二维数组初始化语句中,不正确的是( )。A) int b2=1,2,3,4,5,6,7; B) int b35=0,0,0;C) intb4=1,2,3,4,5,6; D) int b32=(1,2) ,(3,4) ,(5,6) ;(分数:1.00)A.B.C.D.28.下列程
14、序的运行结果是( )。#includestdio.h#includestring.hmain()char*s1=“ahDuj“;char*s2=“ABdUG“:int t;t=strcmp(s1,s2);printf(“%d“, t);A) 正数 B) 负数 C) 零 D) 不确定的值(分数:2.00)A.B.C.D.29.设有定义:char p=1,2,3,*q=p;,以下不能计算出一个 char型数据所占字节数的表达是_。(A) sizeof(p)(B) sizeof(char)(C) sizeof(*q)(D) sizeof(p0)(分数:2.00)A.B.C.D.30.下面函数的功能是
15、( )。 sss(s,t) char*s,*t; while(*s) strcpy(p+strlen(q),q);printf(“%d /n“,sizeof(p);程序运行后的输出结果是_。(A) 9(B) 6(C) 11(D) 7(分数:2.00)A.B.C.D.32.下列程序的执行结果是_。#lnCludestdio.hunion unint i;char c2;void main()union un x;x.c0=10x.cl=1;printf(“/n%d,x.i);A) 266 B) 11 C) 265 D) 138(分数:2.00)A.B.C.D.33.程序中若有如下说明和定义语句c
16、har fun(char *);main()char *s=“one“,a5=0,(*f1)()=fun,ch;以下选项中对函数 fun的正确调用语句是_。(A) (*f1);(B) *f1(*s);(C) fun(a);(D) ch=*f1(s);(分数:2.00)A.B.C.D.34.在 C语言中,变量的隐含存储类别是( )。A) auto B) staticC) extern D) 无存储类别(分数:2.00)A.B.C.D.35.有以下函数:char fun(char *P)return p;该函数的返回值是( )。A) 无确切的值 B) 形参 p中存放的地址值C) 一个临时存储单元的
17、地址 D) 形参 p自身的地址值(分数:1.00)A.B.C.D.36.下列描述中正确的是( )。A)在 C语言程序中预处理是指完成宏替换和文件包含指定的文件的调用B)预处理指令只能位于 C源程序文件的首部C)预处理命令可以放在程序中的任何位置D)预处理命令结尾需要加分号(分数:1.00)A.B.C.D.37.以下叙述中正确的是_。A) C语言比其他语言高级B) C语言可以不用编译就能被计算机识别执行C) C语言以接近英语国家的自然语言和数学语言作为语言的表达形式D) C语言出现的最晚,具有其他语言的切优点(分数:2.00)A.B.C.D.38.若变量已正确定义,则以下语句的输出结果是_。s=
18、32; s=32; printf(“%d“,s);(A) -1(B) 0(C) 1(D) 32(分数:2.00)A.B.C.D.39.有以下程序#includestdiohmain()int a=2,b=2,c=2;printf(“%d/n“,a/bj=i; k=+i;p=f(j,k);printf(“%d“,p);int f(int a,int b)int c;if(ab)c=1;else if(a= =b) c=0;else c=-1;return(c);A) -1 B) 1 C) 2 D) 编译出错,无法运行(分数:2.00)A.B.C.D.二、填空题(总题数:15,分数:32.00)4
19、1.测试的目的是暴露错误,评价程序的可靠性;而U /U的目的是发现错误的位置并改正错误。(分数:2.00)填空项 1:_42.问题处理方案的正确而完整的描述称为U /U。(分数:2.00)填空项 1:_43.结构化程序设计的 3种基本结构分别是顺序、选择和 1。(分数:2.00)44.数据结构分为逻辑结构与存储结构,线性链表属于 1。(分数:2.00)填空项 1:_45.两种基本测试方法中, 1 测试的原因之一是保证所测试模块中每一个独立路径至少要执行一次。(分数:2.00)填空项 1:_46.软件工程研究的内容主要包括: 1 技术和软件工程管理。(分数:2.00)填空项 1:_47.诊断和改
20、正程序中错误的工作通常称为U /U。(分数:2.00)填空项 1:_48.若有定义:int a=10,b=9,c=8;接着顺序执行下列语句后,变量 b中的值是_。c=(a-=(b-5);c=(a%11)+(b=3);(分数:4.00)填空项 1:_49.设 y为 int型变量,请写出描述“y 是偶数”的表达式 1。(分数:2.00)填空项 1:_50.若 a是 int型变量,且 a的初值为 4,则计算 a+=a-=a*a表达式后 a的值为 1。(分数:2.00)填空项 1:_51.以下程序的功能是:输出 100以内(不含 100)能被 3整除且个位数为 6的所有整数,请填空。main()(in
21、t i,j;for(i=0;ii0;i+)j=i*10+6;if(_)continue;printf(“%d“,j);(分数:2.00)填空项 1:_52./13在内存中占 1个字节,“/12“在内存中占 1 个字节。(分数:2.00)填空项 1:_53.函数 main()的功能是:在带头结点的单链表中查找数据域中值最小的结点。请填空。#includestdio.hstruct nodeint data;struct node * next;int main(struct node * first)/*指针 first为链表头指针*/struct node * p;int m;p=first-
22、next;m=p-data;p=p-next;for(; p!=NULL;p=_)if(p-datam)m=p-data;return m;(分数:2.00)填空项 1:_54.设有下列程序:#includestdio.h#includestring.hmain()int i;char s10,t10;gets(t);for(i=0;i2;i+)gets(s);if(strcmp(t,s)0) strcpy(t,s);printf(“%s/n“,t);程序运行后,从键盘上输入(CR代表回车符):CDEFCRBADEFCRQTHRGCR,则程序的输出结果是_。(分数:2.00)填空项 1:_55
23、.下列程序中的数组 a包括 10个整数元素,分别将前项和后项之和存入数组 b,并按每行 4个元素输出数组 b。请填空。#includestdio.hmain()int a10,b10,i;for(i=0;i10;i+)scanf(“%d“,for(i=0;i9;i+)_;for(i=0;i9;i+)if(i%4=0)printf(“/n“);printf(“%3d“,bi);(分数:2.00)填空项 1:_二级 C语言笔试-459 答案解析(总分:91.00,做题时间:90 分钟)一、选择题(总题数:40,分数:59.00)1.某二叉树有 5个度为 2的结点,则该二叉树中的叶子结点数是A) 1
24、0 B) 8 C) 6 D) 4(分数:2.00)A.B.C. D.解析:解析 对于任何一棵二叉树 T,如果其终端结点(叶子)数为 n1,度为 2的结点数为 n2,则n1=n2+1。所以该二叉树的叶子结点数等于 5+1=6。2.有下列二叉树,对此二叉树前序遍历的结果为( )(分数:2.00)A.B.C. D.解析:解析 对二叉树的前序遍历是指:先访问根结点,然后访问左子树,最后访问右子树,并且,在访问左、右子树时,先访问根结点,再依次访问其左、右子树。3.为了使模块尽可能独立,要求A) 模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强B) 模块的内聚程度要尽量高,且各模块间的耦合程度要尽量
25、弱C) 模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱D) 模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强(分数:2.00)A.B. C.D.解析:解析 模块的独立程度可以由两个定性标准度量:耦合性和内聚性。耦合性是衡量不同模块彼此间互相依赖(连接)的紧密程度;内聚性是衡量一个模块内部各个元素彼此结合的紧密程度。一般来说,要求模块之间的耦合尽可能地低,而内聚性尽可能地高。4.在面向对象方法中,不属于“对象”基本特点的是_。A) 一致性 B) 分类性 C) 多态性 D) 标识唯一性(分数:2.00)A. B.C.D.解析:知识点 面向对象方法的基本理论评析 面向对象方法中最基本的概念
26、是对象,它的基本特点有:标识唯性、分类性、多态性、封装性和模块独立性好。5.若有运算符:、=、%、sizeof,则它们按优先级(由高至低)的正确排列顺序为( )。A) %、sizeof、= B) sizeof、%、=、C) sizeof、%、= D) sizeof、%、=(分数:2.00)A.B.C.D. 解析:解析 主要考查运算符的优先级。sizeof 的优先级最高,后面的顺序是:%、,优先级最低的是“=”。6.若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是A) 函数的实参和其对应的形参共占同一存储单元B) 形参只是形式上的存在,不占用具体存储单元C) 同名的实参和形参占
27、同一存储单元D) 函数的形参和实参分别占用不同的存储单元(分数:1.00)A.B.C.D. 解析:解析 在内存中,实参单元与形参单元是不同的单元。在 C语言中,仅在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参,调用结束后,形参单元被释放,实参单元仍保留并维持原值。7.若有定义:double a=22;int i=0, k=18;,则不符合 C语言规定的赋值语句是A) a=a+, i+; B) i=(a+k)=(i+k);C) i=a%11; D) i=!a;(分数:1.00)A.B.C. D.解析:解析 C 语言的语法要求,运算符“%”两侧的运算量必须是整型量,选项 C中变量 a
28、不是整型量。8.下列程序的输出结果是( )。mainint x=8,y=8;printf(“%d %d/n“,x-,-y);A) 8 8 B) 7 7 C) 7 8 D) 8 7(分数:2.00)A.B.C.D. 解析:解析本题考查自减(-)运算符的使用。“x-”是先引用 x的值然后将 x的值减 1,所以输出的x值为 8;“-y”是先将 y的值减 1然后再引用 y的值,所以输出的 y值为 7。9.下列程序输出的结果是( )。main()int a;a=-4+4*5-6;printf(“%d”,a);a=4+4%5-6;printf(“%d”,a);a=-3+4%6/5;printf(“%d”,
29、a);a=(7+6)%5/2;printf(“%d”,a);A) 10 2-3 1 B) 10-2 2 1 C) 11-22 1 D) 10 2 2 1(分数:1.00)A. B.C.D.解析:解析 本题考查%和/运算符的使用。如果两个数不能整除,只取结果的整数部分,小数部分全部舍去。运算符“%”要求两个运算对象都为整型,其结果是整数除法的余数。表达式:a=-4+4*5-64+20-6=10:表达式:a=4+4%5-6=4+4-6=2;表达式:a=-3+4%6/5=-3+0=-3:表达式:a=(7+6)%5/2=13%5/2=1。10.下列条件语句中,功能与其他语句不同的是 _。A) if (
30、a) printf(“%d/n“,x);else printf(“%d/n“,y);B) if(a= =0) printf(“%d/n“,y);else printf(“%d/n“,x);C) if(a!=0)printf(“%d/n“,x);else printf(“%d/n“,y);D) if(a= =0)printf(“%d/n“,x);else printf(“%d/n“,y);(分数:1.00)A.B.C.D. 解析:解析 本题中选项 A、选项 B和选项 C中的 if条件语句都是在 a=0时输出 y,a!=0 时输出 x。11.语句“printf(“a/bhow/are/y/bou/
31、n“);“的输出结果是( )。A) a/bhow/are/y/bou B) a/bhow/are/y/bouC) howareyou D) ahowarey/bou(分数:1.00)A.B.C. D.解析:解析 “/b”格式符表示退格,功能是将它后面的字母把它前曲的字母覆盖,导致“/b” 格式符前面的字母不能输出;“/”格式符表示输出单引号字符:“/”格式符表示输出反斜线字符。12.if语句的基本形式是:if(表达式)语句,以下关于“表达式”值的叙述中正确的是_。A) 必须是逻辑值 B) 必须是整数值C) 必须是正数 D) 可以是任意合法的数值(分数:1.00)A.B.C.D. 解析:解析 i
32、f 语句中表达式可以为逻辑值,也可以为任意合法的数值。所以正确的答案为 D选项。13.以下不正确的叙述是( )。A) 在 C程序中,逗号运算符的优先级最低B) 在 C程序中,APH 和 aph是两个不同的变量C) 若变量 a和 b类型相同,执行了赋值表达式 a=b后 b中的值将放入 a中,而 b中的值不变D) 当从键盘输入数据时,对于整型变量只能输入整型数值,而实型变量只能输入实型数值(分数:1.00)A.B.C.D. 解析:解析 在 C语言的所有运算符中,逗号运算符的优先级最低;C 语言中的字母区分大小写,所以APH和 aph是两个不同的变量;赋值表达式 a=b表示将 b的值赋给 a,而 b
33、本身的值保持不变;当从键盘输入数据时,对于整型变量可以输入整型数值和字符,对于实型变量可以输入实型数和整型数值等,选项D) 错。14.sizeof(float)是( )。A) 一个双精度型表达式 B) 一个整型表达式C) 一种函数调用 D) 一个不合法的表达式(分数:1.00)A.B. C.D.解析:解析 sizeof 是长度运算符,或称字节数运算符,用于计算数据类型和变量的长度。15.运行下列程序时,若输入的数据为“1,2,3”,则输出结果是( )。main()float a,b,c,t;scanf(“%f,%f,%f“,if(ab)t=a;a=b;b=t;if(ac)t=a;a=c;c=t
34、;if(bc)t=b;b=c;c=t;)printf(“%f/n%f/n%f/n“,a,b,c);A) 1.00 B) 1.002.00 3.003.00 2.00C) 1 D) 3.0000003 2.0000002 1.000000(分数:1.00)A.B.C.D. 解析:解析 本题考查 if语句。第 1个 if语句,实现如果 ab,则交换 a、b 值的功能;第 2个 if语句,实现如果 ac,则交换 a、c 的值的功能;第 3个 if语句,实现如果 bc,则交换 b、c 的值的功能。3个 if语句结合起来实现的功能就是将 a、b、c 按从大到小排序。16.有如下程序:#includest
35、dio.hmain()int x=1,a=0,b=0;switch(x)casc 0:b+;case 1:a+;case 2:a+;b+;printf(“a=%d,b=%d/n“,a,b);该程序的输出结果是( )。A) a=2,b=1 B) a=1,b=1 C) a=1,b=0 D) a=2,b=2(分数:1.00)A. B.C.D.解析:解析 该程序的关键是要搞清楚程序执行的路线。由于 x的值等于 1,所以在 switch语句中,程序从 case 1后面的语句开始执行。由于 case 1后面没有 break语句,所以程序顺序执行 case 2 后面的语句。程序共执行了三条语句:a+;a+;
36、b+;所以,变量 a和 b最后的值分别为 2和 l。选项 A) 正确。17.若程序执行时的输入数据是“2473“,则下述程序的输出结果是#includestdio.hvoid main()int cs;while(cs=getchar()!=,/n)switch(cs=2)case0case 1:putchar(cs+4);case 2:putchar(cs+4);break;case 3:putchar(cs+3);default:putchar(cs+2);A) 668977 B) 668966 C) 6677877 D) 6688766(分数:1.00)A. B.C.D.解析:解析 本题
37、主要考查 switch语句的使用方法。switch 语句的执行过程为:进入 switch结构后,对条件表达式进行运算,然后从上至下去找与条件表达式值相匹配的 case,以此作为入口,执行 switch结构中后面的各语句,直到遇到 break语句,则跳出 switch语句,如果各 case都不匹配时,则执行default后面的语句。18.定义 int*swap()指的是_。A) 个返回整型值的函数 swap()B) 一个返回指向整型值指针的函 swap()C) 一个指向函数 swap()的指针,函数返回一个整型值D) 以上说法均错(分数:2.00)A.B. C.D.解析:评析 个函数可以带回个整
38、型值、字符值、实型值等,但也可以带回指针型数据,即地址。本题的定义中,包括括号和*号,由于()优先级高于*。故它是个返回整型指针的函数。19.若有定义语句:int m=5,4,3,2,1,i=4;,则下面对 m数组元素的引用中错误的是_。A) m-i B) m2*2 C) mm0 D) mmi(分数:2.00)A.B.C. D.解析:评析 一维数组的定义方式为:类型说明符 数组名常量表达式。其中“常量表达式”表示元素的个数,即数组长度。元素的下标从 0开始,最大下标是元素个数减一。本题定义了一个由 5个元素(m0到 m4)组成的数组。选项 A表示对 m3的引用;选项 B表示对 m4的引用;由于
39、 m0的值为 5,所以选项 C表示 m5,但由于 m数组元素的最大下标为 4,所以本引用下标越界;由于 mi即 m4的值为 1,所以选项 D表示对 m1的引用。20.下列程序的输出结果是( )。#includestdiohmain()int a=2,b=3,p;p=f(a,b);printf(“%d“,p);int f(a,b)int c;if(ab)c=1;else if(a=b)c=0;else c=-1;return(c) ;A) -1 B) 0 C) 1 D) 2(分数:1.00)A. B.C.D.解析:解析 本题考查 if else语句。在 int f(a,b)中:第一个 if语句,
40、先判断条件,发现 ab 条件不成立,则执行与其配对的 else语句;第二个 if语句,先判断条件,发现 a=b条件不成立,则执行与其配对的 else语句,c=-1。21.下列程序段的运行结果是( )。#includestdio.hvoid main()char str=“ABC“,*p=str;printf(“%d/n“,*(p+3);A) 67 B) 0 C) 字符C的地址 D) 字符C(分数:2.00)A.B. C.D.解析:解析 先定义了一个指向字符型数组 str的指针 p,指针 p指向数组 str的首地址,p+3 将指针指向 str3,又因为字符型数组在存放字符串时会自动在末尾加上/0
41、,所以*(p+3)=0。22.下面程序的输出是( )。main()int t=1;fun(fun(t);fun(int h)static int a3=1,2,3;int k;for(k=0;k3;k+)ak+=ak-h;for(k=0;k3;k+)printf(“%d“,ak);printf(“/n“);return(ah);A1,2,3,1,5,9,B1,3,5,1,3,5,C1,3,5,0,4,8,D1,3,5,-1,3,7,(分数:1.00)A.B.C.D. 解析:解析 本题考查双重函数调用及 for循环使用,fun 函数中第一个 for循环语句的作用是给数组a赋值。当第一次调用 fu
42、n函数时,把实参 1传给形参,输出 a数组的元素为 1,3,5;第二次调用 fun函数时,由于数组 a为静态局部变量,故输出 a数组的元素为-1,3,7。23.有以下程序:#includestdio.hvoid fun(int D)int d=2;p=d+;printf(“%d“,p);main()int a=1;fun(a);printf(“%d/n“,a);程序运行后的输出结果是( )。A32 B12 C21 D22(分数:1.00)A.B.C. D.解析:解析 本题考查函数调用。主函数中调用 funmain()函数,p=d+,d=2,选取 d的值,再加 1,所以输出 p的值为 2,再回到
43、主函数中,直接输出 a的值为 1。24.若有如下程序段,其中 s,a,b,c 均已定义为整型变量,且 a,c 均已赋值(c 大于 0):s=a;for(b=1;b=c;b+) s=s+1;则与上述程序段功能等价的赋值语句是( )。A) s=a+b; B) s=a+c; C) s=s+c; D) s=b+c;(分数:1.00)A.B. C.D.解析:解析 本题考查赋值语句。s 的初值是 a,b 从 1循环到 c,每循环一次,s 加 1,共加了 1* c次,因此程序实现的功能是 s=a+c。25.以下叙述中正确的是( )。A) 预处理命令行必须位于源文件的开头B) 在源文件的一行上可以有多条预处理
44、命令C) 宏名必须用大写字母表示D) 宏替换不占用程序的运行时间(分数:1.00)A.B.C.D. 解析:解析 预处理命令行通常位于源文件的开头,但不一定必须位于开头,也可以写在函数与函数之间;由于预处理命令的末尾不加分号,所以,不能在一行上写多条预处理命令,否则,系统处理时就会把它当作一条命令;为了与变量名区别,宏名一般习惯用大写字母表示,但也可以用小写字母。26.下面程序段的运行结果是( )。#includestdio.hvoid main()char str=“ABC“,*p=str;pfintf(“%d/n“,*(p+3);A) 67 B) 0 C) 字符C的地址 D) 字符C(分数:
45、2.00)A.B. C.D.解析:解析 先定义了一个指向字符型数组 str的指针 P,指针 P指向数组 str的首地址,p+3 将指针指向 str3,又因为字符型数组在存放字符串时会自动在末尾加上/0,所以*(p+3)=0。27.下列二维数组初始化语句中,不正确的是( )。A) int b2=1,2,3,4,5,6,7; B) int b35=0,0,0;C) intb4=1,2,3,4,5,6; D) int b32=(1,2) ,(3,4) ,(5,6) ;(分数:1.00)A.B.C.D. 解析:解析 在对二维数组元素赋初值时,可以只对部分元素赋初值,未赋初值的元素自动取 0;C 语言规
46、定,对于二维数组,只可以省略第 1个方括号中的常量表达式,而不能省略第 2个方括号中的常量表达式;赋的初值不能多于事先定义好的数组元素个数。在选项 D)赋值表达式中对每一维的元素赋初值应用 ,而不是()。28.下列程序的运行结果是( )。#includestdio.h#includestring.hmain()char*s1=“ahDuj“;char*s2=“ABdUG“:int t;t=strcmp(s1,s2);printf(“%d“, t);A) 正数 B) 负数 C) 零 D) 不确定的值(分数:2.00)A. B.C.D.解析:解析 本题考查字符串比较函数和两个字符串比较的原则两个知
47、识点:原则是依次比较两个字符串同位置的一对字符,若它们的 ASCII码值相同,则继续比较下一对字符,若它们的 ASCII码值不同则 ASCII码值较大的字符所在的串符串较大;若所有字符相同,则两个字符串相等;若一个字符串全部 i个字符与另一个字符串的前 i个字符相同,则字符串较长的较大。strcmp(s1,s2)的返回值,当 str1str2 时,返回值0;当 str1=str2时,返回值为 0;当 str1str2,返回值0。29.设有定义:char p=1,2,3,*q=p;,以下不能计算出一个 char型数据所占字节数的表达是_。(A) sizeof(p)(B) sizeof(char)(C