学年《C语言程序设计》考试A卷史.docx
《学年《C语言程序设计》考试A卷史.docx》由会员分享,可在线阅读,更多相关《学年《C语言程序设计》考试A卷史.docx(15页珍藏版)》请在冰豆网上搜索。
学年《C语言程序设计》考试A卷史
北京航空航天大学
2009-2010学年第二学期期末
《C语言程序设计》
考试A卷
班级______________学号_________
姓名______________成绩_________
2010年6月10日
班号学号姓名成绩
《C语言程序设计》期末考试卷
注意事项:
1、请将所有的答案和程序写在答题纸上,写在试卷纸上不得分!
2、考试时间120分钟
一、单项选择题(每题2分,共40分)
1.指出下列描述正确的是()。
A)除了main()函数外,任何函数都可以被其它函数调用
B)在一个文件中有且仅有一个main()函数
C)在对C语言进行编译的过程中,可以发现注释中的错误
D)一个C语言程序是由一个主程序和若干子程序组成
2.语句:
printf("%d",(a=2)&&(b=-2);的输出结果是()。
A)无输出B)结果不确定C)-1D)1
3.设有定义:
intx=2;,以下表达式中,值不为6的是()。
A)x*=x+lB)x++,2*xC)x*=(1+x)D)2*x,x+=2
4.以下程序的输出结果是()。
A)20B)31C)321D)210
main()
{intn=4;
while(n--)printf("%d",--n);
}
5.有以下程序段
intk=0;
while(k=1)k++;
while循环执行的次数是()。
A)无限次B)有语法错,不能执行
C)一次也不执行D)执行1次
6.以下程序段中的变量已正确定义1——5ADDAA
6——10DACBD
11——15CACBC
16——20BBDAB
for(i=0;i<4;i++,i++)
for(k=l;k<3;k++);printf("*");
程序段的输出结果是()。
A)********B)****C)**D)*
7以下选项中,不能正确赋值的是()。
A)chars1[10];s1="Ctest";
B)chars2[]={'C','t','e','s','t'};
C)chars3[20]="Ctest";
D)char*s4="Ctest\n"
8.以下程序的输出结果是()。
A)52B)51C)53D)97
main()
{inti,x[9]={9,8,7,6,5,4,3,2,1},*p=&x[4];
for(i=0;i<4;i+=2)
printf("%d",p[i]);}
9.有以下函数
charfun(char*p)
{returnp;}
该函数的返回值是()。
A)无确切的值B)形参p中存放的地址值
C)一个临时存储单元的地址D)形参p自身的地址值
10.设变量已正确定义,以下不能统计出一行中输入字符个数(不包含回车符)的程序段是()。
A)n=0;while((ch=getchar())!
='\n')n++;B)n=0;while(getchar()!
='\n')n++;
C)for(n=0;getchar()!
='\n';n++);D)n=0;for(ch=getchar();ch!
='\n';n++);
11.以下程序的输出结果是()。
A)0B)29C)31D)无定值
fun(intx,inty,intz)
{z=x*x+y*y;}
main()
{inta=31;
fun(5,2,a);
printf("%d",a);}
12下列程序段的输出结果是()。
A)2143B)1212C)1234D)2112
voidfun(int*x,int*y)
{printf("%d%d",*x,*y);
*x=3;*y=4;}
main()
{intx=1,y=2;
fun(&y,&x);
printf("%d%d",x,y);
}
13.有下列函数:
intfun(char*s)
{char*t=s;
while(*t++);
return(t-s);}
该函数的功能是()。
A)比较两个字符串的大小B)计算s所指字符串占用内存字节的个数
C)计算s所指字符串的长度D)将s所指字符串复制到字符串t中
14.以下程序的输出结果是()。
A)16B)7C)9D)1
#defineSQR(X)X*X
main()
{inta=16,k=2,m=1;
a=SQR(k+m)/SQR(k+m);
printf("%d\n",a);
}
15.下面程序的输出结果是()。
A)0B)1C)10D)9
main()
{inta[]={1,2,3,4,5,6,7,8,9,0,},*p;
p=a;
printf("%d\n",*p+9);
}
16.设有条件表达式:
(EXP)?
i++:
j--,则下列表达式中与(EXP)完全等价的是()。
A)(EXP==0)B)(EXP!
=0)C)(EXP==1)D)(EXP!
=1)
17.若有说明:
inti,j=2,*p=&i;,则能完成(i=j;)赋值功能的语句是()。
A)i=*p;B)*p=*&j;C)i=&j;D)i=**p;
18以下程序的输出结果是()。
main()
{inta,b;
for(a=1,b=1;a<=100;a++)
{if(b>=10)break;
if(b%3==1)
{b+=3;continue;}
}
printf("%d\n",a);
}
A)101B)6C)5D)4
19设有如下程序段()。
chars[20]="Beijing",*p;
p=s;
则执行p=s;语句后,以下叙述正确的是()。
A)可以用*p表示s[0]
B)s数组中元素的个数和p所指字符串长度相等
C)s和p都是指针变量
D)数组s中的内容和指针变量p中的内容相同
20设有以下说明语句
structex
{intx;floaty;charz;}example;
则下面的叙述中不正确的是()。
A)struct结构体类型的关键字B)example是结构体类型名
C)x,y,z都是结构体成员名D)structex是结构体类型
二、填空题(前10题每题2分,后5题每题3分,共35分)
1.假设所有变量均为整型,则表达式(a=2,b=5,a++,b++,a+b)的值为_____9____。
2.假定int类型变量占用两个字节,其有定义:
intx[10]={0,2,4};,则数组x在内存中所占字节数是_______20_______。
3.若有定义语句:
chars[10]="1234567\0\0";,则strlen(s)的值是__7_______。
4.以下程序的输出结果是_101091______。
main()
{intx=10,y=10,i;
for(i=0;x>8;y=++i)
printf("%d%d",x--,y);
}
5.有如下程序
main()
{intx=1,a=0,b=0;
switch(x){
case0:
b++;
case1:
a++;
case2:
a++;b++;}
printf(“a=%d,b=%d\n”,a,b);
}
该程序的输出结果21_。
6.阅读以下程序:
main()
{intx;
scanf("%d",&x);
if(x--<5)printf("%d",x);
elseprintf("%d",x++);
}
程序运行后,如果从键盘上输人5,则输出结果是__4_______。
7.函数pi的功能是根据以下近似公式求π值:
(π*π)/6=1+1/(2*2)+1/(3*3)+..+1/(n*n)
现在请你在下面的函数中填空,完成求π的功能。
#include“math.h”
doublepi(longn)
{doubles=0.0;longi;
for(i=1;i<=n;i++)s=s+____1/(i*i)______;
return(sqrt(6*s));}
8.设在主函数中有以下定义和函数调用语句,且fun函数为void类型;请写出fun函数的首部____void__fun(b[10][22])_____。
要求形参名为b。
main()
{doubles[10][22];
intn;
……
fun(s);
……
}
9.设有以下程序:
main()
{intn1,n2;
scanf("%d",&n2);
while(n2!
=0)
{n1=n2%10;
n2=n2/10;
printf("%d",n1);}
}
程序运行后,如果从键盘上输入1298;则输出结果为_8921____________。
10.以下程序按下面指定的数据给x数组的下三角置数,并按如下形式输出,请填空_______。
4
37
269
15810
#include
main()
{intx[4][4],n=0,i,j;
for(j=0;j<4;j++)
for(i=3;i>=j;i--)
{n++;
x[i][j]=_____n____;}
for(i=0;i<4;i++)
{for(j=0;j<=i;j++)printf("%3d",x[i][j]);
printf("\n");}
}
11.以下函数按每行8个输出数组中的数据
voidfun(int*w,intn)
{inti;
for(i=0;i{_if((i+1)%8==1)____printf("\n");______printf("%d",w[i]);}
}
下划线处应填入的语句是_______________。
12.以下函数把b字符串连接到a字符串的后面,并返回a中新字符串的长度。
请填空______。
strcen(chara[],charb[])
{intnum=0,n=0;
while(*(a+num)!
=__\0____)num++;
while(b[n]){*(a+num)=b[n];num++;n++;}
return(num);
}
13.有以下程序
#include
voidfun(char*s)
{while(*s)
{if(*s%2==0)printf("%c",*s);
s++;}}
main()
{chara[]={"bad"};
fun(a);printf("\n");
}
注意:
字母a的ASCII码值为97,程序运行后的输出结果是__b d___________。
14.以下程序中函数fun的功能是:
统计person所指结构体数组中所有性别(sex)为M
的记录的个数,存入变量n中,并作为函数值返回。
请填空__________。
#include
#defineN3
typedefstruct
{intnum;charnam[10];charsex;}SS;
intfun(SSperson[])
{inti,n=0;
for(i=0;iif(_____________=='M')n++;
returnn;
}
main()
{SSW[N]={{1,"AA",’F’},{2,"BB",'M'},{3,"CC",'M'}};
intn;
n=fun(W);
printf("n=%d\n",n);
}
15.有以下程序
#include
main()
{FILE*fp;inti,k=0,n=0;
fp=fopen(“d1.dat”,”w”);
for(i=1;i<4;i++)fprintf(fp,”%d”,i);
fclose(fp);
fp=fopen(“d1.dat”,”r”);
fscanf(fp,”%d%d”,&k,&n);printf(“%d%d\n”,k,n);
fclose(fp);
}执行后输出结果是____123 ________。
三、程序编写题(共25分)
见答题纸
答题纸
班号学号姓名成绩
一、单项选择题(共40分)
题号
1
2
3
4
5
6
7
8
9
10
答案
题号
11
12
13
14
15
16
17
18
19
20
答案
二、填空题(共35分)
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
三、程序编写题(共25分)
1.求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。
例如2+22+222+2222+22222(此时共有5个数相加),重复数的数字和相加数的个数由键盘输入。
(10分)
(提示:
重复数的数字用a表示,相加数的个数用n表示)
2.在主函数中调用一个子函数,该子函数实现在M行N列的二维整形数组中,找出每一行上的最大值并在屏幕上打印输出。
整形数数组各元素则在主函数中由键盘输入。
(15分)
(提示:
行数M和列数N的数值可以在程序前面用宏定义,将每一行上的最大值在屏幕上打印输出的工作可以在子函数中完成)
一、参考答案:
选择题:
1——5ADDAA
6——10DACBD
11——15CACBC
16——20BBDAB
二、填空题:
1)9
2)20
3)7
4)101091
5)a=2,b=1
6)4
7)1.0/(i*i)或1/(float)(i*i)
8)voidfun(doubleb[][22])或voidfun(doubleb[0][22])或voidfun(double(*b)[22])
9)8921
10)n
11)if(i%8==0)printf("\n");
12)’\0’或0
13)bd
14)person[i].sex
15)1230
三、程序编写题
1.求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。
例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
程序源代码:
main()
{
inta,n,count=1;
longintsn=0,tn=0;
printf("pleaseinputaandn\n");
scanf("%d,%d",&a,&n);
printf("a=%d,n=%d\n",a,n);
while(count<=n)
{
tn=tn+a;
sn=sn+tn;
a=a*10;
++count;
}
printf("a+aa+...=%ld\n",sn);
}
2.在主函数调用一个LineMax函数,实现在N行M列的二维数组中,找出每一行上的最大值,数组各元素从键盘输入。
#include
#defineN3
#defineM4
voidLineMax(intx[M][N])
{inti,j,p;
for(i=0;i{p=0;
for(j=1;jif(x[i][p]printf("Themaxvalueinline%dis%d\n",i,x[i][p]);
}
}
voidmain()
{intx[M][N];
for(i=0;ifor(j=0;jscanf(“%d\n”,&x[i][j]);
LineMax(x);
}