2009年10月高级语言程序设计(一)试题 
一、单项选择题(本大题共15小题,每小题2分,共30分)
1.主函数头中的“main”是( B    )
A.保留字ﻩB.函数名    C.变量名    D.类型名
2.下列运算符中优先级最高的是(  D  )
A.?:    B.&&    C.ﻩD.!
3.设static int a;,执行表达式(a= =1)&&(a=-1)&&(a=2)后,a的值是(  B  )
A.-1ﻩB.0    C.1ﻩD.2
4.设int a,b;,与a+=b++;等价的是(  C    )
A.a=b++;    B.a=++b;    C.a=a+b++;ﻩD.a=a+++b;
5.关于宏定义命令,叙述正确的是(  A  )
A.在程序编译前进行宏替换    B.在程序编译时进行宏替换
C.在程序编译后进行宏替换    D.在程序运行时进行宏替换
6.下列表达式值为0的是(      D)
A.5/2    B.2&&5ﻩC.!25ﻩD.2&5
7.对循环结构正确的叙述是(  B  )
A.do-while循环体可能被执行0次    B.do-while循环体至少被执行1次
C.while循环体不可能被执行0次ﻩD.for循环体不可能被执行无限次
8.下列数组定义并初始化正确的是(  C    )
A.int s[]=(1,2,3,4,5); B.int s[5]=1,2,3,4,5; C.int s[2+3]={1,2,3};    D.int s(5)={1,2,3};
9.设char s[10];,能将字符串“+-*/”正确输入的语句是(   A   )
A.scanf(“%s”,s);ﻩ B.scanf(“%s”,*s); C.scanf(“%s”,s[0]);    D.scanf(“%s”,s[10]);
10.对于C语言中的函数,正确的叙述是(      D)
A.两个函数可以相互调用,但不能自己调用自己
B.程序执行可以始于任何一个函数,但结束必须在主函数
C.两个函数既可以定义成并列关系又可以定义成嵌套关系
D.一个C程序可以由多个文件组成,一个文件又可以由多个函数组成
11.设int m[5],*p=m;,与元素m[5],*p=m;,与元素m[2]等价的是(  C    )
A.m+2ﻩB.*m+2    C.*(p+2)    D.*p+2
12.设int a[3][3]={{1,2,3},{4,5},{6}};,元素a[1][2]的值是(   A   )
A.0    B.1    C.4ﻩD.6
13.设typedef int ARR[10];,与ARRa,*b;等价的定义是(    D  )
A.int a,b;    B.int a,*b;ﻩC.int a[10],*b;    D.int a[10],*b[10];
14.设int n,p=0;,与语句if(n!=0)p=1;等价的是(    A  )
A.if(n)p=1;ﻩB.if(n=1)p=l;ﻩC.if(n!=1)p=1;ﻩD.if(!n)p=l;
15.文件使用方式“rb+”的含义是(    C  )
A.对文本文件只读        B.对文本文件读和写
C.对二进制文件读和写    D.对二进制文件只写
二、填空题(本大题共10小题,每小题2分,共20分)
16.执行printf(“%d\n”,1+!2+(3<=4)+5/6+7%8);后的输出结果是_________。
17.设int m=0;,执行表达式m (m=2) (m=3) (m=4)后,m的值是_2________。
18.设int n;,“n的值能同时被3和5整除”的逻辑表达式是______n%3==0 && n%5==0 ___。
19.执行循环语句for(;’0’;)printf(“Happy!\n”);后,输出“Happy!”的行数是____无限(或无穷)_____。
20.设宏定义#define  K  2+3执行printf(“%d\n”,K/K);后的输出结果是____6_____。
21.设int n;,执行for(n=0;n= =0;n++)n=0;后,循环体被执行的次数是_____1____。
22.执行printf(“%d\n”,5&5-3&&4);后的输出结果是_______0__。
23.表示空类型(或称无类型)的保留字是___void______。
24.设char*strp=“CHINA”;,执行printf(“%s\n”,strp+3);后的输出结果是__NA   _______。
25.使用系统函数对两个字符串进行比较,该系统函数的名字是___strcmp______。
三、程序分析题(本大题共4小题,每小题4分,共16分)阅读下列程序,将输出结果写到各题右侧的空白处。
26.
void main( )
int i,a[5],*p;
for(i=4;i>=0;i--)*(a+i)=i;
for(p=a;p<a+5;p++)printf(“%d\t”,*p);
printf(“\n”);
}ﻩ=======>  1    2        4
27.
gcd(int p,int q)
{
if(p= =q)return p;
else if(p>q)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);
}        =============> max=12,min=72
28.
s(int a)
{
static int b=l0;
if(a%2= =1)return(++b);
else return(++a);
}
void main( )
{ int i;
for(i=0;i<3;i++)printf(“%d\t”,s(i));
printf(“\n”);
}    =============>      11 
29.
struct people
char name[10];
float score;
}per[ ]=={{“Tom”,95.5},{“Mary”,88.0}};
void main( )
{
struct people*p=per+1;
printf(“%s,%.1f\n”,per[0].name,pscore);
}            ﻩ        ===============>Tom,88.0
四、程序填充题(本大题共3小题,每小题6分,共18分)请将下列程序横线处缺少的部分补上,使其能正确运行。
30.对两个整型变量先进行输入和输出,将它们的值交换后再输出。
#define  PR  printf(“a=%d,b=%d\n”,a,b)
void main( )
{
int a,b,__ temp ____;/* 第一空 */
scanf(“%d%d”,____&a,&b _____);/* 第二空 */
PR;
temp=a,___a=b____,b=temp;/* 第三空 */
PR;
}
31.为二维数组各元素输入数据,计算并输出全部元素之和。
#define  N  5
void main( ){
int i,j,a[N][N],sum=____0 ___;/* 第一空 */
for(i=0;i<N;i++)
for(j=0;j<N;j++){
scanf(“%d”,&a[i][j]);
sum+=_______a[i][j]    _______;/* 第二空 */
}
printf(“sum=%d\n”,______sum_____);/* 第三空 */
}
32.为n输入一个正整数值后,计算并输出sum=1-的值。
void main(){
int n,k=0;
float____sum=0.0  ___;/* 第一空 */
scanf(″%d″,&n);
do{
k++;
if(____k%2==1(或k%2!=0或k%2) ____)sum+=1.0/k;/* 第二空 */
else sum-=1.0/k;
}while(____k<n____);/* 第三空 */
printf(″sum=%.4f\n″,sum);
}
五、程序设计题(本大题共2小题,每小题8分,共16分)
float()函数33.(1)根据下列计算公式写出函数,将华氏温度(F)转化为摄氏温度(C)。
公式:=(-32)
函数头为:float change(float F)
(2)写出主函数,输入华氏温度,调用函数change,计算并输出对应的摄氏温度。输出形式(温度要求两位小数): 
F=?    C=?
float change(float F)
{
float C;
C=5*(F-32)/9;
return C;
void main()
{
float F,c;
scanf("%f",&F);
c=change(F);
printf("F=%.2fC=%.2f\n",F,c);
}
34.用循环结构实现下列问题:现有1020本书,第一天卖掉一半多两本,以后每天卖掉剩下的一半多两本,直到卖完为止。计算并输出卖完所需要的天数。
void main()
{
int book=1020,day=0;
while(book!=0)
{ 
book=book/2-2;
day++;
printf("day=%d\n",day);
}