C语言考题A卷.docx
《C语言考题A卷.docx》由会员分享,可在线阅读,更多相关《C语言考题A卷.docx(14页珍藏版)》请在冰点文库上搜索。
C语言考题A卷
北京航空航天大学自动化学院试卷(共7页)
2004~2005学年第1学期班级:
学号:
姓名:
.
考试科目:
C语言程序设计(A卷)成绩:
分
说明:
1、本试卷满分为100分。
2、闭卷考试,试卷不得拆开,不允许自带草稿纸。
3、填空题与选择题答案直接写在试卷上,做在草稿纸上无效。
一.填空题:
(每空1分,共10分)
1、一个C程序是由若干函数构成的,其中必须有一个函数。
2、表达式1+2/3+4%5+(6>7)+(8,9)的值是。
3、执行printf(“%d,%d”,(i=j,++i),(j=5,j++));输出结果为。
4、判断变量c中是数字字符的逻辑表达式是。
5、设x为float型变量,y为double型变量,a为int型变量,b为long型变量,c为char型变量,则表达式
的结果类型为。
6、若有说明intx=10,y=20;,请写出printf(“%3x\n”,(x%y,x-y,x+y))语句对应的输出结果是。
7、设intj=10;执行j+=j*j;后j的值是。
8、设float(*pf)(),*qf();
pf与qf的意义分别是和。
9、设宏定义#defineD(x)x/x
则引用D(2+3)后的值是。
二.单项选择题:
(在每小题的四个备选答案中,选出一个正确的答案,
并将其号码填在题干后的括号内。
每小题1分,共10分)
1.以下正确的C语言标识符是:
()
(A)%x(B)a+b(C)a123(D)test!
2.下列运算符中优先级最低的是()
(A)++(B)()(C)→(D)+=
3.设inti=0,j=1,k=2,a=3,b=4,c=5;执行表达式(a=i(A)1,1,5(B)1,0,2
(C)3,4,5(D)1,1,0
4.设inta=1,b;执行下列switch语句后,b获值为2的是()
(A)switch(a)(B)switch(a)
{case1:
b=1;{case1:
b=1;break;
case2:
b=2;case2:
b=2;break;
default:
b=3;default:
b=3;break;
}}
(C)switch(a)(D)switch(a)
{case1:
b=1;{case1:
b=1;break;
case2:
b=2;break;case2:
b=2;
default:
b=3;default:
b=3;
}}
5.下列程序段运行后,输出GOOD的行数是()
inti,j,k;
for(i=1;i<3;i++)
for(j=1;j<3;j++)
for(k=i;k(A)27(B)3(C)1(D)9
6.二维数组正确的初始化是()
(A)charstr[][3]={“a”,”1”};
(B)charstr[][3]={‘abc’,’4’};
(C)charstr[3][]={“a”,”1”};
(D)charstr[][3]=‘a’,’1’,’t’;
7.以下各判断是否为素数的函数中(是素数返回1,不是素数返回0),正确的是()
(A)(B)
#include#include
prime(intn)prime(intn)
{{
for(inti=2;i<=sqrt(n);i++)for(inti=2;i<=sqrt(n);i++)
if(n%i==0)if(n%i==0)
return0;return1;
elseelse
return1;return0;
}}
(C)(D)
#include#include
prime(intn)prime(intn)
{{
for(inti=2;i<=sqrt(n);i++)for(inti=2;i<=sqrt(n);i++)
if(n%i==0)break;if(n%i==0)
return0;return0
return1;return1;
}}
8、以下程序段()
intx=-1;
do{
x=x*x;
printf("%d\n",x);
}while(!
x);
A.是死循环B.循环执行两次
C.循环执行一次D.有语法错误
9、对于函数,下列叙述中正确的是()
A.在调用某函数前,必须对该函数作原型说明,否则一定出错。
B.调用函数时,实参变量和形参变量参数个数一般要相等,顺序要一致,
类型要相同或相容。
C.调用函数时,形参变量名为inta[],主函数中的数组intscore[10]必须与
形参变量同名。
D.函数必须有返回值,而且只能有一个返回值。
10、下列程序运行结果是()。
#include
#defineM66
voidconvert(intn)
{
if(n/8)
convert(n/8);
printf("%d",n%8);
}
voidmain()
{
convert(M);
printf("\n");
}
A.102B.201
C.0201D.
三.写出程序运行结果:
(每小题5分,共35分)
1.#include
voidmain()
{
inta,b,c;
a=b=c=5;
a=++b+c++;
printf("\n%d,%d,%d",a,b,c);
a=b+++++c;
printf("\n%d,%d,%d",a,b,c);
a=++b+c--;
printf("\n%d,%d,%d",a,b,c);
printf("\n");
}
2.#include
#defineMAINprintf("MAIN:
i=%d,a=%d,b=%d,c=%d\n",i,a,b,c);
#defineOTHERprintf("OTHER:
i=%d,a=%d,b=%d,c=%d\n",i,a,b,c);
inti=10;
voidother()
{
staticinta=2,b;
intc=10;
a+=2;
i+=32;
c+=5;
OTHER
b=a;
}
voidmain()
{
staticinta;
registerintb=-10;
intc=0;
MAIN
c+=8;
other();
MAIN
i+=10;
other();
printf("\n");
}
3.#include
voidtest(int*x,inty)
{
intt;
t=*x;
*x=y;
y=t;
}
voidmain()
{
inta=10,b=20;
voidtest(int*x,inty);
printf("a=%d,b=%d\n",a,b);
test(&a,b);
printf("a=%d,b=%d\n",a,b);
}
4.#include
voidmain()
{
intx=10,a=10,b=20,ok1=5,ok2=0;
if(a
if(b!
=15)
if(!
ok1)
x=1;
elseif(ok2)
x=10;
x=-1;
printf("x=%d\n",x);
}
5.#include
voidmain()
{
inti,j;
for(i=j=2;j<=50;j++)
{
if(i>=10)break;
if(i%2)
{
i+=5;
continue;}
i-=3;
}
printf("j=%d\n",j);
}
6.inta[]={1,2,3,4,5,6,7,8,9};
#include
voidmain()
{
inti=0,t;
for(;i<9/2;i++)
{
t=a[i];
a[i]=a[8-i];
a[8-i]=t*5;
}
for(i=0;i<9;i++)
printf("%d",a[i]);
printf("\n");
}
7.#include
voidmain()
{
staticinta[][3]={{1,2,3},{4,5},{6}};
inti,*p=a[2],(*q)[3]=a;
for(i=0;i<3;i++)
printf("%2d",*p++);
printf("\n");
printf("%2d\n",*(*(q+i-1)+i-2));
}
四.程序填空题(每空4分,共20分)
1.由键盘输入两个字符串a和b,并比较它们的大小。
#include
voidmain()
{
chara[40],b[40];
inti,x;
for(i=0;;i++)
x=a[i]-b[i];
if(x>0)
printf("a>b\n");
elseif(x<0)
printf("a
else
printf("a=b\n");
}
2.一个班学生的学号和一门课的成绩为外部结构:
structstuinf
{
intstid;/*学号*/
intscore;/*成绩*/
}
下列程序是依成绩由高到低对STNUM(定义为30)个学生排序,而后输出结果。
#include
#defineSTNUM30
structstuinf
{
intstid;
intscore;
}stu[STNUM];
voidmain()
{
structstuinf*p[STNUM],
inti,j,k;
for(i=0;;i++)
{
scanf("%d%d",&stu[i].stid,&stu[i].score);
p[i]=&stu[i];
}
for(i=0;i<=STNUM-2;i++)
{
k=i;
for(j=i+1;j<=STNUM-1;j++)
if(p[k]->score
score)
if(k!
=i)
{
ptemp=p[i];
p[i]=p[k];
p[k]=ptemp;
}
}
for(i=0;i<=STNUM-1;i++)
printf("%d%d\n",p[i]->stid,p[i]->score);
printf("\n");
}
五.编程题:
(共25分)
1.设数组a中有10个整型元素,求a中各相邻两个元素之和,将这些和存在数组b中,并由小到大排序。
2.从键盘输入若干人员(不少于5人)的姓名和电话号码(8位),以字符‘#’结束输入,用结构型数组存放这些信息,并将这些信息送到一个磁盘文件“file.txt”中保存。
然后输入姓名,找出该人的电话号码。
答案:
一.填空题:
(每空1分,共10分)
1.主函数
2.14
3.6,5
4.c>=0&&c<=9
5.duoble
6.1e
7.110
8.pf为指向函数的指针,
qf为返回值为指针的函数。
9.6
二.选择题:
(每小题1分,共10分)
1.C2.D3.D4.C5.C
6.A7.D8.C9.B10.A
三.写出程序运行结果:
(每小题5分,共35分)
1.11,6,6
13,7,7
15,8,6
2.i=10,a=0,b=-10,c=0
i=42,a=4,b=0,c=15
i=42,a=0,b=-10,c=8
i=84,a=6,b=4,c=15
3.a=10,b=20
a=20,b=20
4.x=-1
5.j=10
6.987652015105
7.600
0
四.程序填空题(每空4分,共20分)
1.
scanf(“%s%s”,a,b);
a[i]==b[i]&&a[i]!
=’\0’
2.
*ptemp;STNUM-1k=j
五.编程题:
(共25分)
1.
#include
#include
#defineN10
voidmain()
{
inti=0,j;
doublex,temp,y[N];
for(x=0.1;x<=1;x+=0.1)
{
y[i]=2*x+sin(x)-log(x);
printf("%8.2f\n",y[i]);
i++;
}
//由小到大排序。
for(i=0;ifor(j=i;j{if(y[i]>y[j])
{temp=y[j];
y[j]=y[i];
y[i]=temp;}
}
printf("\n\n");
for(i=0;iprintf("%8.2f\n",y[i]);
printf("y的最大值=%8.2f\n",y[9]);
}
2.
#include
#include
#include
#defineSIZE5
structtelephone
{
charname[8];
chartelno[9];
};
voidmain()
{
FILE*fp;
structtelephones[SIZE],*p;
voidsearch(structtelephoneb[],char*x);
inti=0;
charna[8];
for(p=s;p
{
printf("输入姓名:
\n");
scanf("%s",p->name);
if(strcmp(p->name,"#")==0)
break;
printf("输入电话号码:
\n");
scanf("%s",p->telno);
}
if((fp=fopen("file.txt","w"))==NULL)
{printf("cannotopenfile.txt\n");
exit(0);}
/*写到磁盘文件中去*/
fprintf(fp,"nameteleno\n");
for(i=0;ifprintf(fp,"%s%s\n",s[i].name,s[i].telno);
fclose(fp);
printf("输入要查找的姓名:
");
scanf("%s",na);
for(p=s;p
{
if(strcmp(p->name,na)==0)
printf("电话号码是:
%s\n",p->telno);
}
}