1、二级 C语言笔试-452 及答案解析(总分:99.00,做题时间:90 分钟)一、选择题(总题数:40,分数:65.00)1.下列选项中,不是一个算法的基本特征的是( )。A) 完整性 B) 可行性C) 有穷性 D) 拥有足够的情报(分数:2.00)A.B.C.D.2.某二叉树有 5个度为 2的结点,则该二叉树中的叶子结点数是A) 10 B) 8 C) 6 D) 4(分数:2.00)A.B.C.D.3.在面向对象方法中,信息隐蔽是依靠A) 对象的继承 B) 对象的多态 C) 对象的封装 D) 对象的分类(分数:2.00)A.B.C.D.4.在计算机中,算法是指( )。A) 查询方法 B) 加工
2、方法C) 解题方案的准确而完整的描述 D) 排序方法(分数:1.00)A.B.C.D.5.下列选项中不属于结构化程序设计原则的是( )。A可封装 B自顶向下C模块化 D逐步求精(分数:1.00)A.B.C.D.6.设有如下三个关系表(分数:2.00)A.B.C.D.7.软件调试的目的是( )。A) 发现错误 B) 改善软件的性能C) 改正错误 D) 验证软件的正确性(分数:2.00)A.B.C.D.8.以下叙述中错误的是_。A) C语言源程序经编译后生成后缀为.obj 的目标程序B) C程序经过编译、连接步骤后才能形成一个真正可执行的二进制机器指令文件C) 用 C语言编写的程序称为源程序,它以
3、 ASCII代码形式存放在一个文本文件中D) C语青中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令(分数:1.00)A.B.C.D.9.下列定义变量的语句中错误的是_。(A) int _int;(B) double int_;(C) char for;(D) float US$(分数:1.00)A.B.C.D.10.设变量已正确定义并赋值,以下正确的表达式是A) x=y*5=x+Z B) int(15.8%5) C) x=y+z+5,+y D) x=25%5.0(分数:1.00)A.B.C.D.11.在 ASCII代码表中每一个大写字母比它相应的小写字母的 ASCII码( )。
4、A) 小 32 B) 小 64 C) 大 32 D) 大 1(分数:1.00)A.B.C.D.12.下列程序的输出结果是 _。main()int i=3; switch(i)case 1:casc 2: printf(“%d“,i);case 3:case 4: break;defanlt:printf(“OK“);A) 0 B) 3 C) OK D) 没有任何输出(分数:1.00)A.B.C.D.13.设 int型占 2个字节,则 unsigned int所能表示的数据范围是_。A) 065535 B) -3276932767 C) 165536 D) 032767(分数:2.00)A.B.
5、C.D.14.下列程序执行后输出的结果是_。int d=l;fun(int p)int d=5;d+=p+;printf(“%d,“,d);main()int a=3;fun(a);d+=a+;printf(“%d/n“,d);A) 8,12 B) 9,13 C) 8,4 D) 9,5(分数:1.00)A.B.C.D.15.下列能正确定义一维数组的选项是( )。A) int a5=0,1,2,3,4,5;B) char a=0,1,2,3,4,5;C) char a=A,B,C);D) int a5=“0123“;(分数:2.00)A.B.C.D.16.以下选项中,当 x为大于 1的奇数时,值
6、为 0的表达式是A) x%2=1 B) x/2 C) x%21=0 D) x%2=0(分数:2.00)A.B.C.D.17.下面程序的输出结果是int b=2;int func(int *a)b+=*a;return(b);main( )int a=2,res=2;res+=fune(for(i=0;in/2;i+)t=ai;ai=an-1-i;an-1-i=t;main()int b10=1,2,3,4,5,6,7,8,9,10;int i,s=0;reverse(b,10) ;for(i=0;i3;i+)s+=bi;printf(“%d/n“,s);程序运行后的输出结果是( )。A) 27
7、 B) 6 C) 25 D) 30(分数:2.00)A.B.C.D.19.以下程序段完全正确的是 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);(分数:2.00)A.B.C.D.20.若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是( )。A函数的实参和其对应的形参共占同一存储单元 B形参只是形式上的存在,不占用具体存储单元C同名的实参和形参占同一存储单元 D函数的形参和实参分别占用不同的存储单元(
8、分数:1.00)A.B.C.D.21.执行下列程序时输入 456空格789空格123回车,输出结果是( )。 #includestdio.h main() char m80; int c,i; scanf(“%c“, scanf(“%d“,for(i=1;i10;i+ =2) s+ =i+1;printf(“%d/n“,s);程序执行后的输出结果是( )。A) 正整数 19 的累加和 B) 正整数 110 的累加和C) 正整数 19 中奇数之和 D) 正整数 110 中偶数之和(分数:1.00)A.B.C.D.23.阅读下列程序段,则程序的输出结果为#include “stdio.h“#def
9、ine M(X,Y)(X)*(Y)#define N(X,Y)(X)/(Y)main( )int a=5,b=6,c=8,k;k=N(M(a,b),c);printf(“%d/n“,k);A)3 B)5 C)6 D)8(分数:2.00)A.B.C.D.24.在 16位 IBM-PC机上使用 C语言,若有如下定义stmct datainti;char ch;double fb;则结构变量 b占用内存的字节数是A) 1 B) 2 C) 7 D) 11(分数:2.00)A.B.C.D.25.有以下函数:int fun(char * s)char * t=s;while(*t+);return(t-s
10、)该函数的功能是_。A) 比较两个字符串的大小 B) 计算 s所指字符串占用内存字节个数C) 计算 s所指字符串的长度 D) 将 s所指字符串复制到字符串 t中(分数:2.00)A.B.C.D.26.有以下程序:#include stdio.hmain()int a = 2,4,6,8,10 ,y =0,x, * p;p =for(x=1;x3;x+)y+ =px;printf( “% d /n“ , y); 程序运行后的输出结果是( )。A) 10 B) 11 C) 14 D) 15(分数:1.00)A.B.C.D.27.下述程序的输出结果是( )。#includestdio.hvoid m
11、ain()int a5=1,2,3,4,5;int *p=a,*q=p;printf(“%d,“,*(p+);printf(“%d“,*q);A) 2,2 B) 1,1 C) 3,4 D) 1,2(分数:2.00)A.B.C.D.28.判断字符串 s1是否大于字符串 s2,应该使用( )。A) if(strcmp(s1,s2)0) B) if(s1s2)C) if(strcmp(s2,s1)0) D) if(strcmp(s1,s2)(分数:2.00)A.B.C.D.29.有以下程序#include#define N 5#define M N+1#define f(x) (x*M)main()
12、int i1,i2;i1=f(2);i2=f(1+1);printf(“%d %d“,i1,i2);程序的运行结果是_。(A) 12 12(B) 11 7(C) 11 11(D) 12 7(分数:2.00)A.B.C.D.30.下列程序的输出结果是( )。#includestdio.h#includedstring.hvoid fun(int b)static int i=0;dobi+=bi+1;while(+i2);main()int k,a5=1,3,5,4,9;fun(a);for(k=0;k5;k+)printf(“%d“,ak);A13579 B48579 C48549 D4899
13、9(分数:1.00)A.B.C.D.31.有以下程序:#define P 3void F(int x)return(P*x*x);main()printf(“%d/n“,F(3+5);程序运行后的输出结果是_。A) 192 B) 29 C) 25 D) 编译出错(分数:2.00)A.B.C.D.32.下面程序段的运行结果是char *p=“abedefgh“:p+=3;printf(“070 d/n“,strlen(strcpy(P,“ABCD“);A) 8 B) 12 C) 4 D) 7(分数:2.00)A.B.C.D.33.设定义下列结构体,结构体变量 p的出生年份赋值正确的语句是( )。
14、stmct stint x;int y;int z;struct workerchar name20;char sex;struct st birth;p;A) x=1987 B) birth.x=1987; C) p.birth.x=1987; D) p.x=1987;(分数:1.00)A.B.C.D.34.已知有结构体:struct skint a;float b;data,*p;若有 p= C) p-data.a D) p.data.a(分数:2.00)A.B.C.D.35.若有运算符:、*=、%、sizeof,则它们按优先级(由低至高)的正确排列次序为( )。A) *= % Sizeo
15、f B) *= % sizeofC) *= sizeof % D) *= % sizeof(分数:1.00)A.B.C.D.36.设 x=015,则 x=x017的值是( )。A) 00001111 B) 11111101 C) 00000010 D) 11000000(分数:2.00)A.B.C.D.37.设 x=015,则 x=x017的值是( )。A) 00001111 B) 11111101 C) 00000010 D) 11000000(分数:2.00)A.B.C.D.38.设有以下语句:int a=1,b=2,c;c=a(b2);执行后,C 的值为_。A) 6 B) 7 C) 8
16、D) 9(分数:2.00)A.B.C.D.39.若 x=2,y=3,则 xdob-=a;a+;while(b-0);printf(“%d,%d/n“,a,b);(分数:2.00)填空项 1:_47.以下程序的输出结果是_。#includestdio.hmain()int x=27;while(x20if(x/3)x+;break;elsecontinue;printf(“%d/n“,x);(分数:2.00)填空项 1:_48.若有定义:int a44=l,2,3,4,0,4,6,8,10,1,3,5,7,则初始化后,a22得到的初值是 1。(分数:2.00)填空项 1:_49.下列程序的输出结
17、果是_。#includestdio.h#define N 5jnt fun(int*s,int a,int n)int j;*s=a;j=n:while(a!=sj)j-;return j;main()int sN+1;int k;for(k=1;k=N;k+)sk=k+1;printf(“%d/n“,fun(s,4,N);(分数:4.00)填空项 1:_50.下列程序输出的结果是_.int m=17;int fun(int x,int y)int m=3;return(x*y-m);main()int a=5,b=7;printf(“%d/n“,fun(a,b)/m);(分数:2.00)填空
18、项 1:_51.若有下列定义:int a=1,2,3,4,5,6,7,8,9,10,*p=a;,则值为 3的表达式为: 1。(分数:2.00)填空项 1:_52.函数 fun的功能是计算 xn。double fun(double x,int n)int i; double y=1;for(i=1;i=n;i+) y=y*x;return y;主函数中已经正确定义变量 m,a,b 并赋值,要调用函数 fun计算:m=a 4+b4-(a+b)3。实现这一计算的函数调用语句为U /U。(分数:2.00)填空项 1:_53.若有说明 char s1=“That girl“,s2=“is beautif
19、ul“;则使用函数 strcmp(s1,s2)后,结果是 1。(分数:2.00)填空项 1:_54.下列程序的输出结果是_。#includestdio.hfun()static int a0;a+3;printf(“%d“,a) ;main()int cc;for(CC1;cc5;CC+)fun();printf(“/n);(分数:2.00)填空项 1:_55.下列程序的运行结果是_。#define POW(r)(r)*(r)main()int x=3,y=2,t;t=POW(x+y);printf(“%d/n“,t);(分数:2.00)填空项 1:_二级 C语言笔试-452 答案解析(总分:
20、99.00,做题时间:90 分钟)一、选择题(总题数:40,分数:65.00)1.下列选项中,不是一个算法的基本特征的是( )。A) 完整性 B) 可行性C) 有穷性 D) 拥有足够的情报(分数:2.00)A. B.C.D.解析:解析 作为一个算法,一般应该具有下列 4个特征:可行性,即考虑到实际的条件能够达到一个满意的结果;确定性,算法中的第一个步骤都必须是有明确定义的;有穷性,一个算法必须在有限的时间内做完;拥有足够的情报。2.某二叉树有 5个度为 2的结点,则该二叉树中的叶子结点数是A) 10 B) 8 C) 6 D) 4(分数:2.00)A.B.C. D.解析:解析 对于任何一棵二叉树
21、 T,如果其终端结点(叶子)数为 n1,度为 2的结点数为 n2,则n1=n2+1。所以该二叉树的叶子结点数等于 5+1=6。3.在面向对象方法中,信息隐蔽是依靠A) 对象的继承 B) 对象的多态 C) 对象的封装 D) 对象的分类(分数:2.00)A.B.C. D.解析:解析 封装是一种信息屏蔽技术,目的在于将对象的使用者和对象的设计者分开。用户只能见到对象封装界面上的信息,不必知道实现的细节。封装一方面通过数据抽象把相关的信息、结合在一起,另一方面也简化了接口。4.在计算机中,算法是指( )。A) 查询方法 B) 加工方法C) 解题方案的准确而完整的描述 D) 排序方法(分数:1.00)A
22、.B.C. D.解析:解析 计算机算法是指解题方案的准确而完整的描述,它具有的基本特征有:可行性、确定性、有穷性和拥有足够的情报。5.下列选项中不属于结构化程序设计原则的是( )。A可封装 B自顶向下C模块化 D逐步求精(分数:1.00)A. B.C.D.解析:解析 结构化程序设计的主要原则概括为自顶向下,逐步求精,限制使用 GOTO语句。6.设有如下三个关系表(分数:2.00)A.B.C. D.解析:解析 对于两个关系的合并操作可以用笛卡尔积表示。设有 n元关系 R和 m元关系 S,它们分别有 p和 g个元组,则 R与 S的笛卡尔积记为 RS,它是一个 m+n元关系,元组个数是 pq,由题意
23、可得,关系 T是由关系 R与关系 S进行笛卡尔积运算得到的。7.软件调试的目的是( )。A) 发现错误 B) 改善软件的性能C) 改正错误 D) 验证软件的正确性(分数:2.00)A.B.C. D.解析:解析 在对程序进行了成功的测试之后将进入程序调试,程序调试的任务是诊断和改正程序中的错误。8.以下叙述中错误的是_。A) C语言源程序经编译后生成后缀为.obj 的目标程序B) C程序经过编译、连接步骤后才能形成一个真正可执行的二进制机器指令文件C) 用 C语言编写的程序称为源程序,它以 ASCII代码形式存放在一个文本文件中D) C语青中的每条可执行语句和非执行语句最终都将被转换成二进制的机
24、器指令(分数:1.00)A.B.C.D. 解析:解析 C 语言程序编译时,每条可执行语句将转换为二进制的机器指令非执行语句如注释语句等不被编译。9.下列定义变量的语句中错误的是_。(A) int _int;(B) double int_;(C) char for;(D) float US$(分数:1.00)A.B.C.D. 解析:10.设变量已正确定义并赋值,以下正确的表达式是A) x=y*5=x+Z B) int(15.8%5) C) x=y+z+5,+y D) x=25%5.0(分数:1.00)A.B.C. D.解析:解析 求余运算符“%“两边的运算对象必须是整型,而选项 B)和 D)中“
25、%“两边的运算对象有浮点整数据,所以选项 B)和 D)是错误的表达式。在选项 A)中赋值表达式的两边出现相同的变量 x,也是错误的。选项 C)是一个逗号表达式,所以正确答案为 C)。11.在 ASCII代码表中每一个大写字母比它相应的小写字母的 ASCII码( )。A) 小 32 B) 小 64 C) 大 32 D) 大 1(分数:1.00)A. B.C.D.解析:解析 本题考查大小写字母的 ASCII码值的关系。大写字母比它相应的小写字母的 ASCII码小32。12.下列程序的输出结果是 _。main()int i=3; switch(i)case 1:casc 2: printf(“%d“
26、,i);case 3:case 4: break;defanlt:printf(“OK“);A) 0 B) 3 C) OK D) 没有任何输出(分数:1.00)A.B.C.D. 解析:评析 在题中,i 的值为 3,由于“case 3:”后面没有 break语句,所以继续向下执行“case 4:”后面的语句,由于“case 4:”后面的语句为 break强行退出 switch语句,所以,本题没有任何输出。13.设 int型占 2个字节,则 unsigned int所能表示的数据范围是_。A) 065535 B) -3276932767 C) 165536 D) 032767(分数:2.00)A.
27、 B.C.D.解析:评析 本题 int型占 2个字节,即 16位 unsigned int所能表示的数据范围是 0(2 16-1),即065535。14.下列程序执行后输出的结果是_。int d=l;fun(int p)int d=5;d+=p+;printf(“%d,“,d);main()int a=3;fun(a);d+=a+;printf(“%d/n“,d);A) 8,12 B) 9,13 C) 8,4 D) 9,5(分数:1.00)A.B.C. D.解析:评析 本题执行过程如下:首先调用 fun函数,使得实参 a的值 3传递绐形参 p,得到局部变量d=8,打印出局部变量 d的值 8返回
28、主函数执行“d+=a+”,此处的 d为全局变量,所以 d=1+3=4(由于本题是值传递,所以在函数 fun中对 p值的改变并不能引起 a的改变),故本题的输出是 8,4。15.下列能正确定义一维数组的选项是( )。A) int a5=0,1,2,3,4,5;B) char a=0,1,2,3,4,5;C) char a=A,B,C);D) int a5=“0123“;(分数:2.00)A.B. C.D.解析:解析 在定义数组时,如果赋给的初始值个数大于数值的长度,这样就会越界,因此选项 A错误;选项 C中定义的是一个字符变量 C;选项 D)中整型数组 a中只能存储整型数据,而不能存储字符串常量
29、“0123”。16.以下选项中,当 x为大于 1的奇数时,值为 0的表达式是A) x%2=1 B) x/2 C) x%21=0 D) x%2=0(分数:2.00)A.B.C.D. 解析:解析 因为 x的值为大于 1的奇数,所以 x除以 2的余数等于 1,因此,选项 A)、C)中表达式的结果为真,不为 0;对于选项 B)来说,x 除以 2的商不会等于 0;选项 D)中表达式的结果为假,即等于0。17.下面程序的输出结果是int b=2;int func(int *a)b+=*a;return(b);main( )int a=2,res=2;res+=fune(for(i=0;in/2;i+)t=
30、ai;ai=an-1-i;an-1-i=t;main()int b10=1,2,3,4,5,6,7,8,9,10;int i,s=0;reverse(b,10) ;for(i=0;i3;i+)s+=bi;printf(“%d/n“,s);程序运行后的输出结果是( )。A) 27 B) 6 C) 25 D) 30(分数:2.00)A. B.C.D.解析:解析 本题考查函数调用时的参数传递。函数 reverse 将数组 b进行了逆置,此时的 b10=10,9,8,7,6,5,4,3,2,1,后面 for语句的功能是将 b中的前 3个数累加,将结果放在 s中,最后将 s输出,结果 s=10+9+8=
31、27。19.以下程序段完全正确的是 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);(分数:2.00)A.B.C. D.解析:解析 选项 A、B 中,指针 p是一个变量,但是没有赋值,即 p没有指向一个具体的存储空间,所以不能在 scanf语句中使用指针 p。选项 D中,“*p=“表示错误,“ scanf(“%d“,for(i=1;i10;i+ =2) s+ =i+1;printf(“%d/n“,s);程序执行后的输出
32、结果是( )。A) 正整数 19 的累加和 B) 正整数 110 的累加和C) 正整数 19 中奇数之和 D) 正整数 110 中偶数之和(分数:1.00)A.B.C.D. 解析:解析 通过 for(i=1;i10;i+=2)可知,i 取值为 110 的奇数,即 1,3,5,7,9,i+1 即为2,4, 6,8,10。因此,程序的功能是计算并输出 110 中的偶数之和,s+=i+1 就是累加这些偶数。23.阅读下列程序段,则程序的输出结果为#include “stdio.h“#define M(X,Y)(X)*(Y)#define N(X,Y)(X)/(Y)main( )int a=5,b=6
33、,c=8,k;k=N(M(a,b),c);printf(“%d/n“,k);A)3 B)5 C)6 D)8(分数:2.00)A. B.C.D.解析:解析 带参数的宏定义命令行形式如下:#define 宏名(形参表) 替换文本。首先进行 M的宏替换,之后再进行 N的宏替换,替换后的表达式为(a)*(b)/(C)。24.在 16位 IBM-PC机上使用 C语言,若有如下定义stmct datainti;char ch;double fb;则结构变量 b占用内存的字节数是A) 1 B) 2 C) 7 D) 11(分数:2.00)A.B.C.D. 解析:解析 结构体变量所占用内存的字节数是其所有成员所
34、占用内存字节数之和。本题中整型变量 i所占用的内存是 2字节,字符型变量 ch所占用的内存是 1字节,双精度型变量 f所占用的内存是 8字节,三者相加即可。25.有以下函数:int fun(char * s)char * t=s;while(*t+);return(t-s)该函数的功能是_。A) 比较两个字符串的大小 B) 计算 s所指字符串占用内存字节个数C) 计算 s所指字符串的长度 D) 将 s所指字符串复制到字符串 t中(分数:2.00)A.B.C. D.解析:解析 定义一个字符指针 t,并将字符指针 s的首地址赋给字符指针 t;通过 while语句将指针 t往下移到字符串最后一个字符
35、后面的地址,指针 s始终指向首地址,将末地址减去首地址可以计算出字符串的长度。26.有以下程序:#include stdio.hmain()int a = 2,4,6,8,10 ,y =0,x, * p;p =for(x=1;x3;x+)y+ =px;printf( “% d /n“ , y); 程序运行后的输出结果是( )。A) 10 B) 11 C) 14 D) 15(分数:1.00)A.B.C. D.解析:解析 本程序通过语句 p=int *p=a,*q=p;printf(“%d,“,*(p+);printf(“%d“,*q);A) 2,2 B) 1,1 C) 3,4 D) 1,2(分数
36、:2.00)A.B.C.D. 解析:解析 题干中,*(p+)就是数组元素 a0,输出 a0,之后指针 p的值加 1,*q 即是数组元素a1。28.判断字符串 s1是否大于字符串 s2,应该使用( )。A) if(strcmp(s1,s2)0) B) if(s1s2)C) if(strcmp(s2,s1)0) D) if(strcmp(s1,s2)(分数:2.00)A.B.C. D.解析:解析 本题考查字符串比较函数 strcmp(),调用形式:strcmp(str+1,str+2),其中shr+1、str+2 分别是字符串存储区的首地址,函数功能:比较字符串 str1和 str2,当 str1
37、str2 时,返回值为负数;当 str1=str2时,返回 0;当 str1str2,返回值为正数。注意:不能使用关系运算符比较两个字符串的大小。29.有以下程序#include#define N 5#define M N+1#define f(x) (x*M)main()int i1,i2;i1=f(2);i2=f(1+1);printf(“%d %d“,i1,i2);程序的运行结果是_。(A) 12 12(B) 11 7(C) 11 11(D) 12 7(分数:2.00)A.B. C.D.解析:30.下列程序的输出结果是( )。#includestdio.h#includedstring.
38、hvoid fun(int b)static int i=0;dobi+=bi+1;while(+i2);main()int k,a5=1,3,5,4,9;fun(a);for(k=0;k5;k+)printf(“%d“,ak);A13579 B48579 C48549 D48999(分数:1.00)A.B.C. D.解析:解析 本题考查 do-while循环,在 fun函数中,首先定义了静态变量 i=0,do-while 循环要实现的功能是以 b0=b0+b1,b1=b1+b2,其他元素不变的规则重新给 b数组赋值。在主函数中,通过调用 fun函数,按上面的规则对数组 a重新赋值,最后输出数
39、组 a。31.有以下程序:#define P 3void F(int x)return(P*x*x);main()printf(“%d/n“,F(3+5);程序运行后的输出结果是_。A) 192 B) 29 C) 25 D) 编译出错(分数:2.00)A. B.C.D.解析:解析 本题的函数 F的功能是,对于形参 x,返回 3*x*x的值。因此对于函数调用“F(3+5);”先计算得到实参结果是 8,然后调用 F,返回结果应该是 388=192。正确选项是 A。32.下面程序段的运行结果是char *p=“abedefgh“:p+=3;printf(“070 d/n“,strlen(strcpy
40、(P,“ABCD“);A) 8 B) 12 C) 4 D) 7(分数:2.00)A.B.C. D.解析:解析 p+=3 使指针 p指向字符d,strcpy 函数的功能是把后面的字符串复制到 p指针指向的空间。strlen 函数的功能是求字符串的长度,并返回字符个数,不计最后的/0,结果为 4,即字符串“ABCD”的长度。33.设定义下列结构体,结构体变量 p的出生年份赋值正确的语句是( )。stmct stint x;int y;int z;struct workerchar name20;char sex;struct st birth;p;A) x=1987 B) birth.x=1987
41、; C) p.birth.x=1987; D) p.x=1987;(分数:1.00)A.B.C. D.解析:解析 本题主要考查怎样为嵌套定义的结构中的成员赋值:由于 worker中的 birth是一个 st型的结构,在给 birth赋值时,不能将 birth 作为一个整体,要用“”运算再深入一层访问到最基本的成员 x、y/z。34.已知有结构体:struct skint a;float b;data,*p;若有 p= C) p-data.a D) p.data.a(分数:2.00)A.B. C.D.解析:解析 本题主要考查结构指针:p=dob-=a;a+;while(b-0);printf(“
42、%d,%d/n“,a,b);(分数:2.00)填空项 1:_ (正确答案:2,8)解析:解析 dowhile 语句的功能是:首先执行循环体语句,然后检测循环控制条件表达式的值,若为真,则重复执行循环体语句,否则退出循环。这里程序初始时 a=1,b=10,经过操作 b-=a;a+后b=9,a=2,判断条件 b-0 不成立,退出循环,但 b的值被减 1,因此结果为:a=2,b=8。47.以下程序的输出结果是_。#includestdio.hmain()int x=27;while(x20if(x/3)x+;break;elsecontinue;printf(“%d/n“,x);(分数:2.00)填
43、空项 1:_ (正确答案:29)解析:解析 本题考查 while循环和+运算,x=27 符合循环条件,执行循环体中 x+后,x=28,if 条件也成立,执行 x+后退出,x 的值增 1,结果 x=29。48.若有定义:int a44=l,2,3,4,0,4,6,8,10,1,3,5,7,则初始化后,a22得到的初值是 1。(分数:2.00)填空项 1:_ (正确答案:8)解析:解析二维数组可以看成是按矩阵形式排列的,题日中给二维数组赋初值是按行分段赋值的,a44可以分解为 4个一维数组,其数组名分别为 a0、a1、a2、a3,这 4个一维数组都有,4 个元素,a0的元素为 a00、a01、aO
44、2、a03。49.下列程序的输出结果是_。#includestdio.h#define N 5jnt fun(int*s,int a,int n)int j;*s=a;j=n:while(a!=sj)j-;return j;main()int sN+1;int k;for(k=1;k=N;k+)sk=k+1;printf(“%d/n“,fun(s,4,N);(分数:4.00)填空项 1:_ (正确答案:3)解析:解析 本题考查函数的调用及其相关应用首先在 for循环中将数组 s6初始化为0,2,3,4,5,6。调用函数 fun(s,4,5),第一条语句将 a0置为 4,j 置为 5,while
45、 循环从 a5开始向前,直到 s3与 a相等,跳出循环,故函数值为 3。50.下列程序输出的结果是_.int m=17;int fun(int x,int y)int m=3;return(x*y-m);main()int a=5,b=7;printf(“%d/n“,fun(a,b)/m);(分数:2.00)填空项 1:_ (正确答案:1)解析:解析 本题考查局部变量和全局变量的区别:局部变量是指作用域在函数级和块级的变量,全局变量是指作用域在程序级和文件级的变量。本程序首先定义了一个全局变量 m=17,m=17 的作用域在整个程序内。在 fun函数内部定义了一个局部变量 m=3,m=3 的作
46、用域仅在 fun 函数内部,通过 fun函数返回两个形参的积再减 m。在主函数中,输出fun(a,b)/m=(5*7-3)/17=1。51.若有下列定义:int a=1,2,3,4,5,6,7,8,9,10,*p=a;,则值为 3的表达式为: 1。(分数:2.00)填空项 1:_ (正确答案:p+=2,*(p+))解析:解析 由题可知 a2=3,因此只要使指针 p指向 a3,然后再引用指针的值就可以了。52.函数 fun的功能是计算 xn。double fun(double x,int n)int i; double y=1;for(i=1;i=n;i+) y=y*x;return y;主函数中已经正确定义变量 m,a,b 并赋值,要调用函数 fun计算:m=a 4+b4-(a+b)3。实现这一计算的函数调用语句为U /U。(分数:2.00)填空项 1:_ (正确答案:fun(a,4)+fun(b,4)-fun(a+b),3);)解析:解析 函数 fun的功能是计算 x的 n次方,a 的 4次方的调用函数为 fun(a,4),b 的 4次方的调用函数为 fun(b,4),(a+b)的 3次方的调用函数为 fun(a+b),3),计算 m=a4+b4-(a+b)3的函数调用语句为:fun(a,4)+f