1、全国自考(高级语言程序设计)模拟试卷 9 及答案与解析一、单项选择题1 下列关于 C 语言字符数组描述正确的是( )(A)字符数组可以存放字符串(B)字符数组的下标是从 0 开始的(C)字符数组不能输出字符串(D)字符数组可以没有02 设有数组定义:char array=“Asia“;则数组 array所占用的空间为( )(A)4 个字节(B) 5 个字节(C) 6 个字节(D)7 个字节3 以下是对二维数组的正确说明的是( )(A)int3(B) float a(3,4)(C) double a14(D)float a(3)(4)4 在下列函数的参数传递方式中,可以改变实参值的参数传递方式是
2、( )(A)值传递(B)地址传递(C)返回值传递(D)A、B 和 C5 下列关于函数的递归调用描述不正确的是( )(A)函数的递归调用就是函数对自身的调用(B)向下的递归调用过程被称为是“递归过程“(C)向上携带返回表达式的过程被称为是“回溯过程 “(D)递归过程必须解决的问题有三个6 常用的数学处理类系统函数所在的头文件是( )(A)mathh(B) ctype h(C) dosh(D)stdlibh7 设 int a=6;,则执行 b=a1;语句后 b 的值是 ( )(A)3(B) 6(C) 9(D)128 表达式 8263 的值是( )(A)7(B) 5(C) 3(D)19 以下程序的输
3、出结果是(已知字母 a 的 ASC值比字母 A 的 ASC值大 32)( ) main() int i; for(i=A;iI;i+,i+) printf(“%c“,i+36); (A)DEGIK(B) egik(C) EGIK(D)degik10 以下程序的输出结果是( ) main() char a10=“123456789“),*P; int 1; i=8; p=a+i; printf(“%sn“,p-3); (A)5678(B) 6789(C) 7890(D)不确定11 当 C 的值不为 0 时,在下列选项中能正确将 C 的值赋给变量 a 和 b 的是( )(A)c=a=b(B) (a
4、=c)(b=c)(C) (a=c)(b=c)(D)a=c=b12 以下说法中正确的是( )(A)#define 和 printf 都是 C 语句(B) #define 是 C 语句,而 printf 不是(C) printf 是 C 语句,但#define 不是(D)#define 和 printf 都不是 C 语句13 若已定义:int a9,*p=a;并在以后的语句中未改变 P 的值,不能表示 a1地址的表达式是( )(A)p+1(B) a+1(C) a1(D)*p114 若有以下定义和语句: double r=99 ,*p=r; *p=r; 则以下正确的叙述是( )(A)以上两处的*p
5、含义相同,都说明给指针变量 p 赋值(B)在 “double r=99,*p=r;“中,把 r 的地址赋值给了 p 所指的存储单元(C)语句 “*p=r;“把变量 r 的值赋给指针变量 p(D)语句“*p=r;“ 取变量 r 的值放回 r 中15 C 语言早期规定建立文件缓冲区采用的形式是( )(A)缓冲文件系统(B)非缓冲文件系统(C)分页文件系统(D)AB二、填空题16 有以下程序 #includestdioh main() char s=“159“,*P ; p=s; printf(“%C“,*p+); printf(“%C“,*p+); 程序运行后的输出结果是_。17 以下程序运行时若
6、从键盘输入:10 20 30回车,输出结果是_。 #includestdioh main() int i=0,j=0,k=0; scanf(“%d%*d%d“,i,j,k); printf(“%d%d%dn“,i, j,k); 18 有如下程序 #includestdioh int rune(int a,int b) return(a+b);) main() int x=2,y=5,z=8,r; r=rune(rune(x,y),z); printf(“%dkn“,r) ; 该程序的输出结果是_。19 表示整数 X 的绝对值大于 5 时值为“真“ 的 C 语言表达式是:_。20 用来定义寄存器
7、类型变量的 C 语言保留字是_。21 分别用十进制表示整形常量-0xlf 为_。22 在 Turbo C 中语言源程序的扩展名为_。23 在函数调用过程中,如果形参是指针变量,则实参必须是_。24 判断一个字符是否是英文字母的函数是_。25 读字符串函数是_。三、程序分析题26 请在该程序段右侧写出其输出结果。 int aa33=2,4 , 6; main() int j,*p=aa00; for(j=0;j 2;j+) if(j=0) aajj+1=*p+1; else+P; print(“%d“,*p); 27 请在该程序段右侧写出其输出结果。 main() int n3,j,k,l; f
8、or(j=0;j 3;j+) nj=0; l=3: for(j=0;j l;j+) for(k=0;kl;k+) nk=nj+1: print(“%dn“,n1) ; 28 请在该程序段右侧写出其输出结果。 fun3(int x) static int a=3; a+=x; return(a); main() int k=2,m=1,n; n=fun3(k); n=fun3(m); printf(“%dn“,n);)29 请在该程序段右侧写出其输出结果。 main() char *s=“121“; int k=0,a=0,b=0; do k+: if(k%2=0) a=a+sk-0;conti
9、nue;) b=b+sk-0; a=a+sk-0;while(sk+1); printf(“k=%d a=%d b=%dn“,k,a ,b); 四、程序填充题30 以下程序的功能是:从键盘输入若干个学生的成绩,统计出最高成绩和最低成绩,当输入负数时结束输入。 #includestdioh main() float x,amax,amin ; scanf(“%f“, x); amax=x: amin=x; while( )/*第一空*/ if(_)amax=x;/*第二空*/ if(xamin)_;/*第三空*/ scanf(“%f“, x); printf(“amax=%3.2f,amin=%
10、3.2fn“,amax ,amin); 31 下面程序通过函数 average()计算数组中各元素的平均值。 float average(_,int n)/*第一空*/ int i; float avg=0.0; for(i=0;i n;i+) avg=avg+_;/*第二空*/ avg=_;/*第三空*/ return avg; main() int i,a5=2,4,6,8,10); float mean; mean=average(a,5); printf(“%fn“,mean); 32 下面程序用来输出两个字符串中较短的长度。 main() char p120,p220; int i1
11、,i2,num; gets(p1); gets(p2); i1=_; /*第一空*/ i2=_; /*第二空*/ num=(_)?i1:i2;/*第三空*/ printf(“%dn“,nurn) ; 五、程序设计题33 输入一个无符号整数,然后按用户输入的代号,分别以十进制(代号 D)、八进制(代号 O)输出和十六进制(代号 X)。34 根据 Fibonacci 数列公式:全国自考(高级语言程序设计)模拟试卷 9 答案与解析一、单项选择题1 【正确答案】 C2 【正确答案】 B3 【正确答案】 C4 【正确答案】 B5 【正确答案】 D6 【正确答案】 A7 【正确答案】 D8 【正确答案】
12、D9 【正确答案】 B【试题解析】 main() int i; for(i=A; iI ;i+ ,i+)/*i 的初始值为字母 A 的 ASC值,循环条件为iI,步进值为 2*/ printf(“%c“,i+36);/*ASC值加 36 后已进入小写字母区域*/ 10 【正确答案】 B【试题解析】 main() char a10=“123456789“,*P; int i; i=8; p=a+i; printf(“%sn“,p-3);/*打印输出的是以 p-3 为首地址的字符串*/ 11 【正确答案】 C【试题解析】 因表达式“(a=c)“和“(b=c)“的值分别是 a 和 b 的值(a ,b
13、 都不为 0)。当获得“a=c“不为 0 的判定后,表达式“(a=c)(b=c)“中的“(b=c)“将不会被执行。12 【正确答案】 C【试题解析】 #define 是宏命令,而不是 C 语句13 【正确答案】 D14 【正确答案】 D15 【正确答案】 D二、填空题16 【正确答案】 1517 【正确答案】 10300【试题解析】 #include stdioh main() int i=0,j=0 ,k=0; scanf(“%d%*d%d“,i,j,k);/*“%*d“不被识别,但仍然占位;故i,j 分别获得值 10 和 30而 k 的值默认被初始化为 0*/ printf(“%d%d%d
14、n“,i,j ,k) ; 18 【正确答案】 15【试题解析】 #include stdioh int rune(int a,int b) return(a+b); main() int x=2,y=5,z=8,r ; r=rune(rune(x,y),z);/*主函数反复嵌套调用函数 rune(),r 的实际计算过程为r=x+y+z*/ printf(“%dn“,r); 19 【正确答案】 x5x-520 【正确答案】 register21 【正确答案】 -3122 【正确答案】 c23 【正确答案】 地址表达式24 【正确答案】 isalpha()25 【正确答案】 fgets()三、程序
15、分析题26 【正确答案】 23【试题解析】 int aa33=2,4),6; main() int j,*p= aa00;for(j=0;j 2;j+) /*限定循环只有两次,J=0 一次、j=1 一次*/ if(j=0) /*第一次执行循环时,j=0 成立*/ aajj+1=*p+1; /*将“3“ 赋给 “a01“*/ else+P; /*第二次执行循环时,j=0 不成立,执行这个语句 */ printf(“%d“,*p); /*两次循环都执行,第一次打印 a00第二次打印 a01。*/ 27 【正确答案】 5【试题解析】 main() int n3,j ,k ,l; for(j=0;j
16、3;j+) nj=0; /*给数组元素赋初值“0“*/ l=3: for(j=0;j l;j+) /*限定循环三次*/ for(k=0;kl;k+) /*限定循环三次*/ nk=nj+1; /*每次循环加 1,注意每次循环 nj的值是不同的*/ printf(“%dn“,n1); 28 【正确答案】 4【试题解析】 fun3(int x) static int a=3; a+=x; /*a 获得 a+x 的值*/ return(a); /*返同 a 的值*/ main() intk=2,m=1,n; n=fun3(k); n=fun3(m); /*此处 n 获得的值是 fun3(m)的值,覆盖
17、了此前 fun3(k)的值*/ printf(“%dn“,n); 29 【正确答案】 k=2 a=3 b=2【试题解析】 main() char *s=“121“; /*获得字符数组“121“的首地址 */ int k=0,a=0,b=0: do k+; if(k%2=0) a=at sk-0;continue ; ) /*“0“以 ASC值参与运算*/ b=b+sk-0; /*数组 s内的元素以 ASC值参与运算*/ a=a+sk-0; while(sk+1); /*循环终止条件是 sk+1为空*/ printf(“k=%d a=%d b=%dn“,k,a,b); 四、程序填充题30 【正确
18、答案】 x=0/*第一空。决定输入终止的条件*/ xamax/*笫二空。比较 x 与 max 的大小,并使 amax 获得最大值*/ amin=x/*第三空。比较 x 与 amin 的大小,并使 amin 获得最小值*/31 【正确答案】 int *pa/*第一空。定义形参变量,main()函数调用 average()函数的笫一个实参变量是指针变量,故此处应定义一个指针变量*/ pai /*第二空。将数组各个元素加;因函数调用采用地址传递参数的方式,故可以这样引用 */ avg/n/*第三空。求平均值*/32 【正确答案】 strlen(P1)/*第一空。测试字符数组 p1 的长度*/ str
19、len(p2)/*第二空。测试字符数组 p2 的长度*/ ili2/*第三空。num 获得长度较小的字符串的长度值 */五、程序设计题33 【正确答案】 #includestdioh main() unsigned x; char c; scanf(“%d,%c“,x,c); switch(c)/*判断用户输入代号,并根据代号输出相应的数*/ caseD:printf(“%d“,x);break caseO:printf(“%o“,x);break; caseX:printf(“%X“,x);break; default:printf(“Input error!“); 34 【正确答案】 #includestdioh main() int i;float f22=1,1,sum=0; for(i=2;i-1=20 ;i+)/* 循环终止条件为 i-1=20,以确保所计算的 sum 的值为前 20 项的值*/ fi=fi-1+fi-2; sum+=fi/fi-1; printf(“sum=%4fn“ ,sum);