1、高级语言程序设计-10 及答案解析(总分:100.00,做题时间:90 分钟)一、B单项选择题/B(总题数:15,分数:30.00)1.C 语言早期规定建立文件缓冲区采用的形式是( )(分数:2.00)A.缓冲文件系统B.非缓冲文件系统C.分页文件系统D.AB2.以下是对二维数组的正确说明的是( )(分数:2.00)A.int3B.float a(3,4)C.double a14D.float a(3)(4)3.下列关于函数的递归调用描述不正确的是( )(分数:2.00)A.函数的递归调用就是函数对自身的调用B.向下的递归调用过程被称为是“递归过程“C.向上携带返回表达式的过程被称为是“回溯过
2、程“D.递归过程必须解决的问题有三个4.表达式 8263 的值是( )(分数:2.00)A.7B.5C.3D.15.设 int a=6;,则执行 b=a1;语句后 b 的值是( )(分数:2.00)A.3B.6C.9D.126.以下说法中正确的是( )(分数:2.00)A.#define 和 printf 都是 C 语句B.#define 是 C 语句,而 printf 不是C.printf 是 C 语句,但#define 不是D.#define 和 printf 都不是 C 语句7.以下程序的输出结果是( ) main() char a10=“123456789“),*P; int 1; i
3、=8; p=a+i; printf(“%s/n“,p-3); (分数:2.00)A.5678B.6789C.7890D.不确定8.以下程序的输出结果是(已知字母 a 的 ASC值比字母 A 的 ASC值大 32)( ) main() int i; for(i=A;iI;i+,i+) printf(“%c“,i+36); (分数:2.00)A.DEGIKB.egikC.EGIKD.degik9.若已定义:int a9,*p=a;并在以后的语句中未改变 P 的值,不能表示 a1地址的表达式是( )(分数:2.00)A.p+1B.a+1C.a1D.*p110.设有数组定义:char array=“A
4、sia“;则数组 array所占用的空间为( )(分数:2.00)A.4 个字节B.5 个字节C.6 个字节D.7 个字节11.当 C 的值不为 0 时,在下列选项中能正确将 C 的值赋给变量 a 和 b 的是( )(分数:2.00)A.c=a=bB.(a=(b=C.(a=(b=D.a=c=b12.在下列函数的参数传递方式中,可以改变实参值的参数传递方式是( )(分数:2.00)A.值传递B.地址传递C.返回值传递D.A、B 和 C13.常用的数学处理类系统函数所在的头文件是( )(分数:2.00)A.mathB.ctyphC.dohD.stdlih14.下列关于 C 语言字符数组描述正确的是
5、( )(分数:2.00)A.字符数组可以存放字符串B.字符数组的下标是从 0 开始的C.字符数组不能输出字符串D.字符数组可以没有/015.若有以下定义和语句: double r=99,*p=r; *p=r; 则以下正确的叙述是( )(分数:2.00)A.以上两处的*p 含义相同,都说明给指针变量 p 赋值B.在“double r=99,*p=r;“中,把 r 的地址赋值给了 p 所指的存储单元C.语句“*p=r;“把变量 r 的值赋给指针变量 pD.语句“*p=r;“取变量 r 的值放回 r 中二、B填空题/B(总题数:10,分数:20.00)16.可以将被调函数中获得的值返回主调函数的语句
6、是 1。(分数:2.00)填空项 1:_17.设 int x=2,y=1;则表达式 x-y 的值是 1。(分数:2.00)填空项 1:_18.外部静态变量的作用域是 1。(分数:2.00)填空项 1:_19.函数调用时,若实参为一个确定的值,则函数参数的传递方式是 1。(分数:2.00)填空项 1:_20.设 int a23=2,4,6,8,10,12);,则数组元素 a10的值是 1。(分数:2.00)填空项 1:_21.设 int a,b,c;,则执行 a=(b=3,c=4,a=5,b=8);之后变量 a 的值是 1。(分数:2.00)填空项 1:_22.以下程序的输出结果是_。 #inc
7、ludestdioh main() int a,b,d=241; a=d/100%9;/*“/“和“%“的优先级相同,先进行“/运算“*/ b=(-1)(-1;/*b 所获得的是逻辑值。*/ printf(“%d,%d/n“,a,b); (分数:2.00)填空项 1:_23.以下程序的输出结果是_。 #includestdioh main() int i; for(i=1;i=5;i+)(if(i%2)printf(“*“); else continue; printf(“#“); printf(“$/n“); (分数:2.00)填空项 1:_24.以下由 for 语句构成的循环执行了_次。
8、#itieludestdioh #define N 2 #deftne M N+1 #define NUM(M+1)*N/2 main() int i,n=0; for(i=1;i=NUM;i+) n+;printf(“%d“,n); printf(“/n“);(分数:2.00)填空项 1:_25.表达式“sizeof(double)“的值的类型是 1。(分数:2.00)填空项 1:_三、B程序分析题/B(总题数:4,分数:16.00)26.#include long fun(int n) long s; if(n=2)s=2; else s=n+fun(n-1); printf(“%d/t“
9、,s); return s; main() fun(5); printf(“/n“); (分数:4.00)_27.#includestdioh main() int a32=1,2,3,4,5,6),i,j,s=0; for(i=1;i3;i+) for(j=0;j2;j+) s+=aij; printf(“%d/n“,s); (分数:4.00)_28.#includestdioh main() int i; for(i=0;i3;i+) switch(i) case 0:printf(“%d“,i); case 2:printf(“%d“,i); default:printf(“%d“,i)
10、; printf(“/n“); (分数:4.00)_29.#includestdioh main() int a,b; for(a=1,b=1;a=100;a+) if(b=20)break; if(b%3=1)(b+=3; continue; b-=5; printf(“%d/n“,a); (分数:4.00)_四、B程序填充题/B(总题数:3,分数:18.00)30.下面程序段的功能是将形参 x 的值转换成二进制数,所得二进制数的每一位数放在一维数组中返回,二进制数的最低位放在下标为 0 的元素中,其他以此类推。 #include main(int x,int b) int k=0,r,i;
11、 scanf(“%d“,x); do r=x%2; b_=r;/*第一空*/ x/=2; while(_);/*第二空*/ for(_);i=0;i-)/*第三空*/ printf(“%d“,bi); (分数:6.00)填空项 1:_31.下面程序是将字符串 P 中的所有字符复制到字符串 b 中,要求每复制三个字符后插入一个空格。 #includestdioh void cp(char *p,char *b) int i,k=0; while(*p) i=0; while(_)/*第一空*/ bk=*P; k+;p+;i+; if(*p) _;/*第二空*/ _;/*第三空*/ main()
12、char a20,b20; gets(a); cp(a,b); puts(b); printf(“/n“); (分数:6.00)填空项 1:_32.下列给定程序中,函数 fun()的功能是:读人一个字符串(长度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
13、 character string:/n“);gets(s); printf(“/n/nBefore sorting:/n%s“,s); _;/*第三空*/ printf(“/nAfter sorting decreasingly:/n%s/n“,s); (分数:6.00)填空项 1:_五、B程序设计题/B(总题数:2,分数:16.00)33.求出 10 到 500 之内能同时被 3、7 整除的数,并输出;然后求出其和值。(分数:8.00)_34.采用递归调用的算法编写一个计算 x 的 n 次方的函数(不用写主函数调用)。(分数:8.00)_高级语言程序设计-10 答案解析(总分:100.00
14、,做题时间:90 分钟)一、B单项选择题/B(总题数:15,分数:30.00)1.C 语言早期规定建立文件缓冲区采用的形式是( )(分数:2.00)A.缓冲文件系统B.非缓冲文件系统C.分页文件系统D.AB 解析:2.以下是对二维数组的正确说明的是( )(分数:2.00)A.int3B.float a(3,4)C.double a14 D.float a(3)(4)解析:3.下列关于函数的递归调用描述不正确的是( )(分数:2.00)A.函数的递归调用就是函数对自身的调用B.向下的递归调用过程被称为是“递归过程“C.向上携带返回表达式的过程被称为是“回溯过程“D.递归过程必须解决的问题有三个
15、解析:4.表达式 8263 的值是( )(分数:2.00)A.7B.5C.3D.1 解析:5.设 int a=6;,则执行 b=a1;语句后 b 的值是( )(分数:2.00)A.3B.6C.9D.12 解析:6.以下说法中正确的是( )(分数:2.00)A.#define 和 printf 都是 C 语句B.#define 是 C 语句,而 printf 不是C.printf 是 C 语句,但#define 不是 D.#define 和 printf 都不是 C 语句解析:解析 #define 是宏命令,而不是 C 语句7.以下程序的输出结果是( ) main() char a10=“123
16、456789“),*P; int 1; i=8; p=a+i; printf(“%s/n“,p-3); (分数:2.00)A.5678B.6789 C.7890D.不确定解析:解析 main() char a10=“123456789“,*P; int i; i=8; p=a+i; printf(“%s/n“,p-3);/*打印输出的是以 p-3 为首地址的字符串*/ 8.以下程序的输出结果是(已知字母 a 的 ASC值比字母 A 的 ASC值大 32)( ) main() int i; for(i=A;iI;i+,i+) printf(“%c“,i+36); (分数:2.00)A.DEGIK
17、B.egik C.EGIKD.degik解析:解析 main() int i; for(i=A;iI;i+,i+)/*i 的初始值为字母 A 的 ASC值,循环条件为 iI,步进值为 2*/ printf(“%c“,i+36);/*ASC值加 36 后已进入小写字母区域*/ 9.若已定义:int a9,*p=a;并在以后的语句中未改变 P 的值,不能表示 a1地址的表达式是( )(分数:2.00)A.p+1B.a+1C.a1D.*p1 解析:10.设有数组定义:char array=“Asia“;则数组 array所占用的空间为( )(分数:2.00)A.4 个字节B.5 个字节 C.6 个字
18、节D.7 个字节解析:11.当 C 的值不为 0 时,在下列选项中能正确将 C 的值赋给变量 a 和 b 的是( )(分数:2.00)A.c=a=bB.(a=(b=C.(a=(b= D.a=c=b解析:解析因表达式“(a=c)“和“(b=c)“的值分别是 a 和 b 的值(a,b 都不为 0)。当获得“a=c“不为 0 的判定后,表达式“(a=c)(b=c)“中的“(b=c)“将不会被执行。12.在下列函数的参数传递方式中,可以改变实参值的参数传递方式是( )(分数:2.00)A.值传递B.地址传递 C.返回值传递D.A、B 和 C解析:13.常用的数学处理类系统函数所在的头文件是( )(分数
19、:2.00)A.math B.ctyphC.dohD.stdlih解析:14.下列关于 C 语言字符数组描述正确的是( )(分数:2.00)A.字符数组可以存放字符串B.字符数组的下标是从 0 开始的C.字符数组不能输出字符串 D.字符数组可以没有/0解析:15.若有以下定义和语句: double r=99,*p=r; *p=r; 则以下正确的叙述是( )(分数:2.00)A.以上两处的*p 含义相同,都说明给指针变量 p 赋值B.在“double r=99,*p=r;“中,把 r 的地址赋值给了 p 所指的存储单元C.语句“*p=r;“把变量 r 的值赋给指针变量 pD.语句“*p=r;“取
20、变量 r 的值放回 r 中 解析:二、B填空题/B(总题数:10,分数:20.00)16.可以将被调函数中获得的值返回主调函数的语句是 1。(分数:2.00)填空项 1:_ (正确答案:return(表达式);)解析:17.设 int x=2,y=1;则表达式 x-y 的值是 1。(分数:2.00)填空项 1:_ (正确答案:1)解析:18.外部静态变量的作用域是 1。(分数:2.00)填空项 1:_ (正确答案:从定义点到程序结束)解析:19.函数调用时,若实参为一个确定的值,则函数参数的传递方式是 1。(分数:2.00)填空项 1:_ (正确答案:值传递)解析:20.设 int a23=2
21、,4,6,8,10,12);,则数组元素 a10的值是 1。(分数:2.00)填空项 1:_ (正确答案:8)解析:21.设 int a,b,c;,则执行 a=(b=3,c=4,a=5,b=8);之后变量 a 的值是 1。(分数:2.00)填空项 1:_ (正确答案:8)解析:22.以下程序的输出结果是_。 #includestdioh main() int a,b,d=241; a=d/100%9;/*“/“和“%“的优先级相同,先进行“/运算“*/ b=(-1)(-1;/*b 所获得的是逻辑值。*/ printf(“%d,%d/n“,a,b); (分数:2.00)填空项 1:_ (正确答案
22、:2,1)解析:解析 “/“和“%“的优先级相同,先进行“/“运算,而 b 所获得的是逻辑值。23.以下程序的输出结果是_。 #includestdioh main() int i; for(i=1;i=5;i+)(if(i%2)printf(“*“); else continue; printf(“#“); printf(“$/n“); (分数:2.00)填空项 1:_ (正确答案:*#*#*#$)解析:解析 #includestdioh main() int i; for(i=1;i=5;i+)/*i 从 1 到 5 进行 5 次循环*/ if(i%2)printf(“*“);/*如果 i
23、 是奇数则打印输出“*“*/ else continue; printf(“#“);/*如果i 是偶数则打印输出“#“*/ printf(“$n“);/*结尾打印“$“*/ 24.以下由 for 语句构成的循环执行了_次。 #itieludestdioh #define N 2 #deftne M N+1 #define NUM(M+1)*N/2 main() int i,n=0; for(i=1;i=NUM;i+) n+;printf(“%d“,n); printf(“/n“);(分数:2.00)填空项 1:_ (正确答案:4)解析:25.表达式“sizeof(double)“的值的类型是
24、1。(分数:2.00)填空项 1:_ (正确答案:int)解析:解析 sizeof(double)的返回值是整型值,故其为 int 型表达式。三、B程序分析题/B(总题数:4,分数:16.00)26.#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;
25、/*程序存 n2时是出口条件,不再递归,否则一直执行 s=5+f(n-1)的操作*/ else s=n+fun(n-1): printf(“%d/t“,s);return s; main() fun(5); printf(“/n“); 27.#includestdioh main() int a32=1,2,3,4,5,6),i,j,s=0; for(i=1;i3;i+) for(j=0;j2;j+) s+=aij; printf(“%d/n“,s); (分数:4.00)_正确答案:()解析:18 解析 #includestdioh main() int a32=1,2,3,4,5,6,i,j
26、,s=0; for(i=1;i3;i+) for(j=0;j2;j+) s+=aij;/*构建一个二重循环,对除第一行之外的所有数组元素求和*/ printf(“%d/n“,s); 28.#includestdioh main() int i; for(i=0;i3;i+) switch(i) case 0:printf(“%d“,i); case 2:printf(“%d“,i); default:printf(“%d“,i); printf(“/n“); (分数:4.00)_正确答案:()解析:000122 解析 #includestdioh main() int i; for(i0;i3
27、;i+)/*循环体被执行3 次*/ switch(i) cflse 0:printf(“%d“,i); case 2:printf(“%d“,i): default:printf(“%d“,i);/*不含 break 语句,从符合条件的 case 语句开始。所有的 case 语句行都会被执行*/ printf(“/n“); 29.#includestdioh main() int a,b; for(a=1,b=1;a=100;a+) if(b=20)break; if(b%3=1)(b+=3; continue; b-=5; printf(“%d/n“,a); (分数:4.00)_正确答案:(
28、)解析:8 解析 #includestdioh main() int a,b; for=(a=1,b=1,a=100;a+) if(b=20)break;/*如果 b20 则终止循环*/ if(b%3=1) b+=3; conlinue;/*如果 b%3=1 成证则继续执行下一次循环*/ b-=5: printf(“%a/n“,a); 四、B程序填充题/B(总题数:3,分数:18.00)30.下面程序段的功能是将形参 x 的值转换成二进制数,所得二进制数的每一位数放在一维数组中返回,二进制数的最低位放在下标为 0 的元素中,其他以此类推。 #include main(int x,int b)
29、int k=0,r,i; scanf(“%d“,x); do r=x%2; b_=r;/*第一空*/ x/=2; while(_);/*第二空*/ for(_);i=0;i-)/*第三空*/ printf(“%d“,bi); (分数:6.00)填空项 1:_ (正确答案:k+/*第一空。将余数 r 赋值给数组元素 bk并使 k 自加1,为下一次循环做准备*/)解析:x/*第二空。当 x=0 时则终止循环。当算术运算获得的值小于 1 时,变量将被赋于 0 值*/ i=k-1/*第三空。在循环体内最高位获值后,k 又自加 1 一次;故输出时需将 k 的值减 1 以使第一次输出能正确地输出最高位的值
30、*/31.下面程序是将字符串 P 中的所有字符复制到字符串 b 中,要求每复制三个字符后插入一个空格。 #includestdioh void cp(char *p,char *b) int i,k=0; while(*p) i=0; while(_)/*第一空*/ bk=*P; k+;p+;i+; if(*p) _;/*第二空*/ _;/*第三空*/ main() char a20,b20; gets(a); cp(a,b); puts(b); printf(“/n“); (分数:6.00)填空项 1:_ (正确答案:i3*P/*第一空。当复制 3 个字符后循环终止。注意此处*P 并小多余,
31、加入这一项是为了判断前要复制的字符是否为空。*/)解析:bk+=/*第二空。输入空格,并使 k 自增 1。*/ bk=/0/*第三空。在字符串末尾加上字符串结束标志。*/32.下列给定程序中,函数 fun()的功能是:读人一个字符串(长度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(“
32、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/*第二空。如果 ti内所包含的字符变量的 ASC值小于 tj内所包含的字符变量的ASC,则执行后面语句以交换其位置。*/ fun(s)/*第三空。对函数 fun(s)进
33、行调用进行排序,参数传递方式采用地址传递方式。*/五、B程序设计题/B(总题数:2,分数:16.00)33.求出 10 到 500 之内能同时被 3、7 整除的数,并输出;然后求出其和值。(分数:8.00)_正确答案:()解析:解析 #includestdioh main() int i,sum=0; for(i=10;i=500;i+)/*限定处理范围为 10500*/ if(i%3)=0(i%7)=0)/*判断是否能问时被 3、7 整除*/ printf(“%d/t“,i),sum+=i;/*输出该数并累加*/ printf(“/nsum=%d/n“,sum);/*输出和值*/ 34.采用递归调用的算法编写一个计算 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 本身,整个递归调用过程的操作请参见课本。*/