1、高级语言程序设计自考题-23 及答案解析(总分:100.00,做题时间:90 分钟)一、B单项选择题/B(总题数:15,分数:30.00)1.以下选择项中,能用作数据常量的是_ A.0118 B.3.2e3.2 C.0331 D.217L(分数:2.00)A.B.C.D.2.以下定义语句中正确的是_ A.int a=b=10; B.char a=65+1,b=c; C.double b=10.0;a=7.2 D.flaot a=1,*b=(分数:2.00)A.B.C.D.3.当用户要求输入的字符串中有空格时,应使用的输入函数是_ A.scanf() B.getchar() C.gets() D
2、.getc()(分数:2.00)A.B.C.D.4.以下叙述中错误的是_ A.可以通过 typedef 增加新的类型 B.可以用 typedef 将已存在的类型用一个新的名字来代表 C.用 typedef 定义新的类型名后,原有类型名仍有效 D.用 typedef 可以为各种类型起别名,但不能为变量起别名(分数:2.00)A.B.C.D.5.数字字符 0 的 ASCII 值为 48,若有以下程序:main()char a=1,b=2;printf(“%c“,b+);printf(“%d/n“,b-a);程序运行后的输出结果是_ A.3,2 B.50,2 C.2,2 D.3,50(分数:2.00
3、)A.B.C.D.6.设有如下程序段:char a10=“beijing“,*p;p=a;则执行 p=a;语句后,以下叙述正确的是_ A.可以用*p 表示 a0 B.a 数组中元素的个数和 p 所指字符串长度相等 C.a 和 p 都是指针变量 D.数组 a 中的内容和指针变量 p 中的内容相等(分数:2.00)A.B.C.D.7.以下说法正确的是_ A.break 只能在循环体中使用 B.continue 只能在循环体中使用 C.break 不能在循环体中使用 D.break 只能在 switch 语句中使用(分数:2.00)A.B.C.D.8.有以下程序:#includestdio.h#in
4、cludestring.hmain()char s10=“ABCD“;printf(“%d,%d“,strlen(s),sizeof(s);程序运行后的输出结果是_ A.7,4 B.4,10 C.5,4 D.10,10(分数:2.00)A.B.C.D.9.下面结构体的定义语句中,错误的是_ A.struct ordint x;char y;int z;struct ord STR; B.strctint x;char y;int z;STR; C.struct ordint x;char y;int z;STR; D.struct ordint x;char y;int z;struct or
5、d STR;(分数:2.00)A.B.C.D.10.有以下程序:#includestdio.h#define PT 4.5;#define s(x)PT*x*x;main()int a=1,b=2;printf(“%4.1f/n“,s(a+b);输出结果为_ A.8.5 B.40.5 C.程序有错 D.18.0(分数:2.00)A.B.C.D.11.以下不正确的描述是_ A.调用函数时,实参与形参可共用内存单元 B.调用函数时,实参可以是表达式,也可以是变量 C.调用函数时,实参与形参的类型应一致 D.调用函数时,将为形参分配内存单元(分数:2.00)A.B.C.D.12.有以下程序:main
6、()int i,s=0;for(i=1;i10;i+=2)s+=i+1;printf(“%d/n“,s);程序执行后的输出结果是_ A.自然数 19 的累加和 B.自然数 19 中的奇数之和 C.自然数 110 的累加和 D.自然数 110 中的偶数之和(分数:2.00)A.B.C.D.13.有以下程序:#includestdio.hmain()unsigned char a,b;a=5|3;b=5printf(“%d%d/n“,a,b);执行后的输出结果是_ A.1 1 B.0 7 C.7 1 D.43 0(分数:2.00)A.B.C.D.14.函数调用语句 fseek(fp,-20L,1)
7、;的含义是_ A.将文件位置指针移动到离文件头 20 个字节处 B.将文件位置指针从当前位置向后移动 20 个字节 C.将文件位置指针从文件末尾处向前移 20 个字节 D.将文件位置指针移动到离当前位置 20 个字节处(分数:2.00)A.B.C.D.15.若有以下语句:char *apple=“fortran“,“basic“,“C“,“java“;char *q;q=apple+3则语句 printf(“%c/n“,*q);的输出是_ A.q 的值 B.字符串“C” C.c=(a%11)+(b=3);(分数:2.00)填空项 1:_19.以下程序中循环体的执行次数是_。 a=10;b=0;
8、 dob+=2;a-=2+b; while(a=0);(分数:2.00)填空项 1:_20.设有下列运算符:,+,/, int i=0; while(applei!=e)i+; printf(“%c“,apple+i);(分数:2.00)填空项 1:_22.设定义以下函数:fun(int *p)return *p;,该函数返回的是_。(分数:2.00)填空项 1:_23.条件运算符表达式:条件 1?条件 2:条件 3,当条件 1 值为 0 时,运行的是_。(分数:2.00)填空项 1:_24.如果函数甲调用函数乙,函数乙又调用函数丙,这叫_;函数甲自己调用自己,这叫_。(分数:2.00)填空项
9、 1:_25.写出 a 大于 b 的偶数的表达式_。(分数:2.00)填空项 1:_三、B程序分析题/B(总题数:4,分数:16.00)26.#includestdio.h void prty(int *x) printf(“%d/n“,+%x); main() int a=5; prty( printf(“%d/n“,a); (分数:4.00)_27.main() int i=0,s=0; do if(i%2)i+,continue; i+; s+=i; while(i7); printf(“%d/n“,s); (分数:4.00)_28.#includestdio.h main() int
10、a32=1,2,3,4,5,6,i,j,s=0; for(i=0;i3;i+) for(j=0;j2;j+) s+=aij; printf(“%d/n“,s); (分数:4.00)_29.#define N 10 #define s(x)x*x-5 #define f(x)(x*x)*s(x) main() int a,b; a=1000/s(N); b=1000/f(N); printf(“%d,%d/n“,a,b); (分数:4.00)_四、B程序填充题/B(总题数:3,分数:18.00)30.以下程序的功能输入一个无符号整数,然后按用户输入的代号,分别以十进制(代号 A),八进制(代号B
11、)和十六进制(代号 C)输出。 #includestdio.h main() unsigned x; char c; scanf(“%d,%c“, switch(c) caseA:printf(“%d“,x);_;/*第一空*/ caseB:printf(_);break; /*第二空*/ caseC:printf(“%x“,x);break; /*第三空*/ _printf(“input error“); (分数:6.00)填空项 1:_31.下面程序的作用是求满足以下算式的 x、y、z 的值,请在“_”处填入正确的内容。 (分数:6.00)填空项 1:_32.下面程序是要建立一个文本文件
12、data1,从键盘输入一个实数,用 fwrite 函数写入文件 dat-a1 中。输入数字 0 则结束。 #includestdio.h #includestdlib.h main() _ /*第一空*/ float a; if(fp=fopen(“datal“,“w“)=NULL) printf(“can not open the file!“);exit(0); while(1) scanf(“%f“, _ /*第二空*/ _ /*第三空*/ fclose(fp) (分数:6.00)填空项 1:_五、B程序设计题/B(总题数:2,分数:16.00)33.用当型循环结构求出 1+2+3+50
13、 的和。(分数:8.00)_34.(1)编写一个计算梯形面积的函数。函数头是:float area(noat s,float x,noat h)其中变量 s、x和 h 分别表示梯形的上底、下底和高。 (2)主函数从键盘输入梯形的上底、下底和高的值,通过调用上述函数输出梯形面积(保留小数点后两位)。(分数:8.00)_高级语言程序设计自考题-23 答案解析(总分:100.00,做题时间:90 分钟)一、B单项选择题/B(总题数:15,分数:30.00)1.以下选择项中,能用作数据常量的是_ A.0118 B.3.2e3.2 C.0331 D.217L(分数:2.00)A.B.C.D. 解析:考点
14、 对各种类型数据常量的了解 解析 A 选项中是八进制常量的表示方法,但在八进制中不能含有数字 8,所以 A 错;B 选项中 e 后面应该是整数不能是小数 3.2,所以 B 错;C 选项中应该是以数字0开始,而不是以字母o开始;D 选项 217L 表 示 217 是长整型,合法。2.以下定义语句中正确的是_ A.int a=b=10; B.char a=65+1,b=c; C.double b=10.0;a=7.2 D.flaot a=1,*b=(分数:2.00)A.B. C.D.解析:考点 定义语句的规则 解析 如果要一次进行多个变量的定义,则在它们之间要用逗号隔开,因此 A,C 错;D 中变
15、量 c 是一个浮点型指针,它只能指向一个浮点型数据,不能指向指针变量 b。所以正确答案是 B。3.当用户要求输入的字符串中有空格时,应使用的输入函数是_ A.scanf() B.getchar() C.gets() D.getc()(分数:2.00)A.B.C. D.解析:考点 输入函数的使用 解析 scanf 函数会将空格视为分隔符;getchar 函数只能输入单个字符;getc 函数是文件操作函数;gets 函数输入字符串时,输入的空格键被视为字符串的一个字符。4.以下叙述中错误的是_ A.可以通过 typedef 增加新的类型 B.可以用 typedef 将已存在的类型用一个新的名字来代
16、表 C.用 typedef 定义新的类型名后,原有类型名仍有效 D.用 typedef 可以为各种类型起别名,但不能为变量起别名(分数:2.00)A. B.C.D.解析:考点 关键字 typedef 解析 关键字 typedef 的作用是将 C 语言中已有的数据类型作置换,并不是增加新的类型。5.数字字符 0 的 ASCII 值为 48,若有以下程序:main()char a=1,b=2;printf(“%c“,b+);printf(“%d/n“,b-a);程序运行后的输出结果是_ A.3,2 B.50,2 C.2,2 D.3,50(分数:2.00)A.B.C. D.解析:考点 字符常量的特性
17、 解析 一个字符常量也可看成“整型常量”其值为其 ASCII 值。语句蹦Printf(“%c“,b+);中 b+是先返回后自增,所以执行完该语句后,输出结果是 2,变量 b 的值为3;printf(“%d/n“,b-a);b=“3”,ASCII 值 为 51,a=1,ASCII 值为 49,所以 b-a:51-49=2。6.设有如下程序段:char a10=“beijing“,*p;p=a;则执行 p=a;语句后,以下叙述正确的是_ A.可以用*p 表示 a0 B.a 数组中元素的个数和 p 所指字符串长度相等 C.a 和 p 都是指针变量 D.数组 a 中的内容和指针变量 p 中的内容相等(
18、分数:2.00)A. B.C.D.解析:考点 指针的使用 解析 p=a;后,指针 p 指向 a 的首地址,*p=a0;中,p 是字符串指针,所指字符串为“beijing“,其长度为 7。而数组 a 中元素的个数为 10,因此 B 和 D 错;a 是数组不是指针变量,所以 C 错。7.以下说法正确的是_ A.break 只能在循环体中使用 B.continue 只能在循环体中使用 C.break 不能在循环体中使用 D.break 只能在 switch 语句中使用(分数:2.00)A.B. C.D.解析:考点 continue 和 break 的使用范围 解析 continue 语句的功能是重新
19、开始循环,所以只能在循环体内使用。8.有以下程序:#includestdio.h#includestring.hmain()char s10=“ABCD“;printf(“%d,%d“,strlen(s),sizeof(s);程序运行后的输出结果是_ A.7,4 B.4,10 C.5,4 D.10,10(分数:2.00)A.B. C.D.解析:考点 strlen()和 sizeof()函数 解析 strlen()用来返回字符串的长度,而 sizeof()返回的是一个对象或者类型所占的内存字节数,即数组所占内存。9.下面结构体的定义语句中,错误的是_ A.struct ordint x;char
20、 y;int z;struct ord STR; B.strctint x;char y;int z;STR; C.struct ordint x;char y;int z;STR; D.struct ordint x;char y;int z;struct ord STR;(分数:2.00)A.B.C.D. 解析:考点 结构体的定义 解析 定义结构体变量有三种方式:先声明结构体类型,再定义变量名,如 A 项;在声明类型的同时定义变量,如 C 项;直接定义结构体类型变量,如 B 项。10.有以下程序:#includestdio.h#define PT 4.5;#define s(x)PT*x*
21、x;main()int a=1,b=2;printf(“%4.1f/n“,s(a+b);输出结果为_ A.8.5 B.40.5 C.程序有错 D.18.0(分数:2.00)A.B.C. D.解析:考点 宏定义 解析 宏定义不是 C 语句,末尾不需要分号,语句 printf(“%4.1f/n“,s(a+b);展开后为 printf(“%4.1f/n“,4.5;*a+b*a+b;);所以程序会出现错误。11.以下不正确的描述是_ A.调用函数时,实参与形参可共用内存单元 B.调用函数时,实参可以是表达式,也可以是变量 C.调用函数时,实参与形参的类型应一致 D.调用函数时,将为形参分配内存单元(分
22、数:2.00)A. B.C.D.解析:考点 函数参数的传递 解析 在调用函数时,系统首先为函数的形参分配存储空间;实参可以是变量、变量、表达式;实参与形参的类型应相同或兼容;调用结束后,形参单元被释放,实参仍保留,所以无法共用内存单元。12.有以下程序:main()int i,s=0;for(i=1;i10;i+=2)s+=i+1;printf(“%d/n“,s);程序执行后的输出结果是_ A.自然数 19 的累加和 B.自然数 19 中的奇数之和 C.自然数 110 的累加和 D.自然数 110 中的偶数之和(分数:2.00)A.B.C.D. 解析:考点 循环语句 解析 循环条件是 i10;
23、i 每次都以 2 增加,看着应该是奇数相加,但s+=i+1,使奇数变偶数,其中 s+=i+1 展开为 s=s+(i+1)。13.有以下程序:#includestdio.hmain()unsigned char a,b;a=5|3;b=5printf(“%d%d/n“,a,b);执行后的输出结果是_ A.1 1 B.0 7 C.7 1 D.43 0(分数:2.00)A.B.C. D.解析:考点 按位或运算符|和按位与运算符中 fp 代表文件指针,-20L 代表位移量,正数为向前移动,负数为向后移动,1 代表以当前位置为起点;如果是 0,则以文件的开始为起点,2 则代表以文件末尾为起点。15.若有
24、以下语句:char *apple=“fortran“,“basic“,“C“,“java“;char *q;q=apple+3则语句 printf(“%c/n“,*q);的输出是_ A.q 的值 B.字符串“C” C.c=(a%11)+(b=3);(分数:2.00)填空项 1:_ (正确答案:3)解析:考点 算术表达式和赋值表达式 解析 b 在第一个式子中没被赋值,仍为 9。第二个式子中,b被赋值为 3。19.以下程序中循环体的执行次数是_。 a=10;b=0; dob+=2;a-=2+b; while(a=0);(分数:2.00)填空项 1:_ (正确答案:3)解析:考点 do-while
25、循环 解析 循环结束的条件是 a0。20.设有下列运算符:,+,/, int i=0; while(applei!=e)i+; printf(“%c“,apple+i);(分数:2.00)填空项 1:_ (正确答案:f)解析:考点 while 循环和一维数组元素的引用 解析 while 循环结束的条件是 applei=e。22.设定义以下函数:fun(int *p)return *p;,该函数返回的是_。(分数:2.00)填空项 1:_ (正确答案:形参 p 所指存储单元中的值)解析:考点 取值运算符 解析 *p 代表的是形参所指单元中的值。23.条件运算符表达式:条件 1?条件 2:条件 3
26、,当条件 1 值为 0 时,运行的是_。(分数:2.00)填空项 1:_ (正确答案:条件 3)解析:考点 条件运算符 解析 条件 1 非 0,运算条件 2,;条件 1 为 0,则运算条件 3。24.如果函数甲调用函数乙,函数乙又调用函数丙,这叫_;函数甲自己调用自己,这叫_。(分数:2.00)填空项 1:_ (正确答案:函数的嵌套,函数的递归)解析:考点 函数的调用 解析 函数的嵌套是指函数甲调用了函数乙,函数乙又调用了函数丙;而函数的递归是指函数自己调用自己。25.写出 a 大于 b 的偶数的表达式_。(分数:2.00)填空项 1:_ (正确答案:ab main() int a=5; pr
27、ty( printf(“%d/n“,a); (分数:4.00)_正确答案:(6)解析:27.main() int i=0,s=0; do if(i%2)i+,continue; i+; s+=i; while(i7); printf(“%d/n“,s); (分数:4.00)_正确答案:(16)解析:28.#includestdio.h main() int a32=1,2,3,4,5,6,i,j,s=0; for(i=0;i3;i+) for(j=0;j2;j+) s+=aij; printf(“%d/n“,s); (分数:4.00)_正确答案:(21)解析:29.#define N 10 #
28、define s(x)x*x-5 #define f(x)(x*x)*s(x) main() int a,b; a=1000/s(N); b=1000/f(N); printf(“%d,%d/n“,a,b); (分数:4.00)_正确答案:(995,995)解析:四、B程序填充题/B(总题数:3,分数:18.00)30.以下程序的功能输入一个无符号整数,然后按用户输入的代号,分别以十进制(代号 A),八进制(代号B)和十六进制(代号 C)输出。 #includestdio.h main() unsigned x; char c; scanf(“%d,%c“, switch(c) caseA:p
29、rintf(“%d“,x);_;/*第一空*/ caseB:printf(_);break; /*第二空*/ caseC:printf(“%x“,x);break; /*第三空*/ _printf(“input error“); (分数:6.00)填空项 1:_ (正确答案:break “%0“,x default;)解析:31.下面程序的作用是求满足以下算式的 x、y、z 的值,请在“_”处填入正确的内容。 (分数:6.00)填空项 1:_ (正确答案:x10 100*x+10*y+z j=result)解析:32.下面程序是要建立一个文本文件 data1,从键盘输入一个实数,用 fwrit
30、e 函数写入文件 dat-a1 中。输入数字 0 则结束。 #includestdio.h #includestdlib.h main() _ /*第一空*/ float a; if(fp=fopen(“datal“,“w“)=NULL) printf(“can not open the file!“);exit(0); while(1) scanf(“%f“, _ /*第二空*/ _ /*第三空*/ fclose(fp) (分数:6.00)填空项 1:_ (正确答案:FILE *fp if(a=0)break; fwrite()解析:五、B程序设计题/B(总题数:2,分数:16.00)33.
31、用当型循环结构求出 1+2+3+50 的和。(分数:8.00)_正确答案:(main() long sum=0,i; i=1; while(i51) sum+=i+; printf(“sum=%d/n“,sum); )解析:34.(1)编写一个计算梯形面积的函数。函数头是:float area(noat s,float x,noat h)其中变量 s、x和 h 分别表示梯形的上底、下底和高。 (2)主函数从键盘输入梯形的上底、下底和高的值,通过调用上述函数输出梯形面积(保留小数点后两位)。(分数:8.00)_正确答案:(float area(float s,float x,float h) return(s+x)*h*0.5; main() floar s1,x1,h1; scanf(“%f%f“, printf(“area=%7.2f/n“,area(s1,x1,h1,); )解析: