1、高级语言程序设计自考题-28 及答案解析(总分:98.00,做题时间:90 分钟)一、B单项选择题/B(总题数:15,分数:30.00)1.以下选项中属于 C 语言数据类型的是_ A.复数型 B.逻辑型 C.双精度型 D.集合型(分数:2.00)A.B.C.D.2.以下说法正确的是_ A.文件只能顺序存取 B.数据存放在介质上的形式分为文本形式和二进制形式 C.结构指针+1 代表移向结构体的下一个成员 D.引用结构体变量时,能将一个结构体变量作为一个整体进行输出(分数:2.00)A.B.C.D.3.包含用户类型符“FILE”的定义的头文件是_ A.string.h B.stdlib.h C.s
2、tdio.h D.file.h(分数:2.00)A.B.C.D.4.执行下列程序后输出的结果是U /U#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); A.k=0,m=5 B.k=0,m=3 C.k=1,m=5 D.k=1,m=3(分数:2.00)A.B.C.D.5.sizeof(float)是U /U A.函数调用 B.int 型表达式 C.float 型表达式 D.非法表达式(分数:2.00)A.B.C.D.6.主函数头
3、中的“main”是U /U A.保留字 B.函数名 C.变量名 D.类型名(分数:2.00)A.B.C.D.7.属于面向过程的语言是_ A.汇编语言 B.C 语言 C.自然语言 D.二进制语言(分数:2.00)A.B.C.D.8.阅读以下程序:fun(char *s1,char *s2)int i=0;while(s1i=s2ireturn(s1i=/0此函数的功能是_ A.将 s2 所指字符串赋给 s1 B.比较 s1 和 s2 所指字符串是否相等,若相等,函数值为 1,否则函数值为 0 C.比较 s1 和 s2 所指字符串的大小,若 s1 比 s2 的大,函数值为 1,否则函数值为 0 D
4、.比较 s1 和 s2 所指字符串的长度,若 s1 比 s2 的长,函数值为 1,否则函数值为 0(分数:2.00)A.B.C.D.9.以下符合 C 语言语法的实型常量是U /U A.1.2E0.5 B.3.14.159E C.5E-3 D.E15(分数:2.00)A.B.C.D.10.若整型数据占两个字节,则以下程序的输出结果是U /Umain() int a=2,b=4;printf(“%d,%d/n“,a1,a%b); A.1,2 B.2,2 C.4,0 D.4,2(分数:2.00)A.B.C.D.11.执行表达式 x=(y=1,z=2,k=3)后,x 的值为U /U A.6 B.3 C
5、.2 D.1(分数:2.00)A.B.C.D.12.以下说法正确的是_ A.break 只能在循环体中使用 B.continue 只能在循环体中使用 C.break 不能在循环体中使用 D.break 只能在 switch 语句中使用(分数:2.00)A.B.C.D.13.C 语言规定,调用一个函数,实参与形参都是简单变量时,它们之间的传递方式是_ A.地址传递 B.单向值传递 C.用户指定方式 D.双向值传递(分数:2.00)A.B.C.D.14.设 char *s=“china“;则 printf(“%s,%c,%c/n“,s,*s,s3);的输出是U /U A.china,c,n B.c
6、hina,china,i C.c,c,n D.china,china,n(分数:2.00)A.B.C.D.15.下列语句中,不能将 fp 指向的文件的内部指针指向文件尾的是_ A.fp=fopen(“a.txt“,“ab+“); B.fseek(fp,oL,SEEK-END); C.fp=fopen(“a.txt,“ab“;) D.fseek(fp,20L,1)(分数:2.00)A.B.C.D.二、B填空题/B(总题数:10,分数:20.00)16.设 char*s=“abc“;,语句 for(;*s!=/0;s+)printf(“W“);的输出结果是 1。(分数:2.00)填空项 1:_17
7、.执行语句 do x=1;while(x+!=1);后,变量 x 的值是 1。(分数:2.00)填空项 1:_18.下面程序的输出是_。 void apple(int *x) printf(“%d/n“,+*x); main() int a=25;apple((分数:2.00)填空项 1:_19.外部函数的存储类型符是 1。(分数:2.00)填空项 1:_20.写出公式专 (分数:2.00)填空项 1:_21.执行语句 printf(“%d/n“,strlen(“a/n/x41“);后,输出结果是 1。(分数:2.00)填空项 1:_22.将字符串写入文件时,不写入文件的字符串结束标志是 1。
8、(分数:2.00)填空项 1:_23.函数间传递数据有四种方式:值传递、地址传递、_和全局变量传递。(分数:2.00)填空项 1:_24.表达式3(234)的值为 1。(分数:2.00)填空项 1:_25.在 Turbo C 中语言源程序的扩展名为 1。(分数:2.00)填空项 1:_三、B程序分析题/B(总题数:4,分数:16.00)26.#includestdioh main() int i,j,row,col,max; int a34=1,2,3,4,10,4,20,6,0,-1,-3,-5,; max=a00; for(i=0;i3;i+) for(j=0;j4;j+) if(aijm
9、ax) max=aij;row=i;col=j;) printf(“max=%d,row=%d,col=%d/n“,max,row,col); (分数:4.00)_27.main() int i,j; int a33,b33,x; for(i=0;i3;i+) for(j=0;j3;j+) scanf(“%d,“, int func(int *a) *a+=b;return(*a); main() int a=3,res=1; res+=func( printf(“%d%d/n“,a,res);(分数:4.00)_29.#includestdioh char *ss(char *s) retu
10、rn s+strlen(s)/2;) main() char *p,*str=“abcdefgh“; p=ss(str);printf(“%s/n“,p); (分数:4.00)_四、B程序填充题/B(总题数:3,分数:18.00)30.将一个文本文件(madat)拷贝到另一个文本文件(niudat)中。 #includestdioh main() FILE*ma,*niu; mazfopen(“madat“,_);/*第一空*/ niu=fopen(“niudat“,“w“); while(!feof(ma)fputc(fgetc(ma),_);/*第二空*/ fclose(niu);_;/*
11、第三空*/ (分数:6.00)填空项 1:_31.下面程序把从终端读入的文本(用“作为文本结束的标志)复制到一个名为 bidat 的新文件中,请填空。 #includestdioh FILE *fp; main() char ch; if(fp=_)=NULL)/*第一空*/ exit(0); while(_)!=)/*第二空*/ fputc(ch,fp); _;/*第三空*/ (分数:6.00)填空项 1:_32.以下程序用来统计从终端输入的字符中大写字母的个数。以“$“作为输入结束标记。 #includestdioh #includectypch main() int num126,i;c
12、har c; for(i=0;i26;i+) numi=0; while(_)!=$)/*第一空*/ if(isupper(c )numc-65+=1; for(i=0;i26;i+) if(_)/*第二空*/ printf(“%c:%d/n“,_,numi);/*第三空*/ (分数:6.00)填空项 1:_五、B程序设计题/B(总题数:2,分数:14.00)33.采用递归调用的算法编写一个计算 x 的 n 次方的函数(不用写主函数调用)。(分数:8.00)_34.在一个二维数组(定义为 int a55;)中形成并按下列形式输出矩阵各元素的值。 1 0 0 0 0 2 1 0 0 0 3 2
13、1 0 0 4 3 2 1 0 5 4 3 2 1(分数:6.00)_高级语言程序设计自考题-28 答案解析(总分:98.00,做题时间:90 分钟)一、B单项选择题/B(总题数:15,分数:30.00)1.以下选项中属于 C 语言数据类型的是_ A.复数型 B.逻辑型 C.双精度型 D.集合型(分数:2.00)A.B.C. D.解析:考点 数据的类型 解析 C 语言中的数据类型包括短整型、长整型、单精度型、双精度型、字符型等。2.以下说法正确的是_ A.文件只能顺序存取 B.数据存放在介质上的形式分为文本形式和二进制形式 C.结构指针+1 代表移向结构体的下一个成员 D.引用结构体变量时,能
14、将一个结构体变量作为一个整体进行输出(分数:2.00)A.B. C.D.解析:考点 文件的存放形式 解析 文件的存取形式有顺序存取和直接存取两种方式;结构指针+1 代表移向下一个结构体;不能将一个结构体变量作为一个整体进行输出,可以利用循环语句逐项输出。3.包含用户类型符“FILE”的定义的头文件是_ A.string.h B.stdlib.h C.stdio.h D.file.h(分数:2.00)A.B.C. D.解析:考点 文件指针 解析 文件指针是指向与文件参数有关的结构体类型的指针变量,系统在头文件“stdio.h”中已经定义。4.执行下列程序后输出的结果是U /U#includest
15、dioh 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); A.k=0,m=5 B.k=0,m=3 C.k=1,m=5 D.k=1,m=3(分数:2.00)A. B.C.D.解析:解析 #includestdioh main() int j,i,k=0,m=0; for(i=0;i2;i+)/*循环条件是“i2“,步进值为 1*/ for(j=0;j3;j+)/*循环条件是“j3“,步进值为 1*/ k+,k-=j;/*此语句为逗号表达式,表达式“k+“
16、和“k-=j“在循环“for(j=0;j3;j+)“中都会被执行*/ m=i+j:/* 此处所使用的 i 和 j 的值都是在上述循环执行后 i 和 j 的值*/ printf(“k=%d,m=%d/n“,k,m); 5.sizeof(float)是U /U A.函数调用 B.int 型表达式 C.float 型表达式 D.非法表达式(分数:2.00)A.B. C.D.解析:解析 sizeof(float)的用意是求 float 型数据的长度。sizeof()是一个运算符,得到的值是整型数据,故它是一个 int 型表达式。6.主函数头中的“main”是U /U A.保留字 B.函数名 C.变量名
17、 D.类型名(分数:2.00)A.B. C.D.解析:解析 C 程序是 C 语句组成的语句序列,通常一个 C 程序包括一个或多个函数,其中有且仅有一个称为主函数,其函数名规定为 main。7.属于面向过程的语言是_ A.汇编语言 B.C 语言 C.自然语言 D.二进制语言(分数:2.00)A.B. C.D.解析:考点 各种语言的面对对象 解析 汇编语言、二进制语言是面向机器的语言,自然语言并不是计算机语言。8.阅读以下程序:fun(char *s1,char *s2)int i=0;while(s1i=s2ireturn(s1i=/0此函数的功能是_ A.将 s2 所指字符串赋给 s1 B.比
18、较 s1 和 s2 所指字符串是否相等,若相等,函数值为 1,否则函数值为 0 C.比较 s1 和 s2 所指字符串的大小,若 s1 比 s2 的大,函数值为 1,否则函数值为 0 D.比较 s1 和 s2 所指字符串的长度,若 s1 比 s2 的长,函数值为 1,否则函数值为 0(分数:2.00)A.B. C.D.解析:考点 函数的调用 解析 形参为两个数组的地址,while(s1i=s2i B.fseek(fp,oL,SEEK-END); C.fp=fopen(“a.txt,“ab“;) D.fseek(fp,20L,1)(分数:2.00)A.B.C.D. 解析:考点 fopen 函数和
19、fseek 函数 解析 A 项中“ab+”代表为了读写而打开一个二进制文件,位置指针移到文件末尾,如果二进制文件不存在,则自动建立文件,存在就会清空文件;B 项中表示以文件的末尾为起始点,移动 0 个偏移量;C 项 中“ab”代表为读写打开一个二进制文件,位置指针移到文件末尾;而 D 项则表示以当前位置为起点向前移动 20 个字节的位置,所以选 D。二、B填空题/B(总题数:10,分数:20.00)16.设 char*s=“abc“;,语句 for(;*s!=/0;s+)printf(“W“);的输出结果是 1。(分数:2.00)填空项 1:_ (正确答案:WWW)解析:17.执行语句 do
20、x=1;while(x+!=1);后,变量 x 的值是 1。(分数:2.00)填空项 1:_ (正确答案:2)解析:18.下面程序的输出是_。 void apple(int *x) printf(“%d/n“,+*x); main() int a=25;apple((分数:2.00)填空项 1:_ (正确答案:26)解析:考点 函数调用 解析 传递的是实参的地址,*x 的值为 25,+*x 的值为 26。19.外部函数的存储类型符是 1。(分数:2.00)填空项 1:_ (正确答案:extern)解析:20.写出公式专 (分数:2.00)填空项 1:_ (正确答案:(x+sqrt(x+y)/(
21、5*x)/2.0 或 1.0/2*(x+sqrt(x+y)/(5*x))解析:21.执行语句 printf(“%d/n“,strlen(“a/n/x41“);后,输出结果是 1。(分数:2.00)填空项 1:_ (正确答案:3)解析:22.将字符串写入文件时,不写入文件的字符串结束标志是 1。(分数:2.00)填空项 1:_ (正确答案:/0)解析:23.函数间传递数据有四种方式:值传递、地址传递、_和全局变量传递。(分数:2.00)填空项 1:_ (正确答案:返回值传递)解析:考点 函数调用时数据传递方法 解析 函数调用时数据传递方法有四种:值传递方式、地址传递方式、返回值传递方式、全局变量
22、传递方式。24.表达式3(234)的值为 1。(分数:2.00)填空项 1:_ (正确答案:4)解析:25.在 Turbo C 中语言源程序的扩展名为 1。(分数:2.00)填空项 1:_ (正确答案:c)解析:三、B程序分析题/B(总题数:4,分数:16.00)26.#includestdioh main() int i,j,row,col,max; int a34=1,2,3,4,10,4,20,6,0,-1,-3,-5,; max=a00; for(i=0;i3;i+) for(j=0;j4;j+) if(aijmax) max=aij;row=i;col=j;) printf(“max
23、=%d,row=%d,col=%d/n“,max,row,col); (分数:4.00)_正确答案:(max=20,row=1,col=2)解析:解析 #includestdioh main() int i,j,row,col,max; int a34=1,2,3,4,10,4,20,6,0,-1,-3,-5,;/*初始化数组 a34,没有初始化的元素默认为“0“*/ max=a00; for(i=0;i3;i+) for(j-0;j4;j+) if(aijmax) max=aij;row=i;col=j;/*用每个元素和 max 对比,比 max 大的将其值赋于 max 并记录其横、纵两个下
24、标的值*/ printf(“max=%d,row=%d,col=%d/n“,max,row,col); 27.main() int i,j; int a33,b33,x; for(i=0;i3;i+) for(j=0;j3;j+) scanf(“%d,“, int func(int *a) *a+=b;return(*a); main() int a=3,res=1; res+=func( printf(“%d%d/n“,a,res);(分数:4.00)_正确答案:(56)解析:29.#includestdioh char *ss(char *s) return s+strlen(s)/2;)
25、 main() char *p,*str=“abcdefgh“; p=ss(str);printf(“%s/n“,p); (分数:4.00)_正确答案:(efgh)解析:解析 #includestdioh char *ss(char *s)/*函数为指针型函数,返回值为字符串 s 的中问一个字符的地址*/ return s+strlen(s)/2; main() char *p,*str=“abcdefgh“; p=ss(str):printf(“%s/n“,p);/*打印输出以地址 p 为起始地址的字符串*/ 四、B程序填充题/B(总题数:3,分数:18.00)30.将一个文本文件(mada
26、t)拷贝到另一个文本文件(niudat)中。 #includestdioh main() FILE*ma,*niu; mazfopen(“madat“,_);/*第一空*/ niu=fopen(“niudat“,“w“); while(!feof(ma)fputc(fgetc(ma),_);/*第二空*/ fclose(niu);_;/*第三空*/ (分数:6.00)填空项 1:_ (正确答案:第一空:“r“ 第二空:niu 第三空:fclose(ma))解析:31.下面程序把从终端读入的文本(用“作为文本结束的标志)复制到一个名为 bidat 的新文件中,请填空。 #includestdio
27、h FILE *fp; main() char ch; if(fp=_)=NULL)/*第一空*/ exit(0); while(_)!=)/*第二空*/ fputc(ch,fp); _;/*第三空*/ (分数:6.00)填空项 1:_ (正确答案:fopen(“bi.dat“,“W“)/*第一空。语句“if(fp=_)=NULL)“的用意是测定打开文件是否成功,fp 所获得的值是文件 bidat 的首地址。*/ ch=getchar()/*第二空。语句“while(_)!=)“是为了测试文本是否结束,变量 ch 获得的是从终端设备获得的字符*/ fclose(fp)/*第三空。处理完成后关闭
28、该文件*/)解析:32.以下程序用来统计从终端输入的字符中大写字母的个数。以“$“作为输入结束标记。 #includestdioh #includectypch main() int num126,i;char c; for(i=0;i26;i+) numi=0; while(_)!=$)/*第一空*/ if(isupper(c )numc-65+=1; for(i=0;i26;i+) if(_)/*第二空*/ printf(“%c:%d/n“,_,numi);/*第三空*/ (分数:6.00)填空项 1:_ (正确答案:c=getchar()/*第一空。得到从键盘输入的值,并判断是不是结束标
29、志“$“*/ numi/*第二空。判断用以记录个数的数组元素是否为 0,如为 0 则不输出*/ i+65/*第三空。从语句“numc-65+=1;“可知数组对字符的记录是通过下标和字符的 ASC值之间的关系进行的。故此处应填上与之相应的换算关系*/)解析:五、B程序设计题/B(总题数:2,分数:14.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.在一个二维数组(定义为 int a55;)中形成并按下列形式输出矩阵各元素的值。 1 0 0 0 0 2 1 0 0 0 3 2 1 0 0 4 3 2 1 0 5 4 3 2 1(分数:6.00)_正确答案:(main() int i,j,a55 for(i=0;i5;i+) for(j=0;j5;j+) if(ij)aij=0; else aij=i-j+1; for(i=0;i5;i+) for(j=0;j5;j+)printf(“%5d“,aij); printf(“/n“) )解析: