1、高级语言程序设计真题 2005 年下半年及答案解析(总分:100.00,做题时间:90 分钟)一、B单项选择题/B(总题数:20,分数:20.00)1.下列不属于 C 语言保留字的是( )(分数:1.00)A.charB.whileC.typedefD.look2.下列关于 C 语言的叙述错误的是( )(分数:1.00)A.英文字母大小写不加以区分B.不同类型的变量可以出现在同一个表达式中C.在赋值表达式中赋值号两边的类型可以不同D.某些运算符在不同的场合可以有不同的含义3.下列转义字符中错误的是( )(分数:1.00)A./000B./14C./x111D./24.执行语句 printf(“
2、%x“,-1);后输出结果是( )(分数:1.00)A.-1B.-ffffC.1D.ffff5.设 float a=2,b=4,c=3;,以下 C 语言表达式与代数式计算结果不一致的是( )(分数:1.00)A.(a+*c/2B.(1/2)*(a+*cC.(a+*c*1/2D.c/2*(a+6.设 int a=10,b=20,c=30;条件表达式 ab? a=5:c 的值是( )(分数:1.00)A.5B.10C.20D.307.设 inta=9,b=6,c;,执行语句 c=a/b+0.8;后 c 的值是( )(分数:1.00)A.1B.1.8C.2D.2.38.执行语 for(i=1;i+4
3、;);后 i 的值是( )(分数:1.00)A.3B.4C.5D.不确定9.在位运算中,操作数左移一位,其结果相当于操作数( )(分数:1.00)A.乘以 2B.除以 2C.乘以 4D.除以 410.使用语句 scanf(“a=%f,b=%f“,a,b);输入变量 a、b 的值(口代表空格),正确的是( )(分数:1.00)A.125,2.4B.1.25 口 2.4C.a=1.25,b= 2.4D.a=1.25 口 b=2.411.下列说法中错误的是( )(分数:1.00)A.C 语言中循环嵌套的层数没有限定B.C 语言中的内部函数只能在本文件中被调用C.用 typedef 语句定义的数据类型
4、名称必须是大写字母D.C 语言中的 continue 语句,可以通过改变程序的结构而省略12.设 char s10,*p=s;,下列语句中错误的是( )(分数:1.00)A.p=s+5;B.s=p+s;C.s2=p4;D.*p=s0;13.设 enum weeksun,mon,tue,wed,thu,fri,satday;,正确的赋值语句是( )(分数:1.00)A.sun=0;B.sun=day;C.mon=sun+1;D.day=sun;14.若用数组名作为函数调用时的实参,则实际上传递给形参的是( )(分数:1.00)A.数组的第一个元素值B.数组元素的个数C.数组中全部元素的值D.数组
5、首地址15.下列错误的是( )(分数:1.00)A.char s=“China“;B.char s10=“China“;C.char s10;s=“China“;D.char s10=c,h,i,n,a;16.在 C 语言中,有值函数的数据类型是指( )(分数:1.00)A.函数形式参数的数据类型B.函数返回值的数据类型C.调用该函数时的实参的数据类型D.任意指定的数据类型17.设 struct short a; char b; float c; cs; 则 sizeof(cs)的值是( )(分数:1.00)A.4B.5C.6D.718.设 intx=1,2,3,4,5,6,7,8,9,0),
6、*p=x,k; 且 0k10,则对数组元素 xk的错误引用是( )(分数:1.00)A.p+kB.*(x+C.xp-x+kD.*(19.设 #define N 3 #define Y(n)(N+1)*n) 则表达式 2*(N+Y(54+1)的值是( )(分数:1.00)A.42B.48C.54D.出错20.关于主函数的形式参数,下列说法正确的是( )(分数:1.00)A.可以有两个B.类型可以是实型C.不可以由用户自己定义名字D.是在程序编译时获得实际值二、B填空题/B(总题数:10,分数:20.00)21.可以将被调函数中获得的值返回给主调函数的语句是 1。(分数:2.00)填空项 1:_2
7、2.设 int x=2,y=1;则表达式 x+y 的值是 1。(分数:2.00)填空项 1:_23.若未指定局部变量的存储类型,则其隐含的存储类型是 1。(分数:2.00)填空项 1:_24.在执行循环结构或 switch 结构时,能够立即退出该结构的语句是 1。(分数:2.00)填空项 1:_25.设 int a=-3,b=7,c=-1;则执行(a=0)(a=a%bb/c);后变量 a 的值是 1。(分数:2.00)填空项 1:_26.设 int a,b,c;则执行 a=(b=3,c=5,b=10);后变量 a 的值是 1。(分数:2.00)填空项 1:_27.设 int a=100,*p1
8、=a,*p2=p1;,则表达式*p2 的值是 1。(分数:2.00)填空项 1:_28.静态型外部变量的作用域是 1。(分数:2.00)填空项 1:_29.设 int a23=1,2,3,4,5,6; 则数组元素 a10的值是_。(分数:2.00)填空项 1:_30.函数调用时,若形参是一个变量,而对应的实参是一个有确定值的表达式,则函数参数的传递方式是 1 传递。(分数:2.00)填空项 1:_三、B程序分析题/B(总题数:5,分数:25.00)31.mian() int i; for(i=1;i3;i+)f(i); f(int j) static int a=100; int k=1; +
9、k; printf(“%d/n“,j+a+k); a-=2; (分数:5.00)_32.#includestdioh 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“); (分数:5.00)_33.struct porb char*name; int age; s=“LiHua“,18,“WangXin“,25,“LiuGuo“,21; #define N(sizeof(s)/sizeof(s0) void f(struct
10、porb a,int n); main() f(s,N); void f(struct porb a,int n) int i; for(i=0;in;i+) printf(“%s:d/n“,ainame,aiage); (分数:5.00)_34.void LE(int*a,int b) int x=*a: printf(“%d/t%d/n“,*a,b); *a=b;b=x; main() int x=10,y=25; LE(x,y); printf(“%d/t%d/n“,x,y); (分数:5.00)_35./*设从键盘输入:420回车*/ #includestdioh main() cha
11、r c; while(c=getchar()!=/n) switch(C-0) case 0: case 1:putchar(c+2); case 2:putchar(c+3);break; case 3:putchar(c+4); default:putchar(c+1);break; printf(“/n“); (分数:5.00)_四、B程序填充题/B(总题数:3,分数:18.00)36.一个三位整数(100999),若各位数的立方和等于该数自身,则称其为“水仙花数“(如:153=13+5 3+33),找出所有的这种数。 main() int n,a,b,c;/*n、a、b 和 C 分别为
12、三位数自身及其个位、十位和百位*/ for(c=1;c=9;c+) for(b=0;b=9;b+) for(_;a+)/*第一空*/ n=_;/*第二空*/ if(a*a*a+b*b*b+e*c*c=_)/*第三空*/ printf(“%d/n“,n); (分数:6.00)填空项 1:_37.输入一个数字(范围在 09 之间,若不在此范围内显示输入错),输出对应的英文单词(Zero,One,Two,Nine)。 main() int i; char *digit10=“Zero“,“One“,“Two“,“Three“,“Four“, “Five“,“Six“,“Seven“,“Eight“,
13、“Nine“; scanf(“%d“,_);/*第一空*/ printf(“%d“,i); if(_)/*第二空*/ printf(“%s/n“,digit_);/*第三空 */ else printf(“Input error!/n“); (分数:6.00)填空项 1:_38.将一个文本文件(madat)拷贝到另一个文本文件(niudat)中。 #includestdioh main() FILE*ma,*niu; mazfopen(“madat“,_);/*第一空*/ niu=fopen(“niudat“,“w“); while(!feof(ma)fputc(fgetc(ma),_);/*
14、第二空*/ fclose(niu);_;/*第三空*/ (分数:6.00)填空项 1:_五、B程序设计题/B(总题数:3,分数:17.00)39.输入某学生的数学(math)、英语(english)和 C 语言(c)的成绩,输出该学生这三门课的成绩、总成绩(sum)和平均成绩(aver)。(分数:5.00)_40.按下列要求分别写出两个函数(不用写主函数)(1)计算 n! 计算公式:n!=123n 函数首部为 long fac(int n)(2)调用上述函数计算 计算公式: 函数首部为 long cmk(int m,int k)(分数:6.00)_41.在一个二维数组(定义为 int a55;
15、)中形成并按下列形式输出矩阵各元素的值。 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)_高级语言程序设计真题 2005 年下半年答案解析(总分:100.00,做题时间:90 分钟)一、B单项选择题/B(总题数:20,分数:20.00)1.下列不属于 C 语言保留字的是( )(分数:1.00)A.charB.whileC.typedefD.look 解析:2.下列关于 C 语言的叙述错误的是( )(分数:1.00)A.英文字母大小写不加以区分 B.不同类型的变量可以出现在同一个表达式中C.在赋值表达式中赋值号两边的类型可以不
16、同D.某些运算符在不同的场合可以有不同的含义解析:3.下列转义字符中错误的是( )(分数:1.00)A./000B./14C./x111 D./2解析:4.执行语句 printf(“%x“,-1);后输出结果是( )(分数:1.00)A.-1B.-ffffC.1D.ffff 解析:5.设 float a=2,b=4,c=3;,以下 C 语言表达式与代数式计算结果不一致的是( )(分数:1.00)A.(a+*c/2B.(1/2)*(a+*c C.(a+*c*1/2D.c/2*(a+解析:6.设 int a=10,b=20,c=30;条件表达式 ab? a=5:c 的值是( )(分数:1.00)A
17、.5 B.10C.20D.30解析:7.设 inta=9,b=6,c;,执行语句 c=a/b+0.8;后 c 的值是( )(分数:1.00)A.1 B.1.8C.2D.2.3解析:8.执行语 for(i=1;i+4;);后 i 的值是( )(分数:1.00)A.3B.4C.5 D.不确定解析:9.在位运算中,操作数左移一位,其结果相当于操作数( )(分数:1.00)A.乘以 2 B.除以 2C.乘以 4D.除以 4解析:10.使用语句 scanf(“a=%f,b=%f“,a,b);输入变量 a、b 的值(口代表空格),正确的是( )(分数:1.00)A.125,2.4B.1.25 口 2.4C
18、.a=1.25,b= 2.4 D.a=1.25 口 b=2.4解析:11.下列说法中错误的是( )(分数:1.00)A.C 语言中循环嵌套的层数没有限定B.C 语言中的内部函数只能在本文件中被调用C.用 typedef 语句定义的数据类型名称必须是大写字母 D.C 语言中的 continue 语句,可以通过改变程序的结构而省略解析:12.设 char s10,*p=s;,下列语句中错误的是( )(分数:1.00)A.p=s+5;B.s=p+s; C.s2=p4;D.*p=s0;解析:13.设 enum weeksun,mon,tue,wed,thu,fri,satday;,正确的赋值语句是(
19、)(分数:1.00)A.sun=0;B.sun=day;C.mon=sun+1;D.day=sun; 解析:14.若用数组名作为函数调用时的实参,则实际上传递给形参的是( )(分数:1.00)A.数组的第一个元素值B.数组元素的个数C.数组中全部元素的值D.数组首地址 解析:15.下列错误的是( )(分数:1.00)A.char s=“China“;B.char s10=“China“;C.char s10;s=“China“; D.char s10=c,h,i,n,a;解析:16.在 C 语言中,有值函数的数据类型是指( )(分数:1.00)A.函数形式参数的数据类型B.函数返回值的数据类型
20、 C.调用该函数时的实参的数据类型D.任意指定的数据类型解析:17.设 struct short a; char b; float c; cs; 则 sizeof(cs)的值是( )(分数:1.00)A.4B.5C.6D.7 解析:18.设 intx=1,2,3,4,5,6,7,8,9,0),*p=x,k; 且 0k10,则对数组元素 xk的错误引用是( )(分数:1.00)A.p+k B.*(x+C.xp-x+kD.*(解析:19.设 #define N 3 #define Y(n)(N+1)*n) 则表达式 2*(N+Y(54+1)的值是( )(分数:1.00)A.42B.48 C.54D
21、.出错解析:20.关于主函数的形式参数,下列说法正确的是( )(分数:1.00)A.可以有两个 B.类型可以是实型C.不可以由用户自己定义名字D.是在程序编译时获得实际值解析:二、B填空题/B(总题数:10,分数:20.00)21.可以将被调函数中获得的值返回给主调函数的语句是 1。(分数:2.00)填空项 1:_ (正确答案:return 或返回语句)解析:22.设 int x=2,y=1;则表达式 x+y 的值是 1。(分数:2.00)填空项 1:_ (正确答案:3)解析:23.若未指定局部变量的存储类型,则其隐含的存储类型是 1。(分数:2.00)填空项 1:_ (正确答案:auto 型
22、或自动型)解析:24.在执行循环结构或 switch 结构时,能够立即退出该结构的语句是 1。(分数:2.00)填空项 1:_ (正确答案:break)解析:25.设 int a=-3,b=7,c=-1;则执行(a=0)(a=a%bb/c);后变量 a 的值是 1。(分数:2.00)填空项 1:_ (正确答案:-3)解析:26.设 int a,b,c;则执行 a=(b=3,c=5,b=10);后变量 a 的值是 1。(分数:2.00)填空项 1:_ (正确答案:10)解析:27.设 int a=100,*p1=a,*p2=p1;,则表达式*p2 的值是 1。(分数:2.00)填空项 1:_ (
23、正确答案:100)解析:28.静态型外部变量的作用域是 1。(分数:2.00)填空项 1:_ (正确答案:本文件)解析:29.设 int a23=1,2,3,4,5,6; 则数组元素 a10的值是_。(分数:2.00)填空项 1:_ (正确答案:4)解析:30.函数调用时,若形参是一个变量,而对应的实参是一个有确定值的表达式,则函数参数的传递方式是 1 传递。(分数:2.00)填空项 1:_ (正确答案:值)解析:三、B程序分析题/B(总题数:5,分数:25.00)31.mian() int i; for(i=1;i3;i+)f(i); f(int j) static int a=100; i
24、nt k=1; +k; printf(“%d/n“,j+a+k); a-=2; (分数:5.00)_正确答案:()解析:103 10232.#includestdioh 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“); (分数:5.00)_正确答案:()解析:2 5 9 1433.struct porb char*name; int age; s=“LiHua“,18,“WangXin“,25,“LiuGuo“,21; #
25、define N(sizeof(s)/sizeof(s0) void f(struct porb a,int n); main() f(s,N); void f(struct porb a,int n) int i; for(i=0;in;i+) printf(“%s:d/n“,ainame,aiage); (分数:5.00)_正确答案:()解析:LiHua:18 WangXin:25 LiuGuo:2134.void LE(int*a,int b) int x=*a: printf(“%d/t%d/n“,*a,b); *a=b;b=x; main() int x=10,y=25; LE(x,
26、y); printf(“%d/t%d/n“,x,y); (分数:5.00)_正确答案:()解析:10 25 25 2535./*设从键盘输入:420回车*/ #includestdioh main() char c; while(c=getchar()!=/n) switch(C-0) case 0: case 1:putchar(c+2); case 2:putchar(c+3);break; case 3:putchar(c+4); default:putchar(c+1);break; printf(“/n“); (分数:5.00)_正确答案:()解析:5523四、B程序填充题/B(总题
27、数:3,分数:18.00)36.一个三位整数(100999),若各位数的立方和等于该数自身,则称其为“水仙花数“(如:153=13+5 3+33),找出所有的这种数。 main() int n,a,b,c;/*n、a、b 和 C 分别为三位数自身及其个位、十位和百位*/ for(c=1;c=9;c+) for(b=0;b=9;b+) for(_;a+)/*第一空*/ n=_;/*第二空*/ if(a*a*a+b*b*b+e*c*c=_)/*第三空*/ printf(“%d/n“,n); (分数:6.00)填空项 1:_ (正确答案:第一空:a=0;a=9 或 a=0;a0)解析:第二空:100
28、*c+10*b+a 第三空:n37.输入一个数字(范围在 09 之间,若不在此范围内显示输入错),输出对应的英文单词(Zero,One,Two,Nine)。 main() int i; char *digit10=“Zero“,“One“,“Two“,“Three“,“Four“, “Five“,“Six“,“Seven“,“Eight“,“Nine“; scanf(“%d“,_);/*第一空*/ printf(“%d“,i); if(_)/*第二空*/ printf(“%s/n“,digit_);/*第三空 */ else printf(“Input error!/n“); (分数:6.00
29、)填空项 1:_ (正确答案:第一空:n)解析:第二空:i=0i=9 第三空:i38.将一个文本文件(madat)拷贝到另一个文本文件(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)五、B程序设计题/B(总题
30、数:3,分数:17.00)39.输入某学生的数学(math)、英语(english)和 C 语言(c)的成绩,输出该学生这三门课的成绩、总成绩(sum)和平均成绩(aver)。(分数:5.00)_正确答案:()解析:main() float math,english,C,sum,aver; scanf(“%f%f%,math,english,C); sum=math+english+C; aver=sum/3: printf(“math=%If,english=%If,C=%If,sum=%If,aver=%2f/n“, math,english,C,sum,aver); 40.按下列要求分别
31、写出两个函数(不用写主函数)(1)计算 n! 计算公式:n!=123n 函数首部为 long fac(int n)(2)调用上述函数计算 计算公式: 函数首部为 long cmk(int m,int k)(分数:6.00)_正确答案:()解析:(1) long fac(int n) long f=1;int i; for(i=1;i=n;i+)f*=i; return f: (2) long cmk(int m,int k) return fac(m)/fac(k)/fac(m-k); 41.在一个二维数组(定义为 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“)