1、高级语言程序设计自考题-4 及答案解析(总分:99.00,做题时间:90 分钟)一、单项选择题(总题数:15,分数:29.00)1.运行下列程序后,输出结果是( )void fun(int x,int y,int *cp,int *dp)*cp=x+y;*dp=x-y;main()int a=6,b=2;fun(a+b,a-b,&a,&b );printf(“%d,%d/n“,a,b );A6,2 B8,4C12,4 D8,2(分数:2.00)A.B.C.D.2.对函数而言,叙述正确的是( )A程序中只能有一个 main 函数B当函数的形参是数组时,形实结合为值传递方式C函数中只能有一个 re
2、turn 语句D无参函数的函数体内不能出现 return 语句(分数:2.00)A.B.C.D.3.以下程序的输出结果是( ) int d=1; fun(int p) static int d=5; d+=P: printf(“%d“,d ); return(d ); main() int am=3; printf(“%d/n“,fun(a+fun(d ): A6 9 9 B6 6 9 C6 15 15 D6 6 15(分数:2.00)A.B.C.D.4.下列程序执行后的输出结果是( ) main() int x=C;printf(“%d/n“,A-x+3);) A1 B2 C3 D5(分数:
3、2.00)A.B.C.D.5.以下程序的执行结果是( ) #includestdioh main() printf(“%d/n“,NULL); A-1 B0 C1 D2(分数:2.00)A.B.C.D.6.如果打开文件时,选用的文件操作方式是“wb+“则下列说法中正确的是( ) A要打开的文件必须存在 B打开文件后只能渎数据 C文件打开后删除原内容再写 D打开文件后只能写数据(分数:2.00)A.B.C.D.7.运行下列程序后,输出结果是( )f(int x,int y,int *z)return(*z=x*x+y*y);main()int a=3;f(f(1,2,&a ),f(1,2,&a
4、),&a );pintf(“%“,a );A9 B10C50 D60(分数:2.00)A.B.C.D.8.执行下列程序后输出的结果是( ) #includestdioh main() int j,i,k=0,m=0; for(i=0;i2;i+) for(j=0;j3;j+) k+,k-=j; m=i+j; print(“k=%d,m=%d/n“,k,m); Ak=0,m=5 Bk=0,m=3 Ck=1,m=5 Dk=1,m=3(分数:2.00)A.B.C.D.9.下列不属于面向机器语言的是( ) A符号语言 B二进制语言 C汇编语言 DC 语言(分数:2.00)A.B.C.D.10.下列运算
5、符中优先级最高的是( )A?: B&C| D!(分数:2.00)A.B.C.D.11.设有定义“chara=2,b=5;“求表达式“ab2“的值(假定现有计算机字长为 16) ( ) A-32 B32 C-23 D23(分数:2.00)A.B.C.D.12.设 enum weeksun,mon,tue,wed,thu,fri,satday;,正确的赋值语句是( ) Asun=0; Bsun=day; Cmon=sun+1; Dday=sun;(分数:1.00)A.B.C.D.13.若有以下定义,则不能正确地表示数组中的元素的是( ) char *s=“1,2,3,4,5,6,7,8,9,0,“
6、; A*s Bs9 C*(s+1) D*(s+10)(分数:2.00)A.B.C.D.14.关于宏定义命令,叙述正确的是( )A在程序编译前进行宏替换 B在程序编译时进行宏替换C在程序编译后进行宏替换 D在程序运行时进行宏替换(分数:2.00)A.B.C.D.15.设 struct char name10; int age; stu2=“Tom“,25,“Mary“,26,*p=stu; 则执行语句 printf(“%S%d/n“,Pname,stu1.age);后输出结果是( ) ATom25 BTom26 CMary25 DMary26(分数:2.00)A.B.C.D.二、填空题(总题数:
7、10,分数:20.00)16.z=y*=x+9 相当于 1 和 z=y 两个表达式。(分数:2.00)填空项 1:_17.转义字符/n的含义是 1。(分数:2.00)填空项 1:_18.在 C 语言中,如果下面的变量都是 int 类型,则输出的结果是_。 sum=pad=5; pad=sum+,pad+,+pad; printf(“%d/n“,pad );(分数:2.00)填空项 1:_19.可以将被调函数中获得的值返回主调函数的语句是 1。(分数:2.00)填空项 1:_20.设 char s3=“AB“,*p=s;,则*(p+2)的值是 1。(分数:2.00)填空项 1:_21.函数调用时
8、,若实参为一个确定的值,则函数参数的传递方式是 1。(分数:2.00)填空项 1:_22.函数的自我调用被称为 1 调用。(分数:2.00)填空项 1:_23.函数中未指定存储类型的局部变量,其隐含的存储类型是 1。(分数:2.00)填空项 1:_24.请写出以下数学表达式的 C 语言表达式:_。 *(分数:2.00)填空项 1:_25.设 int a=2,b=3;float x=3.5,y=2.5;,表达式(float)(a+b )/2+(int)x%(int)y 的值是 1。(分数:2.00)填空项 1:_三、程序分析题(总题数:4,分数:16.00)26.#includestdioh v
9、oid swap(int *P,int*q) int t; t=*P;*P=*q;*q=t; main() int a=10,b=20;swap(a,b ); printf(“%d%d/n“,a,b ); (分数:4.00)_27.#define M 23? 5:6void main()int i=3,j,k;j=i+M;k=i+(M);printf(“%d,%d/n“,j,k);(分数:4.00)_28.#includestdioh #includestringh main() int y=9; for(;y0;y-) if(y%03=0) printf(“%d“,-y);continue;
10、 printf(“%d“,-y); (分数:4.00)_29.void fun(int x,int y,int z)z=x*x+y*y;printf(“%d/n“,z);void main()int a=31;fun(5,2,a );printf(“%d/n“,a );(分数:4.00)_四、程序填充题(总题数:3,分数:18.00)30.完善下面程序段,以使其完成以下数学函数的计算。 * #includestdioh #includemathh main() float x,y,f1,fun(); scanf(“%f%f“,x,y); f1=x*x/fun(_);/*第一空*/ printf
11、(“A=%f/n“,f1); float fun(float f) float f2; f2=f*f+sqrt(1+_/*第二空*/+_);/*第三空*/ return(f2); (分数:6.00)填空项 1:_31.函数 YangHui 的功能是把杨辉 i 角形的数据赋给二维数组的下半三角,形式如下: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 其构成规律是:(1) 第 0 列元素和主对角线元素均为 1(2) 其余元素为其左上方和正上方元素之和(3) 数据的个数每行递增 1 #includestdioh #define N 5 void YangHui(int xNN) in
12、t i,j; x00=1; for(i=1;iN;i+) xi0=_=1;/*第一空*/ for(j=1;ji;j+) if(_)/*第二空*/ xij=_;/*第三空*/ (分数:6.00)填空项 1:_32.将一个文本文件 madat 拷贝到另一个文本文件 nadat 中。 #includestdioh main() FILE*ma,*na; ma=fopen(“madat“,_);/*第一空*/ na=fopen(“nadat“,“w“); while(!feof(ma )fputc(fgete(ma ),_)/*第二空*/ felose(na );_;/*第三空*/ (分数:6.00)
13、填空项 1:_五、程序设计题(总题数:2,分数:16.00)33.编写程序,用以建立某班级的学生档案信息,每个学生档案信息包括:姓名、邮编、电话。(分数:8.00)_34.从键盘输入三条边 a、b 和 c,若能构成三角形则输出其面积,否则输出不能构成三角形的提示信息“No triangle”。三角形面积计算公式 (分数:8.00)_高级语言程序设计自考题-4 答案解析(总分:99.00,做题时间:90 分钟)一、单项选择题(总题数:15,分数:29.00)1.运行下列程序后,输出结果是( )void fun(int x,int y,int *cp,int *dp)*cp=x+y;*dp=x-y
14、;main()int a=6,b=2;fun(a+b,a-b,&a,&b );printf(“%d,%d/n“,a,b );A6,2 B8,4C12,4 D8,2(分数:2.00)A.B.C. D.解析:2.对函数而言,叙述正确的是( )A程序中只能有一个 main 函数B当函数的形参是数组时,形实结合为值传递方式C函数中只能有一个 return 语句D无参函数的函数体内不能出现 return 语句(分数:2.00)A. B.C.D.解析:3.以下程序的输出结果是( ) int d=1; fun(int p) static int d=5; d+=P: printf(“%d“,d ); ret
15、urn(d ); main() int am=3; printf(“%d/n“,fun(a+fun(d ): A6 9 9 B6 6 9 C6 15 15 D6 6 15(分数:2.00)A.B.C. D.解析:解析 int d=1; fun(int p) static int d=5;/*变量 d 被定义为 static 存储类型的 int 整型变量,作用域仪限两数 fun(int p)内。函数 fun(int p)被执行之后变量 d 仍然存在,再次执行函数 fun(int p)时所使用的变量 d 的值是上次调用函数 fun(int p)时 d 所得到的新值。*/ d+=P; printf(
16、“%d“,d );/*每次调用都会打印输出 d 的值*/ return(d );/*返回 d 的值*/ main() int a=3; printf(“%d/n“,fun(a+fun(d );/*此处调用函数 fun(int p)时,所用的变量 d 为整个程序段头所定义的 d*/ 4.下列程序执行后的输出结果是( ) main() int x=C;printf(“%d/n“,A-x+3);) A1 B2 C3 D5(分数:2.00)A. B.C.D.解析:5.以下程序的执行结果是( ) #includestdioh main() printf(“%d/n“,NULL); A-1 B0 C1 D
17、2(分数:2.00)A.B. C.D.解析:解析 NULL 的 ASC值是 00000000,语句“printf(“%d/n“,NULL);“要求 NULL 以整型数据输出,所以输出是 0。6.如果打开文件时,选用的文件操作方式是“wb+“则下列说法中正确的是( ) A要打开的文件必须存在 B打开文件后只能渎数据 C文件打开后删除原内容再写 D打开文件后只能写数据(分数:2.00)A.B.C. D.解析:7.运行下列程序后,输出结果是( )f(int x,int y,int *z)return(*z=x*x+y*y);main()int a=3;f(f(1,2,&a ),f(1,2,&a ),
18、&a );pintf(“%“,a );A9 B10C50 D60(分数:2.00)A.B.C. D.解析:8.执行下列程序后输出的结果是( ) #includestdioh main() int j,i,k=0,m=0; for(i=0;i2;i+) for(j=0;j3;j+) k+,k-=j; m=i+j; print(“k=%d,m=%d/n“,k,m); Ak=0,m=5 Bk=0,m=3 Ck=1,m=5 Dk=1,m=3(分数:2.00)A. B.C.D.解析:解析 #includestdioh main() int j,i,k=0,m=0; for(i=0;i2;i+)/*循环条
19、件是“i2“,步进值为 1*/ for(j=0;j3;j+)/*循环条件是“j3“,步进值为 1*/ k+,k-=j;/*此语句为逗号表达式,表达式“k+“和“k-=j“在循环“for(j=0;j3;j+)“中都会被执行*/ m=i+j:/* 此处所使用的 i 和 j 的值都是在上述循环执行后 i 和 j 的值*/ printf(“k=%d,m=%d/n“,k,m); 9.下列不属于面向机器语言的是( ) A符号语言 B二进制语言 C汇编语言 DC 语言(分数:2.00)A.B.C.D. 解析:10.下列运算符中优先级最高的是( )A?: B&C| D!(分数:2.00)A.B.C.D. 解析
20、:解析 单目逻辑运算符优先于双目逻辑运算符及条件运算符。11.设有定义“chara=2,b=5;“求表达式“ab2“的值(假定现有计算机字长为 16) ( ) A-32 B32 C-23 D23(分数:2.00)A.B.C. D.解析:解析 整型常量值在 0127 之间的,C 语言规定可以把它看成一个字符型常量,其所对应的字符就是该值作为 ASC代码值所对应的那个字符。12.设 enum weeksun,mon,tue,wed,thu,fri,satday;,正确的赋值语句是( ) Asun=0; Bsun=day; Cmon=sun+1; Dday=sun;(分数:1.00)A.B.C.D.
21、 解析:13.若有以下定义,则不能正确地表示数组中的元素的是( ) char *s=“1,2,3,4,5,6,7,8,9,0,“; A*s Bs9 C*(s+1) D*(s+10)(分数:2.00)A.B.C.D. 解析:解析 “*(s+10)“表示由 s 的首地址向后偏移 10 个字节,产生数组地址越界。14.关于宏定义命令,叙述正确的是( )A在程序编译前进行宏替换 B在程序编译时进行宏替换C在程序编译后进行宏替换 D在程序运行时进行宏替换(分数:2.00)A. B.C.D.解析:解析 宏定义命令的一般格式是:#define 宏名 一串符号,在程序清单中可以出现已经定义过的“宏名”,称为“
22、宏调用”;当对源程序清单进行编译之前,将把所有的“宏名”替换成对应的“一串符号”,称为“岩替换”。15.设 struct char name10; int age; stu2=“Tom“,25,“Mary“,26,*p=stu; 则执行语句 printf(“%S%d/n“,Pname,stu1.age);后输出结果是( ) ATom25 BTom26 CMary25 DMary26(分数:2.00)A.B. C.D.解析:二、填空题(总题数:10,分数:20.00)16.z=y*=x+9 相当于 1 和 z=y 两个表达式。(分数:2.00)填空项 1:_ (正确答案:y=y*(x+9))解析
23、:17.转义字符/n的含义是 1。(分数:2.00)填空项 1:_ (正确答案:回车换行)解析:18.在 C 语言中,如果下面的变量都是 int 类型,则输出的结果是_。 sum=pad=5; pad=sum+,pad+,+pad; printf(“%d/n“,pad );(分数:2.00)填空项 1:_ (正确答案:7)解析:19.可以将被调函数中获得的值返回主调函数的语句是 1。(分数:2.00)填空项 1:_ (正确答案:return(表达式);)解析:20.设 char s3=“AB“,*p=s;,则*(p+2)的值是 1。(分数:2.00)填空项 1:_ (正确答案:/0(或 0))
24、解析:21.函数调用时,若实参为一个确定的值,则函数参数的传递方式是 1。(分数:2.00)填空项 1:_ (正确答案:值传递)解析:22.函数的自我调用被称为 1 调用。(分数:2.00)填空项 1:_ (正确答案:递归)解析:23.函数中未指定存储类型的局部变量,其隐含的存储类型是 1。(分数:2.00)填空项 1:_ (正确答案:auto(或自动型))解析:24.请写出以下数学表达式的 C 语言表达式:_。 *(分数:2.00)填空项 1:_ (正确答案:a/(b*c )-2*d)解析:25.设 int a=2,b=3;float x=3.5,y=2.5;,表达式(float)(a+b
25、)/2+(int)x%(int)y 的值是 1。(分数:2.00)填空项 1:_ (正确答案:3.5)解析:三、程序分析题(总题数:4,分数:16.00)26.#includestdioh void swap(int *P,int*q) int t; t=*P;*P=*q;*q=t; main() int a=10,b=20;swap(a,b ); printf(“%d%d/n“,a,b ); (分数:4.00)_正确答案:(20,10)解析:解析 #includestdioh void swap(int *P,int *q)/*参数传递方式采用地址传递*/ int t; t=*p;*p=*q
26、;*q=t;/*交换 a 与 b 的值*/ main() int a=10,b=20;swap(a,b );/*调用函数 swap()*/ printf(“%d%d/n“,a,b );27.#define M 23? 5:6void main()int i=3,j,k;j=i+M;k=i+(M);printf(“%d,%d/n“,j,k);(分数:4.00)_正确答案:(6,8)解析:28.#includestdioh #includestringh main() int y=9; for(;y0;y-) if(y%03=0) printf(“%d“,-y);continue; printf(
27、“%d“,-y); (分数:4.00)_正确答案:(8 6 4 2 0)解析:解析 #includestdioh #includestringh main() int y=9; for(;y0;y-) if(y%3=0) printf(“%d“,-y);continue;)/*如果 y 是 3 的倍数,则执行本行并跳过循环体后面的内容继续下一次循环*/ printf(“%d“,-y); 29.void fun(int x,int y,int z)z=x*x+y*y;printf(“%d/n“,z);void main()int a=31;fun(5,2,a );printf(“%d/n“,a
28、);(分数:4.00)_正确答案:(2931)解析:四、程序填充题(总题数:3,分数:18.00)30.完善下面程序段,以使其完成以下数学函数的计算。 * #includestdioh #includemathh main() float x,y,f1,fun(); scanf(“%f%f“,x,y); f1=x*x/fun(_);/*第一空*/ printf(“A=%f/n“,f1); float fun(float f) float f2; f2=f*f+sqrt(1+_/*第二空*/+_);/*第三空*/ return(f2); (分数:6.00)填空项 1:_ (正确答案:exp(x-
29、y)/*第一空。由语句“f1=x*x/fum(_);“知此处为函数 A(x,y)的表达式。且函数 fun()是函数表达式 A(x,y)的分母,应由 x、y 两个变量组成。而此参数应满足语句“f2=f*f+sqrt(1+_+_);“和“return(f2);(函数 A(x,y)的分母)“;故空应为变“f“的表达式,再结合数学函数 A(x,y)的原形可得到此空应为 exp(x-y)*/ 2*f/*第二空。由语句“f2=f*f+sqrt(1+_+_);“和数学函数 A(x,y)的原形可知,此空应为关于 f 的表达式且为“2*f“*/ 3*f*f/*第三空。解析同上*/)解析:31.函数 YangHu
30、i 的功能是把杨辉 i 角形的数据赋给二维数组的下半三角,形式如下: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 其构成规律是:(1) 第 0 列元素和主对角线元素均为 1(2) 其余元素为其左上方和正上方元素之和(3) 数据的个数每行递增 1 #includestdioh #define N 5 void YangHui(int xNN) int i,j; x00=1; for(i=1;iN;i+) xi0=_=1;/*第一空*/ for(j=1;ji;j+) if(_)/*第二空*/ xij=_;/*第三空*/ (分数:6.00)填空项 1:_ (正确答案:xii,*第一空
31、。将对角线置*/ i!=j*第二空,判定是否为对角线上的元素*/ xij-1+xi-1j/*第三空。根据构成规律(2)求出该元素的值*/)解析:32.将一个文本文件 madat 拷贝到另一个文本文件 nadat 中。 #includestdioh main() FILE*ma,*na; ma=fopen(“madat“,_);/*第一空*/ na=fopen(“nadat“,“w“); while(!feof(ma )fputc(fgete(ma ),_)/*第二空*/ felose(na );_;/*第三空*/ (分数:6.00)填空项 1:_ (正确答案:“r“/*第一空。以只读方式打开文
32、件 madat*/ na/*第二空。向文件 nadat 输入从文件 madat 得到的字符*/ fclose(ma )/*第三空。关闭所有文件以结束复制过程*/)解析:五、程序设计题(总题数:2,分数:16.00)33.编写程序,用以建立某班级的学生档案信息,每个学生档案信息包括:姓名、邮编、电话。(分数:8.00)_正确答案:(main() struct studentchar name20;unsigned long zipcode;unsigned long phone;char addr30;struct student class150;int i;for(i=0;i50;i+) p
33、rintf(“第%d 个学生的信息:/n“,i+1);printf(“name:“);gets(class1i.name);printf(“zipcode:“);scanf(“%u“,&class1i.zipcode);printf(“phone number:“);scanf(“%u“,&class1i.phone);)解析:34.从键盘输入三条边 a、b 和 c,若能构成三角形则输出其面积,否则输出不能构成三角形的提示信息“No triangle”。三角形面积计算公式 (分数:8.00)_正确答案:(#includemath.hvoid main()float a,b,c,s,area;scanf(“%f,%f,%ff“,&a,&b,&c );if(a+bc&a+cb&b+ca )s=(a+b+c )/2;area=sqrt(s*(s-a )*(s-b )*(s-c );printf(“area=%f/n“,area );else printf(“No triangle/n“);)解析: