1、全国自考(高级语言程序设计)模拟试卷 8 及答案与解析一、单项选择题1 在函数内定义变量时,存储类型符可省略的是(A)static(B) extern(C) auto(D)register2 以下运算符中,优先级最低的是(A)(B)(C)(D)3 下列说法中正确的是(A)字符0是字符串的结束标记(B)字符 0是字符串的结束标记(C)字符 o是字符串的结束标记(D)字符o是字符串的结束标记4 若当前文件目录为 C:tc,在 C 语句中下列能表示文件 tcc 的是(A)tcc(B) C:tctcc(C) Ctctcc(D)Ctcc5 在定义了数组 int a610之后,对数组元素的引用不正确的是(
2、A)*(a6+2)(B) a68(C) *(a61+4)(D)a6+56 以下程序输出的结果是 #includestdioh int fun(int k) if(k0)fun(k-1);printf(“%d“,k); main() int w=3;fun(w); printf(“n“); (A)3 2 1 0(B) 0 1 2 3(C) 2 1 0(D)0 1 27 下面程序段执行后输出的结果是( ) #include stdio h main() int i; for(i=1;i8 ;i+) if(i%3)printf(“*“);continue; printf(“#“); printf(“
3、n“); (A)*#*#*#(B) *#*#*(C) *#*#*(D)*#*8 下面程序段执行后输出的结果是( ) #include stdio h main() int a22=1, 2),5,7) ,*P,i; p=a00 ; for(i=0;i 2;i+) “P+=i+1: printf(“%d“, *(p-2); (A)1(B) 2(C) 5(D)79 设 char *s=“china“;则 printf(“%s,%c,%cn“ , s,*s,s3);的输出是( )(A)china,c,n(B) china, china,i(C) c,c ,n(D)china,china,n10 若
4、x 为 int 型变量,则执行以下语句后,x 的值为( ) x=6; x=+x-=x*x(A)6(B) -24(C) 36(D)-6011 fgetc 函数是作为一个从指定文件读入一个字符的函数,下列有关描述正确的是( )(A)只能读二进制文件(B)只能读文本文件(C)其参数是一个指针变量(D)其参数是一个字符串12 下列语句中把 P 定义为一个文件指针的是 ( )(A)FILE *P(B) FILE p(C) file P(D)file *P13 在 C 语言中,被视为程序模块的是( )(A)语句(B)行语句(C)程序语句块(D)函数14 下列关于 continue 和 break 的描述正
5、确的是( )(A)continue 只能用于循环体中(B) break 只能用于循环体中(C) continue 只是一个语句标记(D)break 只能用于 switch 语句块中15 下列关于 if 和 else 的配对规则描述正确的是( )(A)else 总是和前面最远的 if 配对(B) else 总是和前面最近的 if 配对(C) if 和 else 的配对按程序缩进格式进行(D)else 可以和前面所有的 if 配对二、填空题16 可以将被调函数中获得的值返回主调函数的语句是_。17 设 int x=2,y=1 ;则表达式 x-y 的值是_ 。18 外部静态变量的作用域是_。19 函
6、数调用时,若实参为一个确定的值,则函数参数的传递方式是_。20 设 int a23=2,4,6,8,10,12);,则数组元素 a10的值是_。21 设 int a,b,c ;,则执行 a=(b=3,c=4,a=5 ,b=8);之后变量 a 的值是_。22 22.以下程序的输出结果是_。 #includestdioh main() int a,b,d=241 ; a=d/100%9;/*“/“ 和“%“的优先级相同,先进行“/运算“*/ b=(-1)(-1;/*b 所获得的是逻辑值。*/ printf(“%d, %dn“,a,b); 23 以下程序的输出结果是_。 #includestdioh
7、 main() int i; for(i=1;i =5;i+)(if(i%2)printf(“*“); else continue; printf(“#“); 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“); 25 表达式“sizeof(double)“ 的值的类型是_。三、程序分析题26 #includ
8、estdioh void fun(int m,int n,int ar4 ,int*bar) int i,j,x; for(i=0;i 3;i+) x=ari0; for(j=0;j 3;j+) bari=X; main() int a34=12,41,36,28,19 ,33,15, 27,3,27,19,1) ,b3,i; fun(3,4, a,b); for(i=0;i 3;i+)printf(“%4d“,bi) ; printf(“n“); 27 #includestdioh void swap(int x,int y) int t; t=x; x=y; y=t; printf(“%d
9、%d“,x,y); main() int a=3,b=4; swap(a,b); printf(“%d%dn“,a ,b); 28 #includestdioh main() char *a=“12134211“; int v1=0,v2=0,v3=0,v4=0,k; for(k=0;k=strlen(a);k+) switch(*a+) default:v4+; case1:v1+ ; case3:v3+ ; case2:v2+ ;) printf(“v1=%d,v2=%d,v3=%d ,v4=%dn“,v1 ,v2,v3,v4);29 #includestdioh int fun(int
10、h) static int a3=1,2,3); int k; for(k=0;k3;k+)ak+=ak-h ; for(k=1;k3;k+)printf(“%dt“ ,ak); return(ah); main() int t=1;fun(fun(t);四、程序填充题30 输入一个字符串,(换行为结束标志)统计数字(09 不单独统计)、空白和其他字符出现的次数。 #includestdio. h main() char C; int_;/*第一空*/ while(c=getchar()!=n) if(_)/*第二空*/ digit+;else if(c=“c=t)+blank ; else_
11、;/*第三空*/ printf(“digit=%d,blank=%d,other=%d“ ,digit,blank,other); 31 下面程序的作用是求以下算式中 X、Y、Z 的值,请在“_“ 处填入正确的内容。 main() int X,Y,Z,j,result=768; for(x=0 ;_;x+) /* 第一空*/ for(y=0;y10;y+) for(z=0;z10;z+) j=( )+(100*y+10*z+z); /* 第二空*/ if(_) /*第三空*/ printf(”X=%d ,Y=%d , Z=%dn”,x,y,z); 32 在 C 盘根目录下创建一个名为”c. t
12、xt” 的文本文件,文本文件的内容从键盘读取,直到遇到“n“(回车键)为止。程序清单如下: #includestdioh #included_/*第一空 */ void main() FILE *fp; char c; if(fp=fopen(“C:c.txt“,“_“)=NULL)/*第二空*/ printf(“can not open file!n“);exit(0);) while(_)!=n)/*第三空*/ fput(c,fp); fclose(fp); 五、程序设计题33 从 a 盘根目录下名为 “string. txt“的文本文件读取前 20 个字符组成字符串在屏幕上显示输出。34
13、 编写一个程序,用循环结构输出以下图形。 全国自考(高级语言程序设计)模拟试卷 8 答案与解析一、单项选择题1 【正确答案】 C2 【正确答案】 C3 【正确答案】 A4 【正确答案】 A5 【正确答案】 D6 【正确答案】 B【试题解析】 #include stdioh int fun(int k) if(k0)fun(k-1); printf(“%d“,k); /*这是一个递归调用过程,先输出的是处于最底层的一次调用;即当 k=1 时调用函数 fun()时的输出结果*/ main() int w=3;fun(w);/*调用函数 fun()*/ printf(“n“); 7 【正确答案】 B
14、【试题解析】 #include stdioh main() int i; for(i=1;i 8;i+)/*循环条件为 i8,步进值为 1*/ if(i%3)printf(“*“); continue;/*如果能被 3 整除打印输出“*“,并跳过后面的语句直接执行下次徨*/ printf(“#“);/*如果不能被 3 整除打印输出“#“*/ printf(“n“); 8 【正确答案】 C【试题解析】 #include stdioh main() int a22=1,2 ,5,7,*P,i; p=a00; for(i=0;i 2;i+)/*循环条件为 i2,步进值为 1*/ *p+=i+1;/*
15、赋值无效*/ printf(“%d“,*(p-2) ; 9 【正确答案】 A10 【正确答案】 B【试题解析】 自反赋值运算符是自右向左结合的。11 【正确答案】 C12 【正确答案】 A13 【正确答案】 D14 【正确答案】 A15 【正确答案】 B二、填空题16 【正确答案】 return( 表达式 );17 【正确答案】 118 【正确答案】 从定义点到程序结束19 【正确答案】 值传递20 【正确答案】 821 【正确答案】 822 【正确答案】 2,1【试题解析】 /和“%“的优先级相同,先进行 “/“运算,而 b 所获得的是逻辑值。23 【正确答案】 *#*#*#$【试题解析】
16、#include stdioh main() int i; for(i=1;i =5;i+)/*i 从 1 到 5 进行 5 次循环*/ if(i%2)printf(“*“);/*如果 i 是奇数则打印输出 “*“*/ else continue; printf(“#“);/*如果 i 是偶数则打印输出 “#“*/ printf(“$n“);/*结尾打印“$“*/ 24 【正确答案】 425 【正确答案】 int【试题解析】 sizeof(double) 的返回值是整型值,故其为 int 型表达式。三、程序分析题26 【正确答案】 12 19 3【试题解析】 #include stdioh v
17、oid fun(int m,int n,int ar4,int*bar)/*定义函数并定义其形参变最,其中数组 ar 是一个每行只有 4 个元素的数组*/ int i, j,x; for(i=0;i m;i+) x=ari0; for(j=0;j n;j+) barj=x; main() int a34=“12,41,36,28,19 ,33,15,27 ,3 ,27,19,1),b4,i ; fun(3,4,a,b) ; for(i=0;i 3;i+)printf(“%4d“,bi);/*采用格式化输出,以 4 位的宽度输出褴数 bi,左边不是的位数以空格填充* printf(“n“); 2
18、7 【正确答案】 4 3 3 4【试题解析】 #include stdioh void swap(int x,int y)/*形参为整型变量,参数传递的方式为非地址传递方式*/ int t; t=x;x=y ;y=h printf(“%d%d“,x,y); main() int a=3,b=4; swap(a,b);/*调用 swap()函数*/ printf(“%d%dn“,a,b);/*对函数 swap()的调用并没有政变变量 a 和 b 的值*/ 28 【正确答案】 v1=3,v2=5 ,v3=4,v4=1【试题解析】 #include stdioh main3() char *a=“1
19、2131211“; int v1=0,v2=0,v3=0,v4=0,k; for(k=0;kstrlen(a); k+)/*,循环被终止的条件是 k 的值大于字符串 a 的长度 8*/ switch(*a+)/*选择的条件是数组 a 的元素,并且 a 作为于指针变量有一个自增1 运算*/ default:v4+; case1:v1+; case3:v3+; case2:v2+/*因没有 break 语句,从符介条什的语句开始,每一行 case 语句都会被执行*/ printf(“vt=%d,v2=%d ,v3=%d,v4=%dn“ ,v1,v2,v3,v4); 29 【正确答案】 3 5 3
20、7【试题解析】 #include stdioh int fun(int h) static int a3=1,2,3;/*定义一个静态数组 a。每次使用其元素退出后,值都会被保留*/ int k; for(k=0;k3;k+)ak+=ak-h ; for(k=1;k3;k+)printf(“%dt“,ak); return(ah); main() int t=1;fun(fun(t);) 四、程序填充题30 【正确答案】 digit=0 , blank=0,other=0/*第一空。*/ 定义三个变量并赋以 0 的初值,以分别记录三种类型字符的个数。 c=0c=9/* 第二空。判断字符是否为数
21、字,满足条件就是数字。 */ other+/*第三空。如上述两个条件都不能满足,则说明该字符为其他字符;变量other 自加 1 以做记录。*/31 【正确答案】 x10/*第一空,因 x 可能是 0 9 之间的任意数字,故循环上限条件是 x10*/100*x+10*y+z/*第二空,此处为算式中加数 XYZ 的数学表达式*/ j=resuh /*第三空,判定计算结果是否满足算式要求*/32 【正确答案】 stdlibh/*第一空。“exit(0)“函数所在的头文件是“stdlihh“ ,故需在编译时加入“stdlihh“头文件*/w/*第二空,“W“表示的打开文件的模式,若文件不存在则自动建
22、立一个新文件接受写入数据*/ c=getchar()/*第三空,此处是一个判定条件,判定从键盘输入数据是否满足条件*/五、程序设计题33 【正确答案】 #includstdioh #includestdlib h/*因包含函数 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 是显示器输出设备对应的文件型指针*/34 【正确答案】 #includestdioh #includestringh void main() int i,j,k; for(i=0;i5 ;i+)/*循环主体,以确定行数*/ for(k=0;ki;k+)/*次级循环的第一个循环体,确定并输出空格的数目*/ printf(“); for(j=0;j9-2*i;j+)/*次级循环的第 522 个循环体,确定并输 in“#“的数日*/ printf(“%c“,#); printf(“n“);