1、高级语言程序设计真题 2009 年下半年及答案解析(总分:100.00,做题时间:90 分钟)一、单项选择题(总题数:15,分数:30.00)1.主函数头中的“main”是( )A保留字 B函数名C变量名 D类型名(分数:2.00)A.B.C.D.2.下列运算符中优先级最高的是( )A?: B&C| D!(分数:2.00)A.B.C.D.3.设 static int a;,执行表达式(a=1)&(a=-1)&(a=2)后,a 的值是( )A-1 B0C1 D2(分数:2.00)A.B.C.D.4.设 int a,b;,与 a+=b+;等价的是( )Aa=b+; Ba=+b;Ca=a+b+; D
2、a=a+b;(分数:2.00)A.B.C.D.5.关于宏定义命令,叙述正确的是( )A在程序编译前进行宏替换 B在程序编译时进行宏替换C在程序编译后进行宏替换 D在程序运行时进行宏替换(分数:2.00)A.B.C.D.6.下列表达式值为 0 的是( )A5/2 B2&5C!2|5 D2&5(分数:2.00)A.B.C.D.7.对循环结构正确的叙述是( )Ado-while 循环体可能被执行 0 次 Bdo-while 循环体至少被执行 1 次Cwhile 循环体不可能被执行 0 次 Dfor 循环体不可能被执行无限次(分数:2.00)A.B.C.D.8.下列数组定义并初始化正确的是( )Ain
3、t s=(1,2,3,4,5); Bint s5=1,2,3,4,5;Cint s2+3=(1,2,3); Dint s(5)=(1,2,3);(分数:2.00)A.B.C.D.9.设 char s10;,能将字符串“+-*/”正确输入的语句是( )Ascanf(“%s“,s); Bscanf(“%s“,*s);Cscanf(“%s“,s0); Dscanf(“%s“,s10);(分数:2.00)A.B.C.D.10.对于 C 语言中的函数,正确的叙述是( )A两个函数可以相互调用,但不能自己调用自己B程序执行可以始于任何一个函数,但结束必须在主函数C两个函数既可以定义成并列关系又可以定义成嵌
4、套关系D一个 C 程序可以由多个文件组成,一个文件又可以由多个函数组成(分数:2.00)A.B.C.D.11.设 int m5,*p=m;,与元素 m2等价的是( )Am+2 B*m+2C*(p+2) D*p+2(分数:2.00)A.B.C.D.12.设 int 33=1,2,3),4,5,6;,元素 a12的值是( )A0 B1C4 D6(分数:2.00)A.B.C.D.13.设 typedef int ARR10;,与 ARR a,*b;等价的定义是( )Aint a,b; Bint a,*b;Cint a10,*b; Dint a10,*b10;(分数:2.00)A.B.C.D.14.设
5、 int n,p=0;,与语句 if(n!=0)p=1;等价的是( )Aif(n)p=1; Bif(n=1)p=1;Cif(n!=1)p=1; Dif(!n)p=1;(分数:2.00)A.B.C.D.15.文件使用方式“rb+“的含义是( )A对文本文件只读 B对文本文件读和写C对进制文件读和写 D对二进制文件只写(分数:2.00)A.B.C.D.二、填空题(总题数:10,分数:20.00)16.执行 printf(“%d/n“,1+!2+(3=4)+5/6+7%8);后的输出结果是 1。(分数:2.00)填空项 1:_17.设 int m=0;,执行表达式 m|(m=2)|(m=3)|(m=
6、4)后,m 的值是 1。(分数:2.00)填空项 1:_18.设 int n;,“n 的值能同时被 3 和 5 整除”的逻辑表达式是 1。(分数:2.00)填空项 1:_19.执行循环语句 for(0;)printf(“Happy!/n“);后,输出“Happy!”的行数是 1。(分数:2.00)填空项 1:_20.设宏定义#define K 2+3 执行 printf(“%d/n“,K/K);后的输出结果是_。(分数:2.00)填空项 1:_21.设 int n;,执行 for(n=0;n=0;n+)n=0;后,循环体被执行的次数是 1。(分数:2.00)填空项 1:_22.执行 print
7、f(“%d/n“,5&5-3&4);后的输出结果是 1。(分数:2.00)填空项 1:_23.表示空类型(或称无类型)的保留字是 1。(分数:2.00)填空项 1:_24.设 char*strp=“CHINA“;,执行 printf(“%s/n“,strp+3);后的输出结果是 1。(分数:2.00)填空项 1:_25.使用系统函数对两个字符串进行比较,该系统函数的名字是 1。(分数:2.00)填空项 1:_三、程序分析题(总题数:4,分数:16.00)26.void main()int i,a5,*p;for(i=4;i=0;i-)*(a+i)=i;for(p=a;pa+5;p+)print
8、f(“%d/t“,*p);printf(“/n“);(分数:4.00)_27.gcd(int p,int q)if(p= =q)return p;else if(pq)return gcd(p-q,q);else return gcd(p,q-p);void main()int m=24,n=36,min,max;max=gcd(m,n);min=m*n/max;printf(“max=%d,min=%d/n“,max,min);(分数:4.00)_28.s(int a)static int b=10:if(a%2=1)return(+b);else return(+a);void main(
9、)int i;for(i=0;i3;i+)printf(“%d/t“,s(i);printf(“/n“);(分数:4.00)_29.struct peoplechar name10;float score;per=“Tom“,95.5),“Mary“,88.0);void main()struct people。pper+1;printf(“%s,%.1f/n“,per0.name,pscore);(分数:4.00)_四、程序填充题(总题数:3,分数:18.00)30.对两个整型变量先进行输入和输出,将它们的值交换后再输出。#define PR printf(“a=%d,b=%d/n“,a,b
10、)void main()int a,b,_; /*第一空*/scanf(“%d%d“,_); /*第二空*/PR;temp=a,_,b=temp; /*第三空*/PR;(分数:6.00)填空项 1:_31.为二维数组各元素输入数据,计算并输出全部元素之和。#define N 5void main()int i,j,aNN,sum=_; /*第一空*/for(i=0;iN;i+)for(j=0;jN;j+)scanf(“%d“,&aij);sum+=_; /*第二空*/printf(“sum=%d/n“,_); /*第三空*/(分数:6.00)填空项 1:_32.为 n 输入一个正整数值后,计算
11、并输出 (分数:6.00)填空项 1:_五、程序设计题(总题数:2,分数:16.00)33.(1)根据下列计算公式写出函数,将华氏温度(F)转化为摄氏温度(C)。公式: (分数:8.00)_34.用循环结构实现下列问题:现有 1020 本书,第一天卖掉一半多两本,以后每天卖掉剩下的一半多两本,直到卖完为止。计算并输出卖完所需要的天数。(分数:8.00)_高级语言程序设计真题 2009 年下半年答案解析(总分:100.00,做题时间:90 分钟)一、单项选择题(总题数:15,分数:30.00)1.主函数头中的“main”是( )A保留字 B函数名C变量名 D类型名(分数:2.00)A.B. C.
12、D.解析:解析 C 程序是 C 语句组成的语句序列,通常一个 C 程序包括一个或多个函数,其中有且仅有一个称为主函数,其函数名规定为 main。2.下列运算符中优先级最高的是( )A?: B&C| D!(分数:2.00)A.B.C.D. 解析:解析 单目逻辑运算符优先于双目逻辑运算符及条件运算符。3.设 static int a;,执行表达式(a=1)&(a=-1)&(a=2)后,a 的值是( )A-1 B0C1 D2(分数:2.00)A.B. C.D.解析:解析 用&对两个表达式进行计算时,若第一个表达式的值为“假”,则运算结果与第二个表达式的值无关,结果肯定为“假”,所以 C 语言规定此时
13、第二个表达式将不再计算,由此得出 B 项正确。4.设 int a,b;,与 a+=b+;等价的是( )Aa=b+; Ba=+b;Ca=a+b+; Da=a+b;(分数:2.00)A.B.C. D.解析:5.关于宏定义命令,叙述正确的是( )A在程序编译前进行宏替换 B在程序编译时进行宏替换C在程序编译后进行宏替换 D在程序运行时进行宏替换(分数:2.00)A. B.C.D.解析:解析 宏定义命令的一般格式是:#define 宏名 一串符号,在程序清单中可以出现已经定义过的“宏名”,称为“宏调用”;当对源程序清单进行编译之前,将把所有的“宏名”替换成对应的“一串符号”,称为“岩替换”。6.下列表
14、达式值为 0 的是( )A5/2 B2&5C!2|5 D2&5(分数:2.00)A.B.C.D. 解析:解析 位逻辑运算符将数据中每个二进制位上的“0”或“1”看成逻辑值,逐住进行逻辑运算,而 2 的二进制为 00000010,5 的二进制为 00000101,则 2&5 得 0。7.对循环结构正确的叙述是( )Ado-while 循环体可能被执行 0 次 Bdo-while 循环体至少被执行 1 次Cwhile 循环体不可能被执行 0 次 Dfor 循环体不可能被执行无限次(分数:2.00)A.B. C.D.解析:8.下列数组定义并初始化正确的是( )Aint s=(1,2,3,4,5);
15、Bint s5=1,2,3,4,5;Cint s2+3=(1,2,3); Dint s(5)=(1,2,3);(分数:2.00)A.B.C. D.解析:解析 数组初始化的格式为:数据类型 数组名长度=初值表;其中在一个定义语句中可以对全部数组赋初值,也可只对其中某些数组赋初值;对某个一维数组的所有元素均赋初值时,数组长度可以省略,其长度等于初值表中初值的个数。9.设 char s10;,能将字符串“+-*/”正确输入的语句是( )Ascanf(“%s“,s); Bscanf(“%s“,*s);Cscanf(“%s“,s0); Dscanf(“%s“,s10);(分数:2.00)A. B.C.D
16、.解析:解析 用字符数组接受字符串,scanf()函数调用时应写字符数组名。10.对于 C 语言中的函数,正确的叙述是( )A两个函数可以相互调用,但不能自己调用自己B程序执行可以始于任何一个函数,但结束必须在主函数C两个函数既可以定义成并列关系又可以定义成嵌套关系D一个 C 程序可以由多个文件组成,一个文件又可以由多个函数组成(分数:2.00)A.B.C.D. 解析:11.设 int m5,*p=m;,与元素 m2等价的是( )Am+2 B*m+2C*(p+2) D*p+2(分数:2.00)A.B.C. D.解析:解析 当指针变量指向一维数组后,对下标为 i 的数组元素引用一共有下列四种方法
17、:*(指针变量+i)*(数组名+i)、指针变量i、数组名i。12.设 int 33=1,2,3),4,5,6;,元素 a12的值是( )A0 B1C4 D6(分数:2.00)A. B.C.D.解析:解析 在对数组进行初始化时,若只对数组的前若干个元素赋初值,则没有给出初值的元素均有默议的初值。对数值型数组,默认的初值为 0。13.设 typedef int ARR10;,与 ARR a,*b;等价的定义是( )Aint a,b; Bint a,*b;Cint a10,*b; Dint a10,*b10;(分数:2.00)A.B.C.D. 解析:14.设 int n,p=0;,与语句 if(n!
18、=0)p=1;等价的是( )Aif(n)p=1; Bif(n=1)p=1;Cif(n!=1)p=1; Dif(!n)p=1;(分数:2.00)A. B.C.D.解析:15.文件使用方式“rb+“的含义是( )A对文本文件只读 B对文本文件读和写C对进制文件读和写 D对二进制文件只写(分数:2.00)A.B.C. D.解析:二、填空题(总题数:10,分数:20.00)16.执行 printf(“%d/n“,1+!2+(3=4)+5/6+7%8);后的输出结果是 1。(分数:2.00)填空项 1:_ (正确答案:9)解析:17.设 int m=0;,执行表达式 m|(m=2)|(m=3)|(m=4
19、)后,m 的值是 1。(分数:2.00)填空项 1:_ (正确答案:2)解析:18.设 int n;,“n 的值能同时被 3 和 5 整除”的逻辑表达式是 1。(分数:2.00)填空项 1:_ (正确答案:n%3=0&n%5=0(或!(n%3)&!(n%5))解析:19.执行循环语句 for(0;)printf(“Happy!/n“);后,输出“Happy!”的行数是 1。(分数:2.00)填空项 1:_ (正确答案:无限(或无穷))解析:20.设宏定义#define K 2+3 执行 printf(“%d/n“,K/K);后的输出结果是_。(分数:2.00)填空项 1:_ (正确答案:6)解
20、析:21.设 int n;,执行 for(n=0;n=0;n+)n=0;后,循环体被执行的次数是 1。(分数:2.00)填空项 1:_ (正确答案:1)解析:22.执行 printf(“%d/n“,5&5-3&4);后的输出结果是 1。(分数:2.00)填空项 1:_ (正确答案:0)解析:23.表示空类型(或称无类型)的保留字是 1。(分数:2.00)填空项 1:_ (正确答案:void)解析:24.设 char*strp=“CHINA“;,执行 printf(“%s/n“,strp+3);后的输出结果是 1。(分数:2.00)填空项 1:_ (正确答案:NA)解析:25.使用系统函数对两个
21、字符串进行比较,该系统函数的名字是 1。(分数:2.00)填空项 1:_ (正确答案:strcmp)解析:三、程序分析题(总题数:4,分数:16.00)26.void main()int i,a5,*p;for(i=4;i=0;i-)*(a+i)=i;for(p=a;pa+5;p+)printf(“%d/t“,*p);printf(“/n“);(分数:4.00)_正确答案:(0 1 2 3 4)解析:27.gcd(int p,int q)if(p= =q)return p;else if(pq)return gcd(p-q,q);else return gcd(p,q-p);void main
22、()int m=24,n=36,min,max;max=gcd(m,n);min=m*n/max;printf(“max=%d,min=%d/n“,max,min);(分数:4.00)_正确答案:(max=12,min=72)解析:28.s(int a)static int b=10:if(a%2=1)return(+b);else return(+a);void main()int i;for(i=0;i3;i+)printf(“%d/t“,s(i);printf(“/n“);(分数:4.00)_正确答案:(1 11 3)解析:29.struct peoplechar name10;floa
23、t score;per=“Tom“,95.5),“Mary“,88.0);void main()struct people。pper+1;printf(“%s,%.1f/n“,per0.name,pscore);(分数:4.00)_正确答案:(Tom,88.0)解析:四、程序填充题(总题数:3,分数:18.00)30.对两个整型变量先进行输入和输出,将它们的值交换后再输出。#define PR printf(“a=%d,b=%d/n“,a,b)void main()int a,b,_; /*第一空*/scanf(“%d%d“,_); /*第二空*/PR;temp=a,_,b=temp; /*第
24、三空*/PR;(分数:6.00)填空项 1:_ (正确答案:第一空:temp第二空:&a,&b第三空:a=b)解析:31.为二维数组各元素输入数据,计算并输出全部元素之和。#define N 5void main()int i,j,aNN,sum=_; /*第一空*/for(i=0;iN;i+)for(j=0;jN;j+)scanf(“%d“,&aij);sum+=_; /*第二空*/printf(“sum=%d/n“,_); /*第三空*/(分数:6.00)填空项 1:_ (正确答案:第一空:0第二空:aij第三空:sum)解析:32.为 n 输入一个正整数值后,计算并输出 (分数:6.00
25、)填空项 1:_ (正确答案:第一空:sum=0.0第二空:k%2=1(或 k%2!=0 或 k%2)第三空:kn)解析:五、程序设计题(总题数:2,分数:16.00)33.(1)根据下列计算公式写出函数,将华氏温度(F)转化为摄氏温度(C)。公式: (分数:8.00)_正确答案:(float change(float F)float C;C=5*(F-32)/9;return C;void main()float F;scanf(“%f“,&F);printf(“F=%.2f C=%.2f/n“,F,change(F);)解析:34.用循环结构实现下列问题:现有 1020 本书,第一天卖掉一半多两本,以后每天卖掉剩下的一半多两本,直到卖完为止。计算并输出卖完所需要的天数。(分数:8.00)_正确答案:(void main()int book=1020,day=0;while(book!=0)book=book/2-2;day+;printf(“day=%d/n“,day);)解析: