1、国家计算机二级(C)80 及答案解析(总分:124.00,做题时间:120 分钟)一、选择题(1-10 题每题 2 分,11-50 题(总题数:50,分数:100.00)1.若有说明:int n=2,*p=n,*q=p;,则以下非法的赋值语句是( )。(分数:2.00)A.p=q;B.*p=q;C.n=*q;D.p=n;2.设有定义:intk=0;,以下选项的四个表达式中与其他三个表达式的值不相同的是【 】。(分数:2.00)A.k+B.k+=lC.+kD.k+l3.有以下程序: point(char *p)p+=3; main() char b4=a,b,c,d,*p=b; point(p)
2、;printf(“%c/n“,*p); 程序运行后的输出结果是【 】。 (分数:2.00)A.aB.bC.cD.d4.以下关于宏的叙述中正确的是(分数:2.00)A.宏名必须用大写字母表示B.宏定义必须位于源程序中所有语句之前C.宏替换没有数据类型限制D.宏调用比函数调用耗费时间5.在一个 C 语言程序中( )。(分数:2.00)A.main( )函数必须出现在所有函数之前B.main( )函数可以在任何地方出现C.main( )函数必须出现在所有函数之后D.main( )函数必须出现在固定位置6.有以下程序: main( ) unsigned char a,b; a=4|3; b=4 pri
3、ntf(“%d %d/n”,a,b(; 执行后输出结果是( )。 (分数:2.00)A.7 0B.0 7C.1 1D.43 07.有以下程序: main( ) int f1 (int x, int y) return xy?x:y; int f2 (int x, int y) return xy?y:x; main( ) int a=4,b=3,c=5,d,e,f; d=f1(a,b); d=f1(d,c); e=f2(a,b); e=f2(e,c); f=a+b+c-d-e; printf(“%d,%d,%d/n“,d,f,e); 执行后输出的结果是( )。 (分数:2.00)A.3,4,5
4、B.5,3,4C.5,4,3D.3,5,48.已有定义:int i,a10,*p;,则合法的赋值语句是( )。(分数:2.00)A.p=100;B.p=a5;C.p=a2+2;D.p=a+2;9.当变量 c 的值不为 2、4、6 时,值也为“真”的表达式是( )。(分数:2.00)A.(c= =2)(c= =4)(c= =6)B.(c=2 B.int max(int x,y) int z; z=xy ? x:y; return z; C.max(int x,int y) int z; z=xy?x:y; return(z); D.int max(int x,int y) return(xy?x
5、:y); 15.能将高级语言编写的源程序转换成目标程序的是( )。(分数:2.00)A.编辑程序B.编译程序C.解释程序D.链接程序16.表达式 3.6-52+1.2+52 的值是【 】。(分数:2.00)A.4.3B.4.8C.3.3D.3.817.s12 和 s2 已正确定义并分别指向两个字符串。若要求:当 s1 所指串大于 s2 所指串时,执行语句 S;则以下选项中正确的是 (分数:2.00)A.if(s1s2)S;B.if(strcmp(s1,s2)S;C.if(strcmp(s2,s1)0)S;D.if(strcmp(s1,s2)0)S;18.下列关于栈的描述正确的是【 】。(分数:
6、2.00)A.在栈中能插入元素而不能删除元素B.在栈中只能删除元素而不能插入元素C.栈是特殊的线性表,只能在一端插入或删除元素D.栈是特殊的线性表,只能在一端插入元素,而在另一端删除元素19.有以下程序: main( ) char a=a,b; print(“%c,“,+a); printf(“%c/n“,b=a+); 程序运行后的输出结果是( )。 (分数:2.00)A.b,bB.b,cC.a,bD.a,c20.以下程序的功能是按顺序读入 10 名学生 4 门课程的成绩,计算出每位学生的平均分并输出,程序如下:main( ) int n,k; float score,sum,ave; sum
7、=0.0; for(n=1;n=10;n+) for(k=1;k=4;k+) scanf(“%f“,score);sum+=score; ave=sum/4.0; printf(“NO%d:%f/n“,n,ave); 上述程序运行后结果不正确,调试中发现有条语句出现在程序中的位置不正确。这条语句是( )。 (分数:2.00)A.sum=0.0;B.sum+=score;C.ave=sum/4.0;D.printf(“NO%d:%f/n“,n,ave);21.有以下程序 #include main() char a=4; printf(“%d/n“,a=ay e=f2(f1(a,b),f1(c,
8、d);f=f1(f2(a,b),f2(c,d); g=a+b+c+d-e-f; pintf(“%d,%d,%d/n“,e,f,g); 程序运行后的输出结果是【 】。(分数:2.00)A.4,3,7B.3,4,7C.52,7D.2,5,724.若程序中已包含头文件 stdio.h,以下选项中,正确运用指针变量的程序段是( )。(分数:2.00)A.int *i=NULL; scanf(“%d“,i);B.float *f=NULL; *f=10.5;C.char t=m, *c= *c=D.long *L; L=/0;25.若有代数式根号下 n 的 x 次方+e 的 x 方的绝对值(其中 e 仅
9、代表自然对数的底数,不是变量)则一下能正确表示该代数式的 C 语言表达式的是【 】。(分数:2.00)A.B.C.D.26.以下叙述正确的是( )。(分数:2.00)A.C 语言比其他语言高级B.C 语言可以不用编译就能被计算机识别执行C.C 语言以接近英语国家的自然语言和数学语言作为语言的表达形式D.C 语言出现的最晚、具有其他语言的一切优点27.以下叙述中错误的是【 】。(分数:2.00)A.C 语言源程序经编译后生成后缀为.obj 的目标程序B.C 程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件C.用 C 语言编写的程序称为源程序,它以 ASCII 代码形式存放在一
10、个文本文件中D.C 语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令28.以下与函数 fseek(fp,OL,SEEK_SET)有相同作用的是【 】。(分数:2.00)A.feof(fp)B.ftell(fp)C.fgetc(fp)D.rewind(fp)29.在 Windows 环境下,单击当前应用程序窗口中的“关闭”按钮,其功能是( )。(分数:2.00)A.将当前应用程序转为后台运行B.退出 Windows 后再关机C.退出 Windows 后重新启动计算机D.终止当前应用程序的运行30.有以下程序: #define f(x) x*x main( ) int i; i=
11、f(4+4)/f(2+2); printf(“%d/n”,i); 执行后输出结果是( )。 (分数:2.00)A.28B.22C.16D.431.有以下程序: #includestring.h void f(char *s,char *t) char k; k=*s; +s=*t; *t=k; S+; t-; if(*s) f(s,t); main() char.str10=“abcdefg“,*p; p=str+strlen(str) /2+1; f(p,p-2); printf(“%s/n“,str); 程序运行后的输出结果是【 】。 (分数:2.00)A.abcdefgB.gfedcba
12、C.gbcdefaD.abedcfg32.有以下程序 #include main() char c1,c2,c3,c4,c5,c6; scanf(“cccC“,8az1, t=v;v=w;w=t; main( ) int x=1,y=3,z=2; if(xy) f(x,y); else if(yz) f(y,z); else f(x,z); printf(“%d,%d,%d/n”,x,y,z); 执行后输出结果是( )。 (分数:2.00)A.1,2,3B.3,1,2C.1,3,2D.2,3,134.以下叙述中错误的是【 】。(分数:2.00)A.C 语句必须以分号结束B.复合语句在语法上被看
13、作一条语句C.空语句出现在任何位置都不会影响程序运行D.赋值表达式末尾加分号就构成赋值语句35.有以下程序 main( ) int i=0,s=0; do if(i%2)i+;continue; i+; s+=i; while(i7); printf(“%d/n“,s); 执行后输出的结果是( )。 (分数:2.00)A.16B.12C.28D.2136.以下不合法的数值常量是【 】。(分数:2.00)A.011B.lelC.8.0E0.5D.0xabcd37.在 Windows 环境下,若要将整个屏幕上显示的内容存入剪贴板,可以按( )。(分数:2.00)A.Ctrl+Printscreen
14、 键B.Alt+Printscreen 键C.Shift+Printscreen 键D.Printscreen 键38.从 Windows 环境进入 MSDOS 方式后,返回 Windows 环境的 DOS 命令为( )。(分数:2.00)A.EXITB.QUITC.RETD.MSDOS39.有以下程序: int f(int n) if(n =1)return 1; else return f(n-1)+1; main( ) int i,j=0; for(i=1;i3;i+) j+=f(i); printf(“%d/n“,j); 程序运行后的输出结果是( )。 (分数:2.00)A.4B.3C
15、.2D.140.有以下程序,其中u 表示按无符号整数输出 main() unsigned int X=OXIFFF;* X 的初值为十六进制数 * printf(“un“,X); 程序运行后的输出结果是【 】。 (分数:2.00)A.-1B.65535C.32767D.0XFFFF41.有以下程序 #include main() char p20=a,b,c,d,q=“abc“,r:“abcde“; strcpy(P+strlen(q),r);strcat(p,q); printf(“ddn“,sizeof(p),strlen(p); 程序运行后的输出结果是【 】。 (分数:2.00)A.20
16、9B.99C.2011D.111142.有以下程序(提示:程序中 fseek(fp,-2L*sizeof(int),SEEK_END);语句的作用是使位置指针从文件尾向前移 2*sizeof(int)字节) #include stdio.h main( ) FILE *fp; int i,a4=1,2,3,4,b; fp=fopen(“data.dat“,“wb“); for(i=0;iA.2B.1C.4D.343.对下列二叉树进行前序遍历的结果为【 】。 (分数:2.00)A.DYBEAFCZXB.YDEBFZXCAC.ABCDEFXYZD.ABCDEFXYZ44.有以下程序: main()
17、 int i=1,j=2,k=3; if(i+=1b=1.1;48.以下不合法的用户标识符是【 】。(分数:2.00)A.j2KEYB.DoubleC.4dD.849.若有以下说明和定义 typedefint * INTEGER; INTEGER p,* q; 以下叙述正确的是( )。 (分数:2.00)A.p 是 int 型变量B.p 是基类型为 int 的指针变量C.q 是基类型为 int 的指针变量D.程序中可用 INTEGER 代替 int 类型名50.设有定义 int n1=0,n2,*p= int n1,n2; ch1=getchar( ); ch2=getchar( ); n1=
18、ch1-0; n2=n1*10+(ch2-0); printf(“%d/n”,n2); 程序运行时输入:12,执行后输出结果是 1。 (分数:2.00)填空项 1:_53.下面程序和运行运行结果是 1。 void swap(int * a,int * b) int * t; t=a; a=b; b=t; main2 intx=3,y=5,* p=x,* q=y; swap(p,q); prinff(“%d %d/n“, *p, *q); (分数:2.00)填空项 1:_54.以下程序运行后的输出结果是 1。 void swap(int x,int y) int t; t=x;x=y;y=t;p
19、rintf(“%d%d“,x,y); main2 int a=3,b=4; swap(a,b);pintf(“%d%d“,a,b); (分数:2.00)填空项 1:_55.以下程序运行后的输出结果是 1。 main( ) int a,b,c; a=25; b=025; c=0x25; printf(“%d %d %d/n“,a,b,c); (分数:2.00)填空项 1:_56.设函数 findbig( )已定义为求 3 个数中的最大值。以下程序将利用函数指针调用 findbig 函数。请填空。 main( ) int findbig(int,int,int); int (*f)( ),x,y,
20、z,big; f= 1; scanf(“%d%d%d“, big=(*f)(x,y,z); printf(“big=%d/n“,big); (分数:2.00)填空项 1:_57.下列程序的输出结果是 1。 #include stdio.h void fun(int x) if(x/20) fun(x/2); printf(“%d“,x); main2 fun(3);printf(“/n“); (分数:2.00)填空项 1:_58.在 Windows 环境下,利用菜单命令删除固定硬盘上的文件与文件夹,实际上是将需要删除的文件与文件夹移动到 1 文件夹中。(分数:2.00)填空项 1:_59.以下
21、程序用于判断 a、b、c 能否构成三角形,若能,输出 YES,否则输出 NO。当给 a、b、c 输入三角形三条边长时,确定 a、b、c 能构成三角形的条件是需同时满足三个条件:a+bc,a+cb,b+ca。请填空。 main1 float a,b,C; scanf(“fff“, main( ) int a=3,b=4,c=5,d; d=f(f(3,4),f(3,5); printf(“%d/n“,d); 执行后输出结果是 1。 (分数:2.00)填空项 1:_61.已知字符 A 的 ACSII 码值为 65,以下语句的输出结果是 1。 char ch=B; printf(“%c %d/n”,c
22、h,ch); (分数:2.00)填空项 1:_62.Windows 窗口一般由标题栏、菜单栏、控制按钮等部分组成。为了移动窗口,则要用鼠标拖动 1。(分数:2.00)填空项 1:_国家计算机二级(C)80 答案解析(总分:124.00,做题时间:120 分钟)一、选择题(1-10 题每题 2 分,11-50 题(总题数:50,分数:100.00)1.若有说明:int n=2,*p=n,*q=p;,则以下非法的赋值语句是( )。(分数:2.00)A.p=q;B.*p=q;C.n=*q;D.p=n; 解析:整型数据和指针型数据之间不能进行赋值运算。2.设有定义:intk=0;,以下选项的四个表达式
23、中与其他三个表达式的值不相同的是【 】。(分数:2.00)A.k+ B.k+=lC.+kD.k+l解析:因为“int k=0;“,所以 B)、C)、D)三个选项的表达式的值都等于 1,而 A)选项的表达式的值等于0。这是因为“k+“这个表达式先进行取 k 值的运算,然后是 k 值自加 1。故本题答案为 A)。3.有以下程序: point(char *p)p+=3; main() char b4=a,b,c,d,*p=b; point(p);printf(“%c/n“,*p); 程序运行后的输出结果是【 】。 (分数:2.00)A.a B.bC.cD.d解析:在 C 语言中,函数的参数传递方式采
24、用按值传递,因此不能通过调用函数的方式来改变指针本身的值,只能改变指针所指变量的值。 4.以下关于宏的叙述中正确的是(分数:2.00)A.宏名必须用大写字母表示B.宏定义必须位于源程序中所有语句之前C.宏替换没有数据类型限制 D.宏调用比函数调用耗费时间解析:宏名可以大写,也可以小写。其有效范围为定义命令之后到本源文件结束。宏的调用是字符的替换,没有数据类型限制。5.在一个 C 语言程序中( )。(分数:2.00)A.main( )函数必须出现在所有函数之前B.main( )函数可以在任何地方出现 C.main( )函数必须出现在所有函数之后D.main( )函数必须出现在固定位置解析:6.有
25、以下程序: main( ) unsigned char a,b; a=4|3; b=4 printf(“%d %d/n”,a,b(; 执行后输出结果是( )。 (分数:2.00)A.7 0 B.0 7C.1 1D.43 0解析:7.有以下程序: main( ) int f1 (int x, int y) return xy?x:y; int f2 (int x, int y) return xy?y:x; main( ) int a=4,b=3,c=5,d,e,f; d=f1(a,b); d=f1(d,c); e=f2(a,b); e=f2(e,c); f=a+b+c-d-e; printf(
26、“%d,%d,%d/n“,d,f,e); 执行后输出的结果是( )。 (分数:2.00)A.3,4,5B.5,3,4C.5,4,3 D.3,5,4解析:8.已有定义:int i,a10,*p;,则合法的赋值语句是( )。(分数:2.00)A.p=100;B.p=a5;C.p=a2+2;D.p=a+2; 解析:9.当变量 c 的值不为 2、4、6 时,值也为“真”的表达式是( )。(分数:2.00)A.(c= =2)(c= =4)(c= =6)B.(c=2 B.int max(int x,y) int z; z=xy ? x:y; return z; C.max(int x,int y) int
27、 z; z=xy?x:y; return(z); D.int max(int x,int y) return(xy?x:y); 解析:15.能将高级语言编写的源程序转换成目标程序的是( )。(分数:2.00)A.编辑程序B.编译程序 C.解释程序D.链接程序解析:由高级语言编写的程序称为“源程序”,由二进制代码表示的程序称为“目标程序”,而把源程序 转换成机器能够识别的目标程序是由“编译程序”完成的。16.表达式 3.6-52+1.2+52 的值是【 】。(分数:2.00)A.4.3B.4.8C.3.3D.3.8 解析:这道题要注意 25 的结果是 2,因为运算符两边的数值类型均为整型,故运算
28、结果的数值类型也被认定为整型。17.s12 和 s2 已正确定义并分别指向两个字符串。若要求:当 s1 所指串大于 s2 所指串时,执行语句 S;则以下选项中正确的是 (分数:2.00)A.if(s1s2)S;B.if(strcmp(s1,s2)S;C.if(strcmp(s2,s1)0)S;D.if(strcmp(s1,s2)0)S; 解析:18.下列关于栈的描述正确的是【 】。(分数:2.00)A.在栈中能插入元素而不能删除元素B.在栈中只能删除元素而不能插入元素C.栈是特殊的线性表,只能在一端插入或删除元素 D.栈是特殊的线性表,只能在一端插入元素,而在另一端删除元素解析:栈实际上也是线
29、性表,只不过是一种特殊的线性表。在这种特殊的线性表中,其插入和删除只在线性表的一端进行。 19.有以下程序: main( ) char a=a,b; print(“%c,“,+a); printf(“%c/n“,b=a+); 程序运行后的输出结果是( )。 (分数:2.00)A.b,b B.b,cC.a,bD.a,c解析:20.以下程序的功能是按顺序读入 10 名学生 4 门课程的成绩,计算出每位学生的平均分并输出,程序如下:main( ) int n,k; float score,sum,ave; sum=0.0; for(n=1;n=10;n+) for(k=1;k=4;k+) scanf
30、(“%f“,score);sum+=score; ave=sum/4.0; printf(“NO%d:%f/n“,n,ave); 上述程序运行后结果不正确,调试中发现有条语句出现在程序中的位置不正确。这条语句是( )。 (分数:2.00)A.sum=0.0; B.sum+=score;C.ave=sum/4.0;D.printf(“NO%d:%f/n“,n,ave);解析:本题中 sum 用来保存每位学生的总成绩,所以在计算不同学生的总成绩时,应将 sum 重新赋值 初值 0,即语句 sum=0.0;,它应在第二个 for 语句前执行。21.有以下程序 #include main() char
31、 a=4; printf(“%d/n“,a=ay e=f2(f1(a,b),f1(c,d);f=f1(f2(a,b),f2(c,d); g=a+b+c+d-e-f; pintf(“%d,%d,%d/n“,e,f,g); 程序运行后的输出结果是【 】。(分数:2.00)A.4,3,7 B.3,4,7C.52,7D.2,5,7解析:函数 f1 的功能是返回两个数中比较的值,f2 的功能是返回两个数中比较小的值。 24.若程序中已包含头文件 stdio.h,以下选项中,正确运用指针变量的程序段是( )。(分数:2.00)A.int *i=NULL; scanf(“%d“,i);B.float *f=
32、NULL; *f=10.5;C.char t=m, *c= *c=D.long *L; L=/0; 解析:25.若有代数式根号下 n 的 x 次方+e 的 x 方的绝对值(其中 e 仅代表自然对数的底数,不是变量)则一下能正确表示该代数式的 C 语言表达式的是【 】。(分数:2.00)A.B.C. D.解析:本题主要考查 C 语言的库函数。abs 求整数的绝对值,fabs 求双字节型的绝对值,pow 函数的原形是double pow(double x,double Y),计算 x 的 y 次方;exp 函数的原形是 double exp(double x),求 10 的 x次方;sqrt 函数
33、的原形是 double sqrt(double x),为 x 的平方根。故本题答案为 C)。26.以下叙述正确的是( )。(分数:2.00)A.C 语言比其他语言高级B.C 语言可以不用编译就能被计算机识别执行C.C 语言以接近英语国家的自然语言和数学语言作为语言的表达形式 D.C 语言出现的最晚、具有其他语言的一切优点解析:27.以下叙述中错误的是【 】。(分数:2.00)A.C 语言源程序经编译后生成后缀为.obj 的目标程序B.C 程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件C.用 C 语言编写的程序称为源程序,它以 ASCII 代码形式存放在一个文本文件中D.C
34、 语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令 解析:并不是源程序中的所有行都参加编译。在条件编泽形式下,相关内容只在满足一定条件时才进行编译。选项 D)中的非执行语句不在其范围内。28.以下与函数 fseek(fp,OL,SEEK_SET)有相同作用的是【 】。(分数:2.00)A.feof(fp)B.ftell(fp)C.fgetc(fp)D.rewind(fp) 解析:fseek 函数用于改变文件的位置指针。本题中“fseek(fp,0L,SEEK_SET)“的作用是将位置指针移到文件头。feof 的作用判断文件是否结束,己指到文件的末尾,则返回值为非零,否则为零。
35、ftell 的作用是得到流式文件中的当前位置,用相对于文件开头的位移量来表示。fgets 的作用是指定文件读入一个字符串。 29.在 Windows 环境下,单击当前应用程序窗口中的“关闭”按钮,其功能是( )。(分数:2.00)A.将当前应用程序转为后台运行B.退出 Windows 后再关机C.退出 Windows 后重新启动计算机D.终止当前应用程序的运行 解析:30.有以下程序: #define f(x) x*x main( ) int i; i=f(4+4)/f(2+2); printf(“%d/n”,i); 执行后输出结果是( )。 (分数:2.00)A.28 B.22C.16D.4
36、解析:31.有以下程序: #includestring.h void f(char *s,char *t) char k; k=*s; +s=*t; *t=k; S+; t-; if(*s) f(s,t); main() char.str10=“abcdefg“,*p; p=str+strlen(str) /2+1; f(p,p-2); printf(“%s/n“,str); 程序运行后的输出结果是【 】。 (分数:2.00)A.abcdefgB.gfedcba C.gbcdefaD.abedcfg解析:本程序的作是将字符串 str 倒序。语句“p=str+strlen(str)/2+1;“用
37、于将指针变量 p 指向 e 字符所在的存储单元,p-2 指向了 c 字符所在的存储单元,在函数 f 中将这两个存储单元的内容交换,并使得 f 函数中指向 c 字符的指针变量 s 加 1。指向 c 字符的指针变量 t 减 1,然后继续将 s 和 t 指向的存储单元的内容进行交换,直到 s 指向的存储单元的内容为空为止。所以本题程序输出的结果是字符串“abcdefg“的倒序形式“gfedcba“。 32.有以下程序 #include main() char c1,c2,c3,c4,c5,c6; scanf(“cccC“,8az1, t=v;v=w;w=t; main( ) int x=1,y=3,
38、z=2; if(xy) f(x,y); else if(yz) f(y,z); else f(x,z); printf(“%d,%d,%d/n”,x,y,z); 执行后输出结果是( )。 (分数:2.00)A.1,2,3B.3,1,2C.1,3,2 D.2,3,1解析:34.以下叙述中错误的是【 】。(分数:2.00)A.C 语句必须以分号结束B.复合语句在语法上被看作一条语句C.空语句出现在任何位置都不会影响程序运行 D.赋值表达式末尾加分号就构成赋值语句解析:“空语句出现在任何位置都不会影响程序运行“这句话是错误的,例如在 for 循环中,循环条件语句为空时,则不判断循环条件,循环将无终止
39、地进行下去,导致了此循环为死循环。 35.有以下程序 main( ) int i=0,s=0; do if(i%2)i+;continue; i+; s+=i; while(i7); printf(“%d/n“,s); 执行后输出的结果是( )。 (分数:2.00)A.16 B.12C.28D.21解析:36.以下不合法的数值常量是【 】。(分数:2.00)A.011B.lelC.8.0E0.5 D.0xabcd解析:数值常量包括整型常量和字符常量。在用字母 e(或 E)表示指数形式的实型常量时,字母 e(或 E)之前必须有数字且字母 e(或 E)后面的指数必须为整数。37.在 Windows
40、 环境下,若要将整个屏幕上显示的内容存入剪贴板,可以按( )。(分数:2.00)A.Ctrl+Printscreen 键B.Alt+Printscreen 键C.Shift+Printscreen 键D.Printscreen 键 解析:38.从 Windows 环境进入 MSDOS 方式后,返回 Windows 环境的 DOS 命令为( )。(分数:2.00)A.EXIT B.QUITC.RETD.MSDOS解析:39.有以下程序: int f(int n) if(n =1)return 1; else return f(n-1)+1; main( ) int i,j=0; for(i=1;
41、i3;i+) j+=f(i); printf(“%d/n“,j); 程序运行后的输出结果是( )。 (分数:2.00)A.4B.3 C.2D.1解析:第一次调用 f( )函数,返回值为 1,第二次调用 f( )函数,牵涉到函数的递归调用,返回值为 2。40.有以下程序,其中u 表示按无符号整数输出 main() unsigned int X=OXIFFF;* X 的初值为十六进制数 * printf(“un“,X); 程序运行后的输出结果是【 】。 (分数:2.00)A.-1B.65535 C.32767D.0XFFFF解析:“u“格式符用来以十进制形式输出无符号整型变量,其取值范围是 065
42、535。,本题中无符号整型变量 x=OXFFFF(十六进制)表示的是无符号整型变量的最大值 65535。41.有以下程序 #include main() char p20=a,b,c,d,q=“abc“,r:“abcde“; strcpy(P+strlen(q),r);strcat(p,q); printf(“ddn“,sizeof(p),strlen(p); 程序运行后的输出结果是【 】。 (分数:2.00)A.209B.99C.2011 D.1111解析:函数 strlen()返回的是数组的实际长度,而 sizeof 返回的是数组定义的总长度。因为字符数组p20定义为 20 字节长度,所以
43、 sizeof(p)的值为 20。“strcpy(p+strlen(q),r);“语句的功能把字符数组r 拷贝到字符数组 p 从 p3开始到 p7的位置中,这时字符数组 p 的有效字符长度为 8。然后再执行“streat(p,q);“语句(字符串连接),即把字符数组 q 连接到字符数组 p 后面,这时字符数组 p 的有效长度为 11。42.有以下程序(提示:程序中 fseek(fp,-2L*sizeof(int),SEEK_END);语句的作用是使位置指针从文件尾向前移 2*sizeof(int)字节) #include stdio.h main( ) FILE *fp; int i,a4=1
44、,2,3,4,b; fp=fopen(“data.dat“,“wb“); for(i=0;iA.2B.1C.4D.3 解析:43.对下列二叉树进行前序遍历的结果为【 】。 (分数:2.00)A.DYBEAFCZXB.YDEBFZXCAC.ABCDEFXYZ D.ABCDEFXYZ解析:二叉树前序遍历的含义是:首先访问根结点,然后按前序遍历根结点的左子树,最后按前序遍历根结点的右子树,前序遍历二叉树的过程是一个递归的过程。根据题目中给出的二叉树的结构可知前序遍历的结果是:ABDYECFXZ。44.有以下程序: main() int i=1,j=2,k=3; if(i+=1b=1.1;解析:本题考
45、查的是数据类型的定义并赋值,选项 A 中对变量声明类型且赋值的情况是不允许出现的,必须单独定义其类型。选项 B 给实型变量赋值时不用引号,也不能将地址赋予实型变量:C 语言允许在一个类型说明符后说明多个相同类型的变量,各变量之间要用逗号(,)隔开,而不是用分号(;)隔开;在计算机存储字符时将字符相应的 ASCII 码以其对应的二进制进行存放,选项 B 中的定义是合法的,故选项 B 正确。48.以下不合法的用户标识符是【 】。(分数:2.00)A.j2KEYB.DoubleC.4d D.8解析:C 语言规定,标志符由字母、数字或下划线组成,它的第一个字符必须是字母或下划线。49.若有以下说明和定
46、义 typedefint * INTEGER; INTEGER p,* q; 以下叙述正确的是( )。 (分数:2.00)A.p 是 int 型变量B.p 是基类型为 int 的指针变量 C.q 是基类型为 int 的指针变量D.程序中可用 INTEGER 代替 int 类型名解析:语句 typedef int * INTEGER;定义了一个新类型名 INTEGER,因此语句 INTEGERp,* q;就相当 于 int * p,* * q;。50.设有定义 int n1=0,n2,*p= int n1,n2; ch1=getchar( ); ch2=getchar( ); n1=ch1-0; n2=n1*10+(ch2-0); printf(“%d/n”,n2); 程序运行时输入:12,执行后输出结果是 1。 (分数:2.00)填空项 1:_ (正确答案:12)解析:53.下面程序和运行运行结果是 1。 void swap(int * a,int * b) int * t; t=a; a=b; b=t; main2 intx=3,y=5,* p=x,* q=y; sw