1、高级语言程序设计自考题-6 及答案解析(总分:101.00,做题时间:90 分钟)一、单项选择题(总题数:15,分数:30.00)1.设 int a=1,b=2,c=4; 经过表达式(c=a!=b )(a=b )(c=b )运算后,a、b 和 c的值分别是( ) A1,2,0 B1,2,1 C1,2,2 D1,2,3(分数:2.00)A.B.C.D.2.关于函数 fseek(a,b,c )的说法错误的是( ) A参数 a是文件型指针,指向所需要的文件 B参数 b是 int型,表示从开始位置的偏移字节数 C参数 c是 int型,表示定位的起始位置 D函数返回值是 int型,定位正确返回 0;定位
2、错误返回非 0(分数:2.00)A.B.C.D.3.设 int x=6;,执行语句 x+=x-=x*x;后,x 的值是( )A-60 B0C6 D36(分数:2.00)A.B.C.D.4.调用函数时,若实参是一个数组名,则向函数对应的形参传送的是( ) A数据的长度 B数组的首地址 C数组的第一个元素的值 D整个数据元素的值(分数:2.00)A.B.C.D.5.若 x、y 均是 int型变量,则执行以下语句后的结果是( ) for(x=1;x5;x+=2) for(y=1;y5;y+) printf(“%2d“,x*y); if(y=4)printf(“/n“); A1 2 3 4 3 6 9
3、 12 B2 3 4 5 3 4 5 6 C1 2 3 4 5 6 9 D2 3 4 3 6 9 6 9 12(分数:2.00)A.B.C.D.6.可以作为自定义标识符的是( )A2x BbreakCm-n Dm_n(分数:2.00)A.B.C.D.7.下列关于 if和 else的配对规则描述正确的是( ) Aelse 总是和前面最远的 if配对 Belse 总是和前面最近的 if配对 Cif 和 else的配对按程序缩进格式进行 Delse 可以和前面所有的 if配对(分数:2.00)A.B.C.D.8.若定义了 int m,n=0,*p1=m;,则与 m=n等价的语句是( ) Am=*p1
4、 B*p1=*n C*p1=*n D*p1=*n(分数:2.00)A.B.C.D.9.结构型变量占用内存的字节数是( )A各成员占用内存字节数之和 B第一个成员占用的内存字节数C占用内存最大成员所需的字节数 D最后一个成员占用的内存字节数(分数:2.00)A.B.C.D.10.字符串“2008 Olympic“在存储单元中所占用的字节数是( ) A9 B10 C11 D13(分数:2.00)A.B.C.D.11.使用递归函数计算 n!(n=0,1,2,3,)的是( )Afac(int n)int i,f=1;if(n=0)return 1;else for(i=1;i=n;i+)f*=i;re
5、turn f;Bfac(int n)if(n=0|n=1)return 1;else return n*fac(n-1);Cfac(int n)int i=1,f=1;if(n=0)return 1;else while(i=n)f*=i+;return f;Dfac(int n)int i=1,f=1;if(n=0)return 1;else dof*=i;while(i+n);return f;(分数:2.00)A.B.C.D.12.下列关于 C语言的描述正确的是( ) AC 语言是面向硬件的高级语言 BC 语言是面一种面向对象的程序设计语言 CC 语言是一种结构化程序设计语言 DC 语言
6、的前身是汇编语言(分数:2.00)A.B.C.D.13.下列程序段中,不构成死循环的是( )Aint k=100;do-k; while(k=100)Bint k=100;while(1)k=k%100+1;if(k100)break;Cfor(;);Dint k=100;while(k);-k;(分数:2.00)A.B.C.D.14.若内部变量在离开了定义所在的函数或复合语句后,仍在生存期内。则该变量是 ( ) Aauto 变量 Bregister 变量 C局部变量 Dstatic 变量(分数:2.00)A.B.C.D.15.sizeof(float)是( ) A函数调用 Bint 型表达式
7、 Cfloat 型表达式 D非法表达式(分数:2.00)A.B.C.D.二、填空题(总题数:10,分数:20.00)16.设 struct student char name 20; char sex; stu; 语句 printf(“%d/n“,sizeof(stu);的输出结果是_。(分数:2.00)填空项 1:_17.C语言中 fputc1函数对文本文件的存取是以 2 为单位的。(分数:2.00)填空项 1:_18.静态型外部变量的作用域是 1。(分数:2.00)填空项 1:_19.设 int a,b=5;,则执行表达式 a=b-2=3后 a的值是 1。(分数:2.00)填空项 1:_2
8、0.执行语句 for(i=10;i0;i-);后,变量 i的值是 1。(分数:2.00)填空项 1:_21.若未指定局部变量的存储类型,则其隐含的存储类型是 1。(分数:2.00)填空项 1:_22.执行语句“a=5+(c=6);“后,变量 a、c 的值依次为_。(分数:2.00)填空项 1:_23.以下程序运行后输出的结果是_。 main() int a=1,b; for(b=1;b=10;b+) (if(a=8)break; if(a%2=1)a+=5;continue; a-=3: printf(“%d/n“,b ); (分数:2.00)填空项 1:_24.值传递方式和地址传递方式都是在
9、形参和实参之间传递数据,其区别在于值传递方式所传递的是 1。(分数:2.00)填空项 1:_25.若定义函数 char*fun1,则该函数的返回值类型是 2。(分数:2.00)填空项 1:_三、程序分析题(总题数:4,分数:17.00)26.main()int a=1,b=2,c=3;if(a=c )if(b=c )printf(“a=%d/n“,a );else printf(“b=%d/n“,b );printf(“c=%d/n“,c );(分数:4.00)_27.#include long fun(int n) long s; if(n=2)s=2; else s=n+fun(n-1);
10、 printf(“%d/t“,s); return s; main() fun(5); printf(“/n“); (分数:4.00)_28./*设从键盘输入:420回车*/ #includestdioh main() char c; while(c=getchar()!=/n) switch(C-0) case 0: case 1:putchar(c+2); case 2:putchar(c+3);break; case 3:putchar(c+4); default:putchar(c+1);break; printf(“/n“); (分数:5.00)_29.#includestdioh
11、void main() int i,j,a44; for(i=0;i4;i+) for(j=0;j4;j+) aij=1+i;-j; for(i=0;i4;i+) for(j=0;j4;j+) if(aij0)printf(“%3 d“,aij); printf(“/n“); (分数:4.00)_四、程序填充题(总题数:3,分数:18.00)30.下面程序段的功能是将形参 x的值转换成二进制数,所得二进制数的每一位数放在一维数组中返回,二进制数的最低位放在下标为 0的元素中,其他以此类推。 #include main(int x,int b) int k=0,r,i; scanf(“%d“,x
12、); do r=x%2; b_=r;/*第一空*/ x/=2; while(_);/*第二空*/ for(_);i=0;i-)/*第三空*/ printf(“%d“,bi); (分数:6.00)填空项 1:_31.下列函数的主要功能是在 w指向的数组的前*n 个数据中插入 x,要求 w指向的数组的前*n 个数据已按由小到大顺序存放。插入 x后,该数组中的数据仍按照从小到大的顺序排列,同时将*n 修改为插入 x后长度。void f(char *w,char x,int *n)int i,p=0;w*n=x;while (xwp)_;for(i=*n;ip;i-) wi=_;_;+*n:(分数:6
13、.00)填空项 1:_32.从键盘输入一串字符(“#“作为结束标志),将其写入文本文件 file.dat中保存。#includestdio.h#includestdlih.h main()char ch; FILE*fp:if(fp=fopen(“file.det“,“_“)=NULL)/*第一空*/printf(“Can not open file/n“);exit(0);ch=getchar(); whil(ch!#) fputc(_,fp);/*第二空*/ ch=getchar();fclose(_); /*第三空*/(分数:6.00)填空项 1:_五、程序设计题(总题数:2,分数:16
14、.00)33.某幼儿园入园分班规定如下:(分数:8.00)_34.从 a盘根目录下名为“string. txt“的文本文件读取前 20个字符组成字符串在屏幕上显示输出。(分数:8.00)_高级语言程序设计自考题-6 答案解析(总分:101.00,做题时间:90 分钟)一、单项选择题(总题数:15,分数:30.00)1.设 int a=1,b=2,c=4; 经过表达式(c=a!=b )(a=b )(c=b )运算后,a、b 和 c的值分别是( ) A1,2,0 B1,2,1 C1,2,2 D1,2,3(分数:2.00)A.B. C.D.解析:解析 因 a=b是不成立的,c=b 不被运算,C 所获
15、得的值足表达式“a!=b“的逻辑值。2.关于函数 fseek(a,b,c )的说法错误的是( ) A参数 a是文件型指针,指向所需要的文件 B参数 b是 int型,表示从开始位置的偏移字节数 C参数 c是 int型,表示定位的起始位置 D函数返回值是 int型,定位正确返回 0;定位错误返回非 0(分数:2.00)A.B. C.D.解析:解析 参数 b是长整型,表示从开始位置的偏移字节数。3.设 int x=6;,执行语句 x+=x-=x*x;后,x 的值是( )A-60 B0C6 D36(分数:2.00)A. B.C.D.解析:4.调用函数时,若实参是一个数组名,则向函数对应的形参传送的是(
16、 ) A数据的长度 B数组的首地址 C数组的第一个元素的值 D整个数据元素的值(分数:2.00)A.B. C.D.解析:解析 数组名通常表示的是数组的首地址,故答案选 B。5.若 x、y 均是 int型变量,则执行以下语句后的结果是( ) for(x=1;x5;x+=2) for(y=1;y5;y+) printf(“%2d“,x*y); if(y=4)printf(“/n“); A1 2 3 4 3 6 9 12 B2 3 4 5 3 4 5 6 C1 2 3 4 5 6 9 D2 3 4 3 6 9 6 9 12(分数:2.00)A. B.C.D.解析:解析 此题为一个简单的 for循环嵌
17、套。外层步进值为 2,循环中断条什是 x5;内层步进值为1,循环中断条件是 y5。语句“if(y=4)printf(“/n“):“的用意是当 y=4时回车换行。6.可以作为自定义标识符的是( )A2x BbreakCm-n Dm_n(分数:2.00)A.B.C.D. 解析:解析 主要考查的知识点为自定义标识符。要点透析 A 项以数字开头,B 项为保留字,C 项含有非字母、数字、下划线的字符,只有 D项是正确的。7.下列关于 if和 else的配对规则描述正确的是( ) Aelse 总是和前面最远的 if配对 Belse 总是和前面最近的 if配对 Cif 和 else的配对按程序缩进格式进行
18、Delse 可以和前面所有的 if配对(分数:2.00)A.B. C.D.解析:8.若定义了 int m,n=0,*p1=m;,则与 m=n等价的语句是( ) Am=*p1 B*p1=*n C*p1=*n D*p1=*n(分数:2.00)A.B.C. D.解析:9.结构型变量占用内存的字节数是( )A各成员占用内存字节数之和 B第一个成员占用的内存字节数C占用内存最大成员所需的字节数 D最后一个成员占用的内存字节数(分数:2.00)A. B.C.D.解析:解析 本题主要考查的知识点为结构型变量占用内存的字节数。要点透析 在给结构型变量分配内存时,分配的内存字节数等于该结构型所有成员占用的字节数
19、之和。10.字符串“2008 Olympic“在存储单元中所占用的字节数是( ) A9 B10 C11 D13(分数:2.00)A.B.C.D. 解析:11.使用递归函数计算 n!(n=0,1,2,3,)的是( )Afac(int n)int i,f=1;if(n=0)return 1;else for(i=1;i=n;i+)f*=i;return f;Bfac(int n)if(n=0|n=1)return 1;else return n*fac(n-1);Cfac(int n)int i=1,f=1;if(n=0)return 1;else while(i=n)f*=i+;return f
20、;Dfac(int n)int i=1,f=1;if(n=0)return 1;else dof*=i;while(i+n);return f;(分数:2.00)A.B. C.D.解析:解析 A、C、D 项分别使用 for、while、dowhile 循环来计算 n! (n=0,1,2,3,)的值。12.下列关于 C语言的描述正确的是( ) AC 语言是面向硬件的高级语言 BC 语言是面一种面向对象的程序设计语言 CC 语言是一种结构化程序设计语言 DC 语言的前身是汇编语言(分数:2.00)A.B.C. D.解析:13.下列程序段中,不构成死循环的是( )Aint k=100;do-k; w
21、hile(k=100)Bint k=100;while(1)k=k%100+1;if(k100)break;Cfor(;);Dint k=100;while(k);-k;(分数:2.00)A. B.C.D.解析:14.若内部变量在离开了定义所在的函数或复合语句后,仍在生存期内。则该变量是 ( ) Aauto 变量 Bregister 变量 C局部变量 Dstatic 变量(分数:2.00)A.B.C.D. 解析:15.sizeof(float)是( ) A函数调用 Bint 型表达式 Cfloat 型表达式 D非法表达式(分数:2.00)A.B. C.D.解析:解析 sizeof(float)
22、的用意是求 float型数据的长度。sizeof()是一个运算符,得到的值是整型数据,故它是一个 int型表达式。二、填空题(总题数:10,分数:20.00)16.设 struct student char name 20; char sex; stu; 语句 printf(“%d/n“,sizeof(stu);的输出结果是_。(分数:2.00)填空项 1:_ (正确答案:21)解析:17.C语言中 fputc1函数对文本文件的存取是以 2 为单位的。(分数:2.00)填空项 1:_ (正确答案:字符)解析:18.静态型外部变量的作用域是 1。(分数:2.00)填空项 1:_ (正确答案:本文
23、件)解析:19.设 int a,b=5;,则执行表达式 a=b-2=3后 a的值是 1。(分数:2.00)填空项 1:_ (正确答案:1)解析:20.执行语句 for(i=10;i0;i-);后,变量 i的值是 1。(分数:2.00)填空项 1:_ (正确答案:0)解析:21.若未指定局部变量的存储类型,则其隐含的存储类型是 1。(分数:2.00)填空项 1:_ (正确答案:auto 型或自动型)解析:22.执行语句“a=5+(c=6);“后,变量 a、c 的值依次为_。(分数:2.00)填空项 1:_ (正确答案:11 6)解析:23.以下程序运行后输出的结果是_。 main() int a
24、=1,b; for(b=1;b=10;b+) (if(a=8)break; if(a%2=1)a+=5;continue; a-=3: printf(“%d/n“,b ); (分数:2.00)填空项 1:_ (正确答案:4)解析:解析 main() int a=1,b; for(b=1;b=10;b+),/*b 从 1到 10,步进位为 1的循环*/ if(a=8)break;/*当 a=8 时循环被终止*/ if(a%2=1)a+=5;continue;/*如 a为奇数,则执行“a+=5;continue;“*/ a-=3;/*如果上述两条件 a都不满足则执行本行*/ printf(“%d/
25、n“,b ); 24.值传递方式和地址传递方式都是在形参和实参之间传递数据,其区别在于值传递方式所传递的是 1。(分数:2.00)填空项 1:_ (正确答案:参数值)解析:25.若定义函数 char*fun1,则该函数的返回值类型是 2。(分数:2.00)填空项 1:_ (正确答案:字符型指针或字符型地址)解析:三、程序分析题(总题数:4,分数:17.00)26.main()int a=1,b=2,c=3;if(a=c )if(b=c )printf(“a=%d/n“,a );else printf(“b=%d/n“,b );printf(“c=%d/n“,c );(分数:4.00)_正确答案
26、:(b=2c=3)解析:27.#include long fun(int n) long s; if(n=2)s=2; else s=n+fun(n-1); printf(“%d/t“,s); return s; main() fun(5); printf(“/n“); (分数:4.00)_正确答案:(25914)解析:解析 #includestdioh long fun(int n)(long s; if(n=2)s=2;/*程序存 n2 时是出口条件,不再递归,否则一直执行 s=5+f(n-1)的操作*/ else s=n+fun(n-1): printf(“%d/t“,s); retur
27、n s; main() fun(5); printf(“/n“); 28./*设从键盘输入:420回车*/ #includestdioh main() char c; while(c=getchar()!=/n) switch(C-0) case 0: case 1:putchar(c+2); case 2:putchar(c+3);break; case 3:putchar(c+4); default:putchar(c+1);break; printf(“/n“); (分数:5.00)_正确答案:(5523)解析:29.#includestdioh void main() int i,j,
28、a44; for(i=0;i4;i+) for(j=0;j4;j+) aij=1+i;-j; for(i=0;i4;i+) for(j=0;j4;j+) if(aij0)printf(“%3 d“,aij); printf(“/n“); (分数:4.00)_正确答案:(1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4)解析:解析 #includestdioh void main() int i,j,a44; for(i=0;i4;i+)/*限定循环次数为 4次*/ for(j=0;j4;j+)aij=1+i;-j;/*限定循环次数为 4次*/ for(i=0;i4:i+) for
29、(j=0;j4;j+) if(aij0)printf(“%3d“,aij);/*设置输出格式为 3个字符的宽度,不足的宽度以空格补齐*/ printf(“n“); 四、程序填充题(总题数:3,分数:18.00)30.下面程序段的功能是将形参 x的值转换成二进制数,所得二进制数的每一位数放在一维数组中返回,二进制数的最低位放在下标为 0的元素中,其他以此类推。 #include main(int x,int b) int k=0,r,i; scanf(“%d“,x); do r=x%2; b_=r;/*第一空*/ x/=2; while(_);/*第二空*/ for(_);i=0;i-)/*第三
30、空*/ printf(“%d“,bi); (分数:6.00)填空项 1:_ (正确答案:k+/*第一空。将余数 r赋值给数组元素 bk并使 k自加1,为下一次循环做准备*/ x/*第二空。当 x=0时则终止循环。当算术运算获得的值小于 1时,变量将被赋于 0值*/ i=k-1/*第三空。在循环体内最高位获值后,k 又自加 1一次;故输出时需将 k的值减 1以使第一次输出能正确地输出最高位的值*/)解析:31.下列函数的主要功能是在 w指向的数组的前*n 个数据中插入 x,要求 w指向的数组的前*n 个数据已按由小到大顺序存放。插入 x后,该数组中的数据仍按照从小到大的顺序排列,同时将*n 修改
31、为插入 x后长度。void f(char *w,char x,int *n)int i,p=0;w*n=x;while (xwp)_;for(i=*n;ip;i-) wi=_;_;+*n:(分数:6.00)填空项 1:_ (正确答案:p+wi-1wp=x)解析:32.从键盘输入一串字符(“#“作为结束标志),将其写入文本文件 file.dat中保存。#includestdio.h#includestdlih.h main()char ch; FILE*fp:if(fp=fopen(“file.det“,“_“)=NULL)/*第一空*/printf(“Can not open file/n“)
32、;exit(0);ch=getchar(); whil(ch!#) fputc(_,fp);/*第二空*/ ch=getchar();fclose(_); /*第三空*/(分数:6.00)填空项 1:_ (正确答案:w ch fp)解析:五、程序设计题(总题数:2,分数:16.00)33.某幼儿园入园分班规定如下:(分数:8.00)_正确答案:(void main()int age;scanf(“%d“,&age);printf(“%5d“,age);switch(age)case 1:case 2:case 3:printf(“Lower class/n“);break;case 4:pri
33、ntf(“Middle class/n“);break;case 5:case 6:printf(“Higher class/n“);break;default:printf(“Cant enter/n“);)解析:34.从 a盘根目录下名为“string. txt“的文本文件读取前 20个字符组成字符串在屏幕上显示输出。(分数:8.00)_正确答案:(#includstdioh #includestdlibh/*因包含函数 exit(0),故需在预编译时加入头文件“stdlibh“*/ main() FILE *fp; char s21; if(fp=fopen(“a:/stringtxt“,“r“)=NULL) printf(“File cant be opened“);exit(0); fgets(5,21,fp);/*从文件获得 20个字符符并组成字符串存入字符数组 S*/ fpms(s,stdom);/*从屏幕显示输出,stdout 是显示器输出设备对应的文件型指针*/)解析: