1、高级语言程序设计自考题-2 及答案解析(总分:100.00,做题时间:90 分钟)一、单项选择题(总题数:15,分数:30.00)1.设 int a=2,b=6,c=8;,表达式(a,b ),(c,10)的值是( )A2 B6C8 D10(分数:2.00)A.B.C.D.2.以下程序的运行结果是( ) #includestdioh main() int a=1,2,3,4,5,6,7,8,9,10,11,12; int *p=a5,*q=NULL; printf(“%d%d/n“,*p,*q); A运行后报错 B6 0 C6 12 D5 5(分数:2.00)A.B.C.D.3.以下属于 C语言
2、保留字的是( ) Adefine Bput Cfclose Dextern(分数:2.00)A.B.C.D.4.下面程序的功能是输出以下形式的金字塔图案: * #includestdioh main() int i,j; for(i=1;i=4;i+) for(j=1;j=4-i;j+)printf(“); for(j=1;j=_;j+)printf(“*“); printf(“/n“); 在下划线处应填入的是( ) Ai B2*i-1 C2*i+1 Di+2(分数:2.00)A.B.C.D.5.下列属于 C语言保留字的是( )AInt BtypedefCENUM DUnion(分数:2.00
3、)A.B.C.D.6.数组定义及初始化正确的是( )Achar a5=; Bint a5=0,1,2,3,4,5;Cchar a=“string“; Dchar a=0,1,2,3,4,5;(分数:2.00)A.B.C.D.7.若定义 int i,*p;使 p指向 i的赋值语句是( )Ap=&i; B*p=&i;C*p=i; Dp=*&i;(分数:2.00)A.B.C.D.8.执行以下程序段后,m 的值是( ) int a23=1,2,3,4,5,6); int m,*ptr; ptr=a00; m=(*ptr)*(*(ptr+2)*(*(ptr+4); A15 B24 C45 D不确定(分数
4、:2.00)A.B.C.D.9.函数调用语句 func(exp1,exp2),(exp3,exp4,exp5);中,实参的个数为( )A0 B3C2 D5(分数:2.00)A.B.C.D.10.下列数据定义语句中正确的是( )Astruct int x;x1 Bstruct xxint x;Cstruct xxint x; Dstruct xxint xx1。(分数:2.00)A.B.C.D.11.包含用户类型符“FILE“的定义的头文件是( ) Astring.h Bfile.h Cstdio.h Dstdlib.h(分数:2.00)A.B.C.D.12.以下是对二维数组的正确说明的是( )
5、 Aint3 Bfloat a(3,4) Cdouble a14 Dfloat a(3)(4)(分数:2.00)A.B.C.D.13.设 typedef double DB;,则与 DB u5;的等价形式是( ) Adouble db5; Bdouble DB5; Cdouble u; Ddouble u5;(分数:2.00)A.B.C.D.14.若 x=100;,则表达式 x+100? x+20:x+10 的值是( ) A110 B120 C130 D101(分数:2.00)A.B.C.D.15.有以下程序( ) #includestdioh main() unsigned char a,b
6、; a=43; b=43; printf(“%d%d/n“,a,b ); 执行后输出结果是 A7 0 B0 7 C1 1 D43 0(分数:2.00)A.B.C.D.二、填空题(总题数:10,分数:20.00)16.设 int x=2,y=1;则表达式 x-y的值是 1。(分数:2.00)填空项 1:_17.设 float a64;则数组 a中第一维下标的最大值是 1。(分数:2.00)填空项 1:_18.如果形参是数组名,则传递方式称为“ 1“。(分数:2.00)填空项 1:_19.设 char string=“this_is_a_book!“;,则数组的长度应是 1。(分数:2.00)填空
7、项 1:_20.设 int a,*p=&a;,通过指针变量 p为 a输入值的 scanf语句是 1。(分数:2.00)填空项 1:_21.设 int x=-9,y;,则执行 y=x=0? x:-x;后 y的值是 1。(分数:2.00)填空项 1:_22.语句 printf(“a/bre/hi/y/bou/n“);输出的结果是 1。(分数:2.00)填空项 1:_23.从计算机的角度来讲, 1 是计算机程序中解决问题的方法步骤。(分数:2.00)填空项 1:_24.设 int x=9;,执行语句 printf(“%d/n“,x2);后的结果是 1。(分数:2.00)填空项 1:_25.读字符串函
8、数是 1。(分数:2.00)填空项 1:_三、程序分析题(总题数:4,分数:16.00)26.输入数据:2743回车。 #includestdioh main() int c; while(c=getchar()!=n) switch(c-2) case 0: case 1:putchar(c+4); case 2:putchar(c+4);break; case 3:putchar(c+3); case 4:putchar(c+2);break; printf(“/n“);(分数:4.00)_27.int f(int n)static int f=1;f=f*n;return f;main(
9、)int i;for (i=1;i5;i+)printf(“%d,“,f(i);(分数:4.00)_28.struct stu int x;int *px;a4,*p=a;main()int i,y4=10,11,12,13;for(i=0;i4;i+)ai.x=i,ai.px=y+i;printf(“%d/n“,+P-x);printf(“%d/n“,(+p)-x);printf(“%d/n“,+(*p-px);(分数:4.00)_29.#includestdioh main() char b=“ABCDEFG“; char *chp=eb7; while(-chpb0) putchar(*
10、chp); (分数:4.00)_四、程序填充题(总题数:3,分数:18.00)30.下面程序通过函数 average()计算数组中各元素的平均值。 float average(_,int n)/*第一空*/ int i; float avg=0.0; for(i=0;in;i+) avg=avg+_;/*第二空*/ avg=_;/*第三空*/ return avg; main() int i,a5=2,4,6,8,10); float mean; mean=average(a,5); printf(“%f/n“,mean); (分数:6.00)填空项 1:_31.下列给定程序中,函数 fun(
11、)的功能是:读人一个字符串(长度20),将该字符串中的所有字符按ASC码降序排序后输出。 #includestdioh void fun(char t) char c; int i,j; for(i=0;_;i+)/*第一空*/ for(j=i+1;j=strlen(t);j+) if(_)/*第二空*/ c=tj; tj=ti; ti=c; main() char s81; printf(“Please enter a character string:/n“); gets(s); printf(“/n/nBefore sorting:/n%s“,s); _;/*第三空*/ printf(“
12、/nAfter sorting decreasingly:/n%s/n“,s); (分数:6.00)填空项 1:_32.下面程序输出两个字符串对应位置相等的字符。main()char a=“students“,b=“study“;int i=0;while(ai!=/0&_)if(ai=bi)printf(“%c“,_);else_;(分数:6.00)填空项 1:_五、程序设计题(总题数:2,分数:16.00)33.在同一程序中,用三种循环语句分别显示 19 的平方值。(分数:8.00)_34.(1) 编写一个计算梯形面积的函数。函数头是:float area(float t,float b,
13、float h)其中变量t、b 和 h分别表示梯形的上底、下底和高。 (2) 编写主函数从键盘输入梯形的上底、下底和高的值,调用上述函数输出梯形面积(保留小数点后两位)。(分数:8.00)_高级语言程序设计自考题-2 答案解析(总分:100.00,做题时间:90 分钟)一、单项选择题(总题数:15,分数:30.00)1.设 int a=2,b=6,c=8;,表达式(a,b ),(c,10)的值是( )A2 B6C8 D10(分数:2.00)A.B.C.D. 解析:解析 逗号的同级结合性为自左向右,逗号表达式的值为最后一个表达式的值。(a,b )的值为6,(c,10)的值为 10,故整个表达式的
14、值为 10。2.以下程序的运行结果是( ) #includestdioh main() int a=1,2,3,4,5,6,7,8,9,10,11,12; int *p=a5,*q=NULL; printf(“%d%d/n“,*p,*q); A运行后报错 B6 0 C6 12 D5 5(分数:2.00)A. B.C.D.解析:解析 #includestdioh main() int a=1,2,3,4,5,6,7,8,9,10,11,12; int*p=a5,*q=NULL; printf(“%d%d/n“,*P,*q);/*被置空的指针不能参与“*“运算*/ 3.以下属于 C语言保留字的是(
15、 ) Adefine Bput Cfclose Dextern(分数:2.00)A.B.C.D. 解析:4.下面程序的功能是输出以下形式的金字塔图案: * #includestdioh main() int i,j; for(i=1;i=4;i+) for(j=1;j=4-i;j+)printf(“); for(j=1;j=_;j+)printf(“*“); printf(“/n“); 在下划线处应填入的是( ) Ai B2*i-1 C2*i+1 Di+2(分数:2.00)A.B. C.D.解析:解析 应填入控制打印“*“的个数,其个数与行数 i的关系是 2*i-1的关系。5.下列属于 C语言
16、保留字的是( )AInt BtypedefCENUM DUnion(分数:2.00)A.B. C.D.解析:解析 本题主要考查的知识点为 C语言的保留字。要点透析 C 语言的保留字都是以小写字母组成的。6.数组定义及初始化正确的是( )Achar a5=; Bint a5=0,1,2,3,4,5;Cchar a=“string“; Dchar a=0,1,2,3,4,5;(分数:2.00)A.B.C.D. 解析:7.若定义 int i,*p;使 p指向 i的赋值语句是( )Ap=&i; B*p=&i;C*p=i; Dp=*&i;(分数:2.00)A. B.C.D.解析:解析 本题主要考查的知识
17、点为指针变量的赋值。要点透析 i 是一个整型变量,p 是一个指针变量,p 中存放的只能是 i在内存中的地址值。8.执行以下程序段后,m 的值是( ) int a23=1,2,3,4,5,6); int m,*ptr; ptr=a00; m=(*ptr)*(*(ptr+2)*(*(ptr+4); A15 B24 C45 D不确定(分数:2.00)A. B.C.D.解析:解析 “*ptr“、“*(ptr+2)“和“*(ptr+4)“的值分别是 1、3 和 5,故答案选 A。9.函数调用语句 func(exp1,exp2),(exp3,exp4,exp5);中,实参的个数为( )A0 B3C2 D5
18、(分数:2.00)A.B.C. D.解析:解析 本题主要考查的知识点为函数的参数。要点透析 此函数的实参只有两个,即两个逗号表达式(exp1,exp2)和(exp3,exp4,exp5)。10.下列数据定义语句中正确的是( )Astruct int x;x1 Bstruct xxint x;Cstruct xxint x; Dstruct xxint xx1。(分数:2.00)A.B. C.D.解析:11.包含用户类型符“FILE“的定义的头文件是( ) Astring.h Bfile.h Cstdio.h Dstdlib.h(分数:2.00)A.B.C. D.解析:12.以下是对二维数组的正
19、确说明的是( ) Aint3 Bfloat a(3,4) Cdouble a14 Dfloat a(3)(4)(分数:2.00)A.B.C. D.解析:13.设 typedef double DB;,则与 DB u5;的等价形式是( ) Adouble db5; Bdouble DB5; Cdouble u; Ddouble u5;(分数:2.00)A.B.C.D. 解析:14.若 x=100;,则表达式 x+100? x+20:x+10 的值是( ) A110 B120 C130 D101(分数:2.00)A.B.C.D. 解析:15.有以下程序( ) #includestdioh main
20、() unsigned char a,b; a=43; b=43; printf(“%d%d/n“,a,b ); 执行后输出结果是 A7 0 B0 7 C1 1 D43 0(分数:2.00)A. B.C.D.解析:二、填空题(总题数:10,分数:20.00)16.设 int x=2,y=1;则表达式 x-y的值是 1。(分数:2.00)填空项 1:_ (正确答案:1)解析:17.设 float a64;则数组 a中第一维下标的最大值是 1。(分数:2.00)填空项 1:_ (正确答案:5)解析:18.如果形参是数组名,则传递方式称为“ 1“。(分数:2.00)填空项 1:_ (正确答案:地址传
21、递方式)解析:19.设 char string=“this_is_a_book!“;,则数组的长度应是 1。(分数:2.00)填空项 1:_ (正确答案:16)解析:20.设 int a,*p=&a;,通过指针变量 p为 a输入值的 scanf语句是 1。(分数:2.00)填空项 1:_ (正确答案:scanf(“%d“,P);)解析:21.设 int x=-9,y;,则执行 y=x=0? x:-x;后 y的值是 1。(分数:2.00)填空项 1:_ (正确答案:9)解析:22.语句 printf(“a/bre/hi/y/bou/n“);输出的结果是 1。(分数:2.00)填空项 1:_ (正
22、确答案:rehiyou)解析:23.从计算机的角度来讲, 1 是计算机程序中解决问题的方法步骤。(分数:2.00)填空项 1:_ (正确答案:算法)解析:24.设 int x=9;,执行语句 printf(“%d/n“,x2);后的结果是 1。(分数:2.00)填空项 1:_ (正确答案:36)解析:25.读字符串函数是 1。(分数:2.00)填空项 1:_ (正确答案:fgets-|_|-)解析:三、程序分析题(总题数:4,分数:16.00)26.输入数据:2743回车。 #includestdioh main() int c; while(c=getchar()!=n) switch(c-
23、2) case 0: case 1:putchar(c+4); case 2:putchar(c+4);break; case 3:putchar(c+3); case 4:putchar(c+2);break; printf(“/n“);(分数:4.00)_正确答案:(66877)解析:解析 #includestdioh main() int c; while(c=getchar()!=/n/*从键盘获得字符*/switch(c-2)/*开始进行分支选择*/ case 0: case 1:putchar(c+4);/*如果此行语句被执行,则其下面的一行语句将被无条件执行。*/ case 2:
24、putchar(c+4);break;/*如果此行语句被执行,则仅执行这一行。*/ case 3:putchar(c+3);/*同 casel*/ case 4:putchar(c+2);break;/*同 case3*/ printf(“/n“);27.int f(int n)static int f=1;f=f*n;return f;main()int i;for (i=1;i5;i+)printf(“%d,“,f(i);(分数:4.00)_正确答案:(1,2,6,24,)解析:28.struct stu int x;int *px;a4,*p=a;main()int i,y4=10,11
25、,12,13;for(i=0;i4;i+)ai.x=i,ai.px=y+i;printf(“%d/n“,+P-x);printf(“%d/n“,(+p)-x);printf(“%d/n“,+(*p-px);(分数:4.00)_正确答案:(1112)解析:29.#includestdioh main() char b=“ABCDEFG“; char *chp=eb7; while(-chpb0) putchar(*chp); (分数:4.00)_正确答案:(GFEDCB)解析:解析 #includestdioh main() char b=“ABCDEFG“; char*chp=b7;/*指针变
26、量 chp获得数组元素 b7的值*/ while(-chpb0)/*逆序输出*/ putchar(*chp); 四、程序填充题(总题数:3,分数:18.00)30.下面程序通过函数 average()计算数组中各元素的平均值。 float average(_,int n)/*第一空*/ int i; float avg=0.0; for(i=0;in;i+) avg=avg+_;/*第二空*/ avg=_;/*第三空*/ return avg; main() int i,a5=2,4,6,8,10); float mean; mean=average(a,5); printf(“%f/n“,m
27、ean); (分数:6.00)填空项 1:_ (正确答案:int *pa/*第一空。定义形参变量,main()函数调用average()函数的笫一个实参变量是指针变量,故此处应定义一个指针变量*/ pai /*第二空。将数组各个元素加;因函数调用采用地址传递参数的方式,故可以这样引用 */ avg/n/*第三空。求平均值*/)解析:31.下列给定程序中,函数 fun()的功能是:读人一个字符串(长度20),将该字符串中的所有字符按ASC码降序排序后输出。 #includestdioh void fun(char t) char c; int i,j; for(i=0;_;i+)/*第一空*/
28、for(j=i+1;j=strlen(t);j+) if(_)/*第二空*/ c=tj; tj=ti; ti=c; main() char s81; printf(“Please enter a character string:/n“); gets(s); printf(“/n/nBefore sorting:/n%s“,s); _;/*第三空*/ printf(“/nAfter sorting decreasingly:/n%s/n“,s); (分数:6.00)填空项 1:_ (正确答案:i=strlen(t)/*第一空。设定循环上限,以减少不必要的比较束提高程序效率*/ titj/*第二
29、空。如果 ti内所包含的字符变量的 ASC值小于 tj内所包含的字符变量的 ASC,则执行后面语句以交换其位置。*/ fun(s)/*第三空。对函数 fun(s)进行调用进行排序,参数传递方式采用地址传递方式。*/)解析:32.下面程序输出两个字符串对应位置相等的字符。main()char a=“students“,b=“study“;int i=0;while(ai!=/0&_)if(ai=bi)printf(“%c“,_);else_;(分数:6.00)填空项 1:_ (正确答案:bi!=/0ai+i+)解析:五、程序设计题(总题数:2,分数:16.00)33.在同一程序中,用三种循环语句
30、分别显示 19 的平方值。(分数:8.00)_正确答案:(#include stdio.hmain() int i;for(i=1;i=9;i+)printf(“%d,“,i*i);printf(“/n“);i=1;while(i=9)printf(“%d,“,i*i);i+;printf(“in“);i=1;doprintf(“%d,“,i*i);i+;while(i=9);)解析:34.(1) 编写一个计算梯形面积的函数。函数头是:float area(float t,float b,float h)其中变量t、b 和 h分别表示梯形的上底、下底和高。 (2) 编写主函数从键盘输入梯形的上底、下底和高的值,调用上述函数输出梯形面积(保留小数点后两位)。(分数:8.00)_正确答案:(#includestdio.b float area(float t,float b,float h) return(t+b )*h*0.5; main0 float t1,b1,h1; scanf(“%f%f%f“,&t1,&b1,&h1); printf(“area=%7.2f/n“,area(t1,b1,h1); )解析: