河海大学级C语言期终考试试题机电学院.docx
《河海大学级C语言期终考试试题机电学院.docx》由会员分享,可在线阅读,更多相关《河海大学级C语言期终考试试题机电学院.docx(17页珍藏版)》请在冰点文库上搜索。
河海大学级C语言期终考试试题机电学院
2009-2010学年第1学期《C语言程序设计》课内考试卷(A卷)
授课班号年级专业学号姓名仓井空
题号
一
二
三
上机
(1)
上机
(2)
总分
审核
题分
30
20
10
20
20
得分
得分
评阅人
一、选择题(30分,每小题1分)
1.以下所列的C语言常量中,错误的是___B__
A.0xFFB.1.2e0.5C.2LD.'\72'
2.在下列变量名中,合法的是__BF_____
A.intB.text_01C.a*bD.3abc
E.fun(4)F._elseG.a-bc
3.以下变量x、y、z均为double类型且已正确赋值,不能正确表示数学式子
的C语言表达式是____A____
A.x/y*zB.x*(1/(y*z))C.x/y*1/zD.x/y/z
4.设x、y、t均为int型变量,则执行语句:
x=y=3;t=++x||++y;后,y的值为_______
A.不定值B.4C.3D.1
5.以下语句的输出结果是B_______。
charc1=100,c2=100;printf(“%d”,(c1*c2));
A.越界(出错)B.10000C.负数 D.一个字符
6.设x为整数,C语言中能正确地表达数学式0≤x<5的是__D___________
A.0<=x<5B.x=0||x=1||x=2||x=3||x=4
C.x>=0||x<5D.!
(x<0||x>=5)
7.下面程序段执行后
inti=10;floatx;
x=5/i;
x的值为__C____
A.0.5B.0C.0.0D.1.0
8.设有说明“inta=3,b=5,m;”,则执行表达式m=a<=3&&a+b<8后,m的值为_____C_。
A.trueB.falseC.0D.1
9.下面程序段执行后
intx=5,y=7,z=8;
z+=x++||y++||++z
x,y,z的值分别是__A___。
A.6、7、9B.6、8、10C.6、8、8D.6、8、1
10.若执行以下程序时从键盘上输入9,则输出结果是_B____。
A.11B.10C.9D.8
main()
{intn;
scanf("%d",&n);
if(n++<10)printf("%d\n",n);
elseprintf("%d\n",n--);
}
11.若a、b、c1、c2、x、y均是整型变量,正确的switch语句是_C_____
A.B.
switch(a+b);switch(a*a+b*b)
{case1:
y=a+b;break;{case3:
case0:
y=a-b;break;case1:
y=a+b;break;
}case3:
y=b-a,break;
}
C.D.
switchaswitch(a-b)
{casec1:
y=a-b;break;{default:
y=a*b;break
casec2:
x=a*d;break;case3:
case4:
x=a+b;break
default:
x=a+b;case10:
case11:
y=a-b;break;
}}
12.有以下程序段
intk=0
while(k=1)k++;
while循环执行的次数是__A___
A.无限次B.有语法错,不能执行
C.一次也不执行D.执行1次
13.以下程序执行后sum的值是__C_____
A.15B.14C.不确定D.0
main()
{inti,sum;
for(i=1;i<6;i++)sum+=i;
printf("%d\n",sum);
}
14.有以下程序段
intx=3
do{
printf("%d",x-=2);
}while(!
(--x));
其输出结果是_____C___
A.1B.30C.1–2D.死循环
15.若变量c为char类型,能正确判断出c为小写字母的表达式是D_____
A.'a'<=c<='z'B.(c>='a')||(c<='z')
C.('a'<=c)and('z'>=c)D.(c>='a')&&(c<='z')
16.以下程序的输出结果是__C_____
A.0B.29C.31D.无定值
voidfun(intx,inty,intz)
{
z=x*x+y*y;
}
main()
{inta=31;
fun(5,2,a);
printf("%d",a);
}
17.下列程序段的输出结果是__A___?
?
?
?
?
?
___
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);
}
18.下列程序的输出结果是_C______
A.非法B.a[4]的地址C.5D.3
main()
{chara[10]={9,8,7,6,5,4,3,2,1,0},*p=a+5;
printf("%d",*--p);
}
19.下列程序的运行结果是____B_____
A.63B.36C.编译出错D.00
voidfun(int*a,int*b)
{int*k;
k=a;a=b;b=k;
}
main()
{inta=3,b=6,*x=&a,*y=&b;
fun(x,y);
printf("%d%d",a,b);
}
20.下面程序的输出结果是_____C______
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);
}
21.设有以下说明语句
struct_ex{
intx;
floaty;
charz;
}example;
则下面的叙述中不正确的是____B___
A.struct结构体类型的关键字B.example是结构体类型名
C.x,y,z都是结构体成员名D.struct_ex是结构体类型
22.以下程序的输出结果是___B______
A.20B.21C.22D.23
main()
{
inti,k,a[10],p[3];
k=5;
for(i=0;i<10;i++)a[i]=i;
for(i=0;i<3;i++)p[i]=a[i*(i+1)];
for(i=0;i<3;i++)k+=p[i]*2;
printf("%d\n",k);
}
23.以下程序的输出结果是________C__
A.1,5,9B.1,4,7C.3,5,7D.3,6,9
main()
{
inti,x[3][3]={1,2,3,4,5,6,7,8,9};
for(i=0;i<3;i++)printf("%d,",x[i][2-i]);
}
24.以下程序的输出结果是____A______
A.18B.19C.20D.21
main()
{inta[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;
for(i=1;i<3;i++)
for(j=0;j<=i;j++)
s+=a[i][j];
printf("%d\n",s);
}
25.当执行下面的程序时,如果输入ABC,则输出结果是__A____
A.ABC6789B.ABC67C.12345ABC6D.ABC456789
#include"stdio.h"
#include"string.h"
main()
{charss[10]="12345";
gets(ss);strcat(ss,"6789");printf("%s\n",ss);
}
26.以下程序的输出结果是__A____
A.1B.2C.3D.4
longfun(intn)
{longs;
if(n==1||n==2)
s=2;
else
s=n-fun(n-1);
returns;
}
main()
{
printf("%d\n",fun(3));
}
27.以下程序的输出结果是_B_____
A.16B.2C.9D.1
#defineSQR(X)X*X
main()
{
inta=16,k=2,m=1;
a/=SQR(k+m)/SQR(k+m);
printf("d\n",a);
}
28.若定义了以下函数:
voidf(......)
{......
*p=(double*)malloc(10*sizeof(double));
......
}
p是该函数的形参,要求通过p把动态分配存储单元的地址传回主调函数,则形参p的正确定义应当是__C____
A.double*pB.float**pC.double**pD.float*p
29.以下程序的输出是(C)
A.10B.11C.51D.60
struct_st{
intx;
int*y;
}*p;
intdt[4]={10,20,30,40};
struct_staa[4]={50,&dt[0],60,&dt[0],60,&dt[0],60,&dt[0],};
main()
{p=aa;
printf("%d\n",++(p->x));
}
30.while(!
x)中的(!
x)与下面条件__A_________等价
A.x==0B.x!
=1C.x==1D.x!
=0
得分
评阅人
二、读程序,写结果(20分,每题2分)
1.下面程序的输出结果是___fisNOT1.0__________
voidmain()
{
floatf=0.0;
inti;
for(i=0;i<10;i++)
f+=0.1;
if(f==1.0)
printf("fis1.0\n");
else
printf("fisNOT1.0\n");
}
2.下列程序的输出结果是___*#*#*#$_________________
voidmain(void)
{inti;
for(i=1;i<=5;i++)
{if(i%2)printf(“*”);
elsecontinue;
printf(“#”);
}
printf("$\n");
}
3.下列程序段的输出结果是__5359求质数________________________
voidmain()
{
for(t=50,k=0;t<=60;t++)
{
for(i=2;iif(t%i==0)break;
if(i==t)
printf("%5d",t);
}
}
4.下列程序的输出是____123______?
?
?
?
_________
voidincrement(void)
{staticintx=0;
x++;
printf("%d\t",x);
}
main()
{increment();
increment();
increment();
}
5.下列程序的输出结果是_____24最大公约数______________
intxy(inta,intb)
{intr,t;
if(a
t=a;a=b;b=t;
}
r=a%b;
while(r!
=0)
{
a=b;b=r;r=a%b;
}
returnb;
}
voidmain()
{
inta=72,b=96;
printf("%d",xy(a,b));
}
6.下列程序的输出结果是43535______倒续__
#include
main()
{
intx=53534,r;
while(x!
=0)
{
r=x%10;x=x/10;printf(“%d”,r);
}
}
7.写出下面程序的运行结果____75求最大________
voidmain()
{
intm,a[]={25,64,38,40,75,66,38,54};
m=a[0];
for(inti=1;i<8;i++)
if(a[i]>m)
m=a[i];
printf("%d\n",m);
}
8.写出下面程序的运行结果________1,1,20____行列值_____
#include
voidmain()
{
inta[3][4]={{7,5,14,3},{6,20,7,8},{14,6,9,18}};
inti,j,r,c,m;
m=a[0][0];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(a[i][j]>m)
{
m=a[i][j];
r=i;
c=j;
}
printf("%d,%d,%d\n",r,c,m);
}
9.写出下列程序的运行结果____123456789排序____________
voidxyz(inta[],intn)
{inti,j,key;
for(i=1;i<=n-1;i++)
{key=a[i];
for(j=i-1;j>=0;j--)
{
if(keya[j+1]=a[j];//将a[j]向后移动一个位置
else
break;
}
a[j+1]=key;
}
}
voidmain()
{
inta[]={5,2,9,1,3,4,6,8,7};
inti,n=9;
xyz(a,n);
for(i=0;iprintf("%4d",a[i]);
printf("\n");
}
10.下面程序的输出结果是___65423__________
voidfun(intn)
{
if(n==0)return;
else{
printf("%d",n%10);
fun(n/10);
}
}
voidmain()
{
inta=32456;
fun(a);
}
得分
评阅人
三、完善程序(10分,每空2分)
1.下列程序的功能是用牛顿迭代法求实数a的平方根,迭代公式是
.
doublemysqrt(doublea)
{doublex1,x2,eps=1e-5;
x2=a/2;
do{
x1=x2;
x2=0.5*(x1+a/x1);
}while(___[1]x1>eps________);
returnx2;
}
2.链表算法
typedefstruct_lnode
{
intdata;//数据元素,可以是任何类型,这里我们使用整型数据元素
struct_lnode*next;//指向后继节点的指针
}Lnode;
/*用头插法创建链表.用值e构造节点s,始终将节点s插入到首节点前面,并且将first指针指向新的首节点*/
Lnode*list_create(Lnode*first,inte)
{
Lnode*q,*s;
s=(Lnode*)malloc(sizeof(Lnode));//给新结点分配空间,构造新节点
s->data=e;
s->next=0;
if(first==NULL)//空链表
first=s;
else
{
__[2]___s->next=first____________;
__[3]____first=s,p++___________;
}
returnfirst;
}
/*在first所表示的链表中查找值为e的节点,如果找到,返回该节点,否则,返回空指针*/
Lnode*list_find(Lnode*first,inte)
{
Lnode*p;
p=first;
while(p)
{
if(p->data==e)
returnp;
_[4]___________;
}
returnNULL;
}
3.下面的程序实现字符串拷贝,即将字符串src中的内容拷贝到字符串desc中,返回字符串desc。
要求desc必须已经分配空间,并且空间足够大以便容纳src的内容。
char*StrCopy(char*desc,constchar*src)
{char*p;
p=desc;
while(_[5]___________);
returnp;
}