1、全国自考(高级语言程序设计)模拟试卷 5 及答案与解析一、单项选择题1 汇编程序的功能是( )(A)将汇编语言程序转换成目标程序(B)将汇编语言程序转换成高级语言程序(C)将高级语言程序转换为目标程序(D)将汇高级语言程序转换为编语言程序2 设 int x=1; a=9,b=6,c=9,d=8;执行语句: if(ab)if(c b)if(b d)x=2;else x=6; 后 x 的值是( )(A)1(B) 2(C) 6(D)不确定3 设 int a10,*p=a; 则对数组的正确引用是( )(A)ap(B) pa(C) *(p+2)(D)p+24 若内部变量在离开了定义所在的函数或复合语句后
2、,仍在生存期内。则该变量是 ( )(A)auto 变量(B) register 变量(C)局部变量(D)static 变量5 下列运算符,优先级最低的是( )(A)(B) !(C) -(D)+=6 对于文件打开方式“rb+“描述正确的是( )(A)可读写文本文件(B)只读文本文件(C)可读写二进制文件(D)只读二进制文件7 设 int a=1,b=2,c=4; 经过表达式(c=a!=b) (a=b)(c=b)运算后,a 、b和 c 的值分别是 ( )(A)1,2,0(B) 1,2,1(C) 1,2,2(D)1,2,38 若 x=100;,则表达式 x+100? x+20:x+10 的值是 (
3、)(A)110(B) 120(C) 130(D)1019 若定义了 int m,n=0, *p1=m;,则与 m=n 等价的语句是( )(A)m=*p1(B) *p1=*n(C) *p1=*n(D)*p1=*n10 若有宏定义:#define MOD(x,y)x%y 则执行下面语句后的输出结果是 int a=13,b=96; printf(“%dn“ ,MOD(b,a);( )(A)1(B) 2(C) 5(D)611 设有如下程序段 char str=“Hello!“; char *ptr; ptr=str ; 执行完以上程序段后*(ptr+6)的值为( )(A)o(B) 0(C) o(D)o
4、12 以下程序输出的结果是( ) main() int I,j,m=0 ,n=0 ; for(I=0;I 2;I+) for(j=0;j2;j+) if(j=I)m=1;n+; printf(“%dn“,n); (A)4(B) 2(C) 1(D)013 执行下面程序段后,变量 k 的值是( )(A)10(B) 30(C) 3(D)不确定14 若有以下语句: char *language=“fortran“ ,“basic“,“C“,“java“; char *q;q=language+3; 则语句 printf(“%cn“,*q;的输出是( )(A)q 的值(B)字符串“C“(C) langu
5、age3的值(D)程序错误,无法得到输出15 以下程序的执行结果是( ) #include stdioh main() printf(“%dn“,NULL); (A)-1(B) 0(C) 1(D)2二、填空题16 从计算机的角度来讲,_是计算机程序中解决问题的方法步骤。17 函数 strcmp()和函数 strcat()包含在头文件_ 中。18 函数调用自身的调用是_。19 下面程序的输出是_。 #includestdioh main() char x=0.40; printf(“%dn“,x=x 1);20 现在程序的输出是_。 #includestdioh main() int arr10
6、,j,k=0 ; for(j=0;j 10;j+) arrj=j; for(j=1;j 4;j+) k+=arrj+j; printf(“%dn“,k); 21 阅读下列程序: #includestdioh #define MAXCOUT 4 void fun() main() int cout; for(cout=1;tout=MAXCOUT ;cout+) fun(); void fun() int j=0; j+=2;printf(“%d“,j); 22 设有 int x=11;表达式(x+*1/3)的值是_。23 设有如下程序段: int j=0,sum=1; do sum+=j+;
7、while(j6); printf(“%dn“,sum); 上述程序段的输出结果是_。24 以下循环体的执行次数是_。 #includestdioh main() int j,k; for(j=0,k=1;j=k+1 ; j+=2,k-) printf(“%dn“,j);)25 下面程序段的输出结果是_。 #includestdioh int b=1: int func(int *a) *a+=b;return(*a) ;) main() int a=2,res=1; res+=func(a); printf(“%d%dn“,a ,res);三、程序分析题26 #includestdioh i
8、nt fun(int*a,int i,int j) if(ij j5) i+; j-; ai+=aj: un(a,i,j); return ai; main() int x=2,6,18,10,12,i ; for(i=0;i 5;i+) if(i=2) print(“%dn“,fun(x,0,3); 27 #includestdioh main() char b=“ABCDEFG“; char *chp=eb7; while(-chpb0) putchar(*chp); 28 #includestdioh int ast(int x,int y,int *cp,int *dp) *cp=x+
9、y; *dp=x-Y; main() int a,b,C ,d; a=4;b=3; ast(a,b,c,d); printf(“%d%dn“,c ,d); 29 #includestdioh int f1(int x,int y)return xy? x:y;) int f2(int x,int y)return xy? y:x; main() int a=4,b=3,c=5,d=2,e,f,g; e=f2(f1(a,b),f1(C,d);f=f1(f2(ab),f2(c ,d); g=a+b+c+d-e-f; printf(“%d, %d,%dn“,e,f,g) ; 四、程序填充题30 一个
10、三位整数(100999),若各位数的立方和等于该数自身,则称其为“水仙花数“(如:153=13+53+33),找出所有的这种数。 #includestdioh main() int n,a,b,c; for(c=1;c =9;c+) for(b=0;b=9 ;b+) for(a=0;_;a+)/* 第一空*/ n=_; /*第二空*/ if(a*a*a+b*b*b+c*c*c=_)/*第三空*/ printf(“%dn“,n); 31 将一个文本文件 madat 拷贝到另一个文本文件 nadat 中。 #includestdioh main() FILE*ma, *na; ma=fopen(“
11、madat“,_);/*第一空*/ na=fopen(“nadat“,“w“); while(!feof(ma)fputc(fgete(ma),_)/* 第二空*/ felose(na);_;/*第三空*/ 32 将 10 个数输入数组中,求出其中最大数和最小数并输出。 #includestdioh main() int i,max,min,a10 ; for(i=0;i 10;i+) seanf(“%d“,_);/*第一空*/ max=a0: min=a0; for(i=1;_;i+)/*第二空*/ if(aimax) max=ai; else if(ai min) _;/*第三空*/ pr
12、intf(“max=%d,min=%d“ ,max ,min); 五、程序设计题33 求出 10 到 500 之内能同时被 3、7 整除的数,并输出;然后求出其和值。34 采用递归调用的算法编写一个计算 x 的 n 次方的函数(不用写主函数调用)。全国自考(高级语言程序设计)模拟试卷 5 答案与解析一、单项选择题1 【正确答案】 A2 【正确答案】 C【试题解析】 当“ab“、“c b“ 、“bd“都成立时 x=2,只要有一个不成立就有 x=6。3 【正确答案】 C4 【正确答案】 D5 【正确答案】 D6 【正确答案】 C7 【正确答案】 B【试题解析】 因 a=b 是不成立的,c=b 不被
13、运算,C 所获得的值足表达式“a!=b“的逻辑值。8 【正确答案】 D9 【正确答案】 C10 【正确答案】 C11 【正确答案】 B12 【正确答案】 C【试题解析】 main() int I,jm=0 n=0; for(I=0;I 2;I+) for(j=0;j 2;j+) if(j=i)m=1;n+ ;/*本行语句虽然包含“n+“,但不包括在任何循环体内*/ printf(“%dn“,n): 13 【正确答案】 D【试题解析】 数组元素 s1没有初值,故其计算结果小确定。14 【正确答案】 D【试题解析】 指字符删变量的指针不能得到指针数组的首地址,出现编译错误。15 【正确答案】 B【
14、试题解析】 NULL 的 ASC值是 00000000,语句“printf(“%dn“,NULL);“要求 NULL 以整型数据输出,所以输出是 0。二、填空题16 【正确答案】 算法17 【正确答案】 stringh18 【正确答案】 递归调用19 【正确答案】 020 【正确答案】 12【试题解析】 #include stdioh main() int arr10,j,k=0; for(j=0;j 10;j+) arrj=j;j*数组以下标的值为初始值被初始化 */ for(j=1;j 4;j+)/*循环起始条件是 j=1*/ k+=arrj+j;/*k=arrj+j+k*/ printf
15、(“%dn“,k); 21 【正确答案】 2468【试题解析】 #include stdioh #define MAXCOUT 4/*宏定义,在程序编译时见到 MAXCOUT 即换成 4*/ void fun() main() int eout; for(cout=1;cout=MAXCOUT;cout+)/*循环上限为 cout=4*/ fun(); void fun() int j=0; j+=2;printf(“%d“,j); 22 【正确答案】 4【试题解析】 +运算优先级高于“*“(乘法)故可有(x+1)13=4。23 【正确答案】 16【试题解析】 int j=0,sum=1 ;
16、do sum+=j+;)/*“+“ 后置,采用先使用对象,后进行运算的规则*/ while(j6);/*循环上限为 j6*/ printf(“%dn“,sum);24 【正确答案】 1【试题解析】 #include stdioh main() int j,k; for(j=0,k=1;j=k+1 ;j+=2 ,k-)/* 变量 j 的步进值是 2,变量 k 的步值是-1。当第二次进入循环时,j=2 而 k=0 已不能满足继续执行循环体的条件 j=k+1*/ printf(“%dn“,j) ;25 【正确答案】 3 4【试题解析】 #include stdioh int b=1; int fun
17、c(int *a)/*参数传递采用地址传递的方式,函数本身可改变函数体外的变量的值*/ *a+=b;return(*a); main() int a=2,res=1 ; res+=func(a);/*根据函数“func()“ 的定义,实参必须是变量的地址 */ printf(“%d%dn“,a,res) ;/*“main()“函数内的变量 a 的值被改变*/三、程序分析题26 【正确答案】 24【试题解析】 #include stdioh int fun(int*a,int i,int j)/*此函数为采用递归算法的函数*/ if(ij j5)/*保证 i 和 j 在数组范围内当 ij 时执行
18、下列语句*/ i+;j- ; ai+=aj; fun(a,i,j);/*函数自身调用自身的一个递归调用过程*/ return ai; /*返用数组几素 ai的值*/ main() int x=2,6,18,10,12,i; for(i=0;i 5;i+) if(i=-2) printf(“%dn“,fun(x , 0,3);/*当 a=2 时打印输出 fun(x,0,3)的值*/ 27 【正确答案】 GFEDCB【试题解析】 #include stdioh main() char b=“ABCDEFG“; char*chp=b7;/*指针变量 chp 获得数组元素 b7的值*/ while(-
19、chpb0)/*逆序输出*/ putchar(*chp); 28 【正确答案】 7 1【试题解析】 #include int ast(int x,int y,int *cp),int *dp)/*关于变量 c 和 d的参数传递是地址传递的方式*/ *cp=x+y; *dp=x-y; main() int a,b),cd ; a=4;b=3; ast(a,b,c,d);/*调用函数 ast()*/ prinlf(“%d%dn“,c,d); 29 【正确答案】 4,3,7【试题解析】 #include stdioh int f1(int x,int y)return xy? x:y; /* 如果
20、xy 则输出 x*/ int f2(int x,int y)return xy? y:x; /*如果 xy 则输出 y*/ main() int a=4,b=3,c=5,d=2,e,f,g; e=f2(f1(a, b),f1(c,d);f=f1(f2(a,b),f2(c,d);/* 嵌套调用函数 f1 和 f2*/ g=a+b+c+d-e-f; printf(“%d,%d,%dn“,e ,f,g); 四、程序填充题30 【正确答案】 a =9/*第一空。明确个位数的范围 (从 09)*/ 100*c+10*b+a/*第二空。计算并求出这个三位数*/ n/*第三空。将各位数的立方和与这个三位数进
21、行比较以确定其是否为 “水仙花数“*/31 【正确答案】 “r“/*第一空。以只读方式打开文件 madat*/ na/*第二空。向文件 nadat 输入从文件 madat 得到的字符*/ fclose(ma)/*第三空。关闭所有文件以结束复制过程*/32 【正确答案】 ai/*第一空。给数组的元素输入内容*/ i10/*第二空。循环并逐项比较*/ min=ai/*第三空。min 获得相对较小值*/五、程序设计题33 【正确答案】 #includestdioh main() int i,sum=0 ; for(i=10;i=500;i+)/*限定处理范围为 10500*/ if(i%3)=0(i%7)=0)/*判断是否能问时被 3、7 整除*/ printf(“%dt“,i),sum+=i;/*输出该数并累加*/ printf(“nsum=%dn“,sum);/*输出和值*/ 34 【正确答案】 double power(double x,int n) iif(n=0)return(1);/*当 n=0 时返回值 1*/ else return(x*power(x,n-1) ;/*递归调用函数 power 本身,整个递归调用过程的操作请参见课本。*/