1、高级语言程序设计自考题-10 及答案解析(总分:101.00,做题时间:90 分钟)一、单项选择题(总题数:15,分数:30.00)1.执行下列程序段后输出的结果是( ) int x,y,z=1; for(x=1,y=-1;xy;x+,y-)z+; printf(“%d/n“,z); A1 B2 C5 D6(分数:2.00)A.B.C.D.2.设 int a=2,b=3,x,y;,则能正确执行的语句是( ) Ascanf(“%d,%d“,x-y,x+y); Bprintf(“%d/n“,a%b ); Cprintf(“%f/n“,a+b ); Dscanf(“%d,%d“,x,y);(分数:2
2、.00)A.B.C.D.3.若 x 是整型变量,pb 是基本类型为整型的指针变量,则正确的赋值表达式为( ) Apb=x Bpb=x C*pb=x D*pb=*x(分数:2.00)A.B.C.D.4.在 C 语言的语句中,用作判断的表达式为( )A关系表达式 B逻辑表达式C算术表达式 D任意表达式(分数:2.00)A.B.C.D.5.下列函数返回值的数据类型是( )fun (int x)int y;y=4*x-5;return y;Avoid BintCfloat D不确定(分数:2.00)A.B.C.D.6.设有数组定义:char array=“Asia“;则数组 array所占用的空间为(
3、 ) A4 个字节 B5 个字节 C6 个字节 D7 个字节(分数:2.00)A.B.C.D.7.设 a=5,b=3;,执行语句“printf(“%d,%d,(a,b ),(b,a );“输出是( ) A5,3 B3,5 C5,5 D3,3(分数:2.00)A.B.C.D.8.设 int a=0;,错误的语句是( ) A+a; Ba+; Ca=-a; D(-a )+;(分数:2.00)A.B.C.D.9.下列程序段执行后的输出结果是( )int k=4,a=3,b=2,c=1;printf(“%d/n“,ka?k:cb?c:a );A1 B2C3 D4(分数:2.00)A.B.C.D.10.设
4、有 int a=10,11,12,*p=a0;,则执行完*p+;*p+=1;后 a0,a1,a2的值依次是( ) A10,11,12 B11,12,12 C10,12,12 D11,11,12(分数:2.00)A.B.C.D.11.若有宏定义:#define MOD(x,y)x%y 则执行下面语句后的输出结果是 int a=13,b=96; printf(“%d/n“,MOD(b,a );( ) A1 B2 C5 D6(分数:2.00)A.B.C.D.12.设 int a10,*p=a; 则对数组的正确引用是( ) Aap Bpa C*(p+2) Dp+2(分数:2.00)A.B.C.D.13
5、.设 int a=1,b=2,c=3,d=4,f;,执行语句 f=(a!=b )?c+:d+;后 f 的值是( ) A2 B3 C4 D5(分数:2.00)A.B.C.D.14.设 char c5=a,b,/0,C,/0);则 printf(“%s“,c );的输出是( ) Aab Bab Cabc D“ab/0c/(分数:2.00)A.B.C.D.15.文件使用方式“rb+”的含义是( )A对文本文件只读 B对文本文件读和写C对二进制文件读和写 D对二进制文件只写(分数:2.00)A.B.C.D.二、填空题(总题数:10,分数:20.00)16.设 int a23=3,4,5,6,7,8;则
6、数组元素 a10的值为 1。(分数:2.00)填空项 1:_17.以下程序的输出结果是_。 #includestdioh main() int i; for(i=1;i=5;i+)(if(i%2)printf(“*“); else continue; printf(“#“); printf(“$/n“); (分数:2.00)填空项 1:_18.设 int x=1,y=1;,则执行表达式-x,则能正确执行的语句是( ) Ascanf(“%d,%d“,x-y,x+y); Bprintf(“%d/n“,a%b ); Cprintf(“%f/n“,a+b ); Dscanf(“%d,%d“,x,y);
7、(分数:2.00)A.B. C.D.解析:3.若 x 是整型变量,pb 是基本类型为整型的指针变量,则正确的赋值表达式为( ) Apb=x Bpb=x C*pb=x D*pb=*x(分数:2.00)A.B. C.D.解析:4.在 C 语言的语句中,用作判断的表达式为( )A关系表达式 B逻辑表达式C算术表达式 D任意表达式(分数:2.00)A.B.C.D. 解析:5.下列函数返回值的数据类型是( )fun (int x)int y;y=4*x-5;return y;Avoid BintCfloat D不确定(分数:2.00)A.B. C.D.解析:解析 本题主要考查的知识点为默认返回值类型。要
8、点透析 在 C 语言中,当函数类型为 int 时,函数类型名 int 可以不写,系统默认为 int。6.设有数组定义:char array=“Asia“;则数组 array所占用的空间为( ) A4 个字节 B5 个字节 C6 个字节 D7 个字节(分数:2.00)A.B. C.D.解析:7.设 a=5,b=3;,执行语句“printf(“%d,%d,(a,b ),(b,a );“输出是( ) A5,3 B3,5 C5,5 D3,3(分数:2.00)A.B. C.D.解析:8.设 int a=0;,错误的语句是( ) A+a; Ba+; Ca=-a; D(-a )+;(分数:2.00)A.B.
9、C.D. 解析:9.下列程序段执行后的输出结果是( )int k=4,a=3,b=2,c=1;printf(“%d/n“,ka?k:cb?c:a );A1 B2C3 D4(分数:2.00)A. B.C.D.解析:解析 用条件运算符构成的表达式称为条件表达式,格式为:表达式 17 表达式 2。表达式 3。条件表达式的值与表达式 1 的值有关,若表达式 1 的值为非 0(真),则条件表达式的值为表达式 2 的值;否则为表达式 3 的值。条件运算符的结合性是自右向左的。结合本题,先计算右面的表达式“cb? c:a”的值,其值为 1,再计算左面表达式“ka? k:1”的值,其值为 1,故本题选 A。1
10、0.设有 int a=10,11,12,*p=a0;,则执行完*p+;*p+=1;后 a0,a1,a2的值依次是( ) A10,11,12 B11,12,12 C10,12,12 D11,11,12(分数:2.00)A.B.C. D.解析:解析 “+“和“*“具有相同的优先级别,运算时都是采用自右向左结合运算的方式。“*p+“在运算时先运算“*p“再运算“p+“。在运算“*p+=1“时,P 已做过一次自加 1 运算,而“*“运算的优先于“+-“运算;故“*p+=1“等同于 a2+=1。11.若有宏定义:#define MOD(x,y)x%y 则执行下面语句后的输出结果是 int a=13,b=
11、96; printf(“%d/n“,MOD(b,a );( ) A1 B2 C5 D6(分数:2.00)A.B.C. D.解析:12.设 int a10,*p=a; 则对数组的正确引用是( ) Aap Bpa C*(p+2) Dp+2(分数:2.00)A.B.C. D.解析:13.设 int a=1,b=2,c=3,d=4,f;,执行语句 f=(a!=b )?c+:d+;后 f 的值是( ) A2 B3 C4 D5(分数:2.00)A.B. C.D.解析:14.设 char c5=a,b,/0,C,/0);则 printf(“%s“,c );的输出是( ) Aab Bab Cabc D“ab/
12、0c/(分数:2.00)A.B. C.D.解析:15.文件使用方式“rb+”的含义是( )A对文本文件只读 B对文本文件读和写C对二进制文件读和写 D对二进制文件只写(分数:2.00)A.B.C. D.解析:二、填空题(总题数:10,分数:20.00)16.设 int a23=3,4,5,6,7,8;则数组元素 a10的值为 1。(分数:2.00)填空项 1:_ (正确答案:6)解析:17.以下程序的输出结果是_。 #includestdioh main() int i; for(i=1;i=5;i+)(if(i%2)printf(“*“); else continue; printf(“#“
13、); printf(“$/n“); (分数:2.00)填空项 1:_ (正确答案:*#*#*#$)解析:解析 #includestdioh main() int i; for(i=1;i=5;i+)/*i 从 1 到 5 进行 5 次循环*/ if(i%2)printf(“*“);/*如果 i 是奇数则打印输出“*“*/ else continue; printf(“#“);/*如果 i 是偶数则打印输出“#“*/ printf(“$n“);/*结尾打印“$“*/ 18.设 int x=1,y=1;,则执行表达式-x&y+后,y 的值是 1。(分数:2.00)填空项 1:_ (正确答案:1)解
14、析:19.若已知 a=10、b=20,则表达式!ab 的值为 1。(分数:2.00)填空项 1:_ (正确答案:1)解析:20.下面程序的输出是_。 #includestdioh main() char x=0.40; printf(“%d/n“,x=x1);(分数:2.00)填空项 1:_ (正确答案:0)解析:21.函数中的形参和调用时的实参都是数组名时,传递方式为 1。(分数:2.00)填空项 1:_ (正确答案:地址传递)解析:22.设 char ch;,判断 ch 为数学字符的逻辑表达式是 1。(分数:2.00)填空项 1:_ (正确答案:ch=0&ch=9)解析:23.下面程序段的
15、输出结果是_。 #includestdioh int b=1: int func(int *a ) *a+=b;return(*a );) main() int a=2,res=1; res+=func(a ); printf(“%d%d/n“,a,res);(分数:2.00)填空项 1:_ (正确答案:3 4)解析:解析 #includestdioh int b=1; int func(int *a )/*参数传递采用地址传递的方式,函数本身可改变函数体外的变量的值*/ *a+=b;return(*a ); main() int a=2,res=1; res+=func(a );/*根据函数
16、“func()“的定义,实参必须是变量的地址*/ printf(“%d%d/n“,a,res);/*“main()“函数内的变量 a 的值被改变*/24.设 int n;,“n 的值能同时被 3 和 5 整除”的逻辑表达式是 1。(分数:2.00)填空项 1:_ (正确答案:n%3=0&n%5=0(或!(n%3)&!(n%5))解析:25.文件定位函数包含在头文件 1 中。(分数:2.00)填空项 1:_ (正确答案:stdioh)解析:三、程序分析题(总题数:4,分数:17.00)26.struct Hint x;int *y; xy2;void f(struct H *p)(p+1)-x=
17、10;(*P).x=20;(*p).y=&(*(p+1).x);(*(P+1).y=&(p-x);main()struct H *q=xy;f(q);printf(“%d,%d/n“,*(q-y),*(xy0.y);(分数:4.00)_正确答案:(10,10)解析:27.struct porb char*name; int age; s=“LiHua“,18,“WangXin“,25,“LiuGuo“,21; #define N(sizeof(s)/sizeof(s0) void f(struct porb a,int n); main() f(s,N); void f(struct porb
18、 a,int n) int i; for(i=0;in;i+) printf(“%s:d/n“,ainame,aiage); (分数:5.00)_正确答案:(LiHua:18 WangXin:25 LiuGuo:21)解析:28.main()int x36=1,2,3,4,5,6,7,8,9,(*P)6=x,s=0,k;for(k=0;k6;k+)s=s+*(*(p+1)+k);printf(“%d/n“,s);(分数:4.00)_正确答案:(15)解析:29.s(int a )static int b=10:if(a%2=1)return(+b );else return(+a );void
19、 main()int i;for(i=0;i3;i+)printf(“%d/t“,s(i);printf(“/n“);(分数:4.00)_正确答案:(1 11 3)解析:四、程序填充题(总题数:3,分数:18.00)30.下面程序把从终端读入的文本(用“作为文本结束的标志)复制到一个名为 bidat 的新文件中,请填空。 #includestdioh FILE *fp; main() char ch; if(fp=_)=NULL)/*第一空*/ exit(0); while(_)!=)/*第二空*/ fputc(ch,fp); _;/*第三空*/ (分数:6.00)填空项 1:_ (正确答案:
20、fopen(“bi.dat“,“W“)/*第一空。语句“if(fp=_)=NULL)“的用意是测定打开文件是否成功,fp 所获得的值是文件 bidat 的首地址。*/ ch=getchar()/*第二空。语句“while(_)!=)“是为了测试文本是否结束,变量 ch 获得的是从终端设备获得的字符*/ fclose(fp)/*第三空。处理完成后关闭该文件*/)解析:31.以下程序的功能是从键盘上输入若干个字符(以回车键作为结束)组成一个字符串存入一个字符数组,然后输出该字符数组中的字符串。main()char str51,*sptr;int i;for(i=0;i50;i+)stri=getc
21、har();if(str j=/n)_;stri:_;sptr=str;while(*sptr)putchar(*sptr_);(分数:6.00)填空项 1:_ (正确答案:break/0+)解析:32.下面程序的功能是:先从键盘上输入一个 3 行 3 列矩阵的各个元素的值,然后输出主对角线之和。 #includestdioh main() int a33,sum; int i,j; _;/*第一空*/ for(i=0;i3;i+) for(_)/*第二空*/ scanf(“%d“,aij); for(i=0;i3;i+) sum=_;/*第三空*/ printf(“sum=%d/n“,sum
22、); (分数:6.00)填空项 1:_ (正确答案:sum=0/*第一空。对和变量 sum 进行初始化。*/ j=0;j3;j+/*第二空。对数组元素的初始化过程,定义列宽度。*/ sum+aii/*第三空。对对角线数组元素进行求和。*/)解析:五、程序设计题(总题数:2,分数:16.00)33.采用递归调用的算法编写一个计算 x 的 n 次方的函数(不用写主函数调用)。(分数:8.00)_正确答案:(double power(double x,int n) iif(n=0)return(1);/*当 n=0 时返回值 1*/ else return(x*power(x,n-1);/*递归调用函数 power 本身,整个递归调用过程的操作请参见课本。*/ )解析:34.根据下列计算公式写出函数,将华氏温度(F)转化为摄氏温度(C )。公式: (分数:8.00)_正确答案:(float change(float F)float C;C=5*(F-32)/9;return C;void main()float F;scanf(“%f“,&F);printf(“F=%.2f C=%.2f/n“,F,change(F);)解析: