青大c程序改错题库.docx
《青大c程序改错题库.docx》由会员分享,可在线阅读,更多相关《青大c程序改错题库.docx(64页珍藏版)》请在冰豆网上搜索。
青大c程序改错题库
试卷编号:
10578
所属语言:
C语言
试卷方案:
TC_150********2
试卷总分:
440分
共有题型:
1种
一、程序改错共44题(共计440分)
第1题(10.0分)题号:
380难度:
中第2章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
输入两个双精度数,函数返回它们的平方和的平方根值。
例如:
输入:
22.936和14.121,输出为:
y=26.934415。
------------------------------------------------------*/
#include
#include
#include
/**********FOUND**********/
doublefun(double*a,*b)
{
doublec;
/**********FOUND**********/
c=sqr(a*a+b*b);
/**********FOUND**********/
return*c;
}
main()
{
doublea,b,y;
printf("Entera,b:
");
scanf("%lf%lf",&a,&b);
y=fun(&a,&b);
printf("y=%f\n",y);
}答案:
=======(答案1)=======
doublefun(double*a,double*b)
=======(答案2)=======
c=sqrt(*a**a+*b**b);
=======(答案3)=======
returnc;
第2题(10.0分)题号:
438难度:
中第2章
/*------------------------------------------------
【程序改错】
--------------------------------------------------
功能:
编写函数fun,求两个整数的最小公倍数,然后用主
函数main()调用这个函数并输出结果,两个整数由
键盘输入。
------------------------------------------------*/
#include
intfun(intm,intn)
{
inti;
/**********FOUND**********/
if(m=n)
{
i=m;
m=n;
n=i;
}
for(i=m;i<=m*n;i+=m)
/**********FOUND**********/
if(i%n==1)
return(i);
return0;
}
main()
{
unsignedintm,n,q;
printf("m,n=");
scanf("%d,%d",&m,&n);
/**********FOUND**********/
q==fun(m,n);
printf("p(%d,%d)=%d",m,n,q);
}答案:
=======(答案1)=======
if(m=======(答案2)=======
if(i%n==0)
=======(答案3)=======
q=fun(m,n);
第3题(10.0分)题号:
404难度:
易第2章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
编写函数求2!
+4!
+6!
+8!
+10+12!
+14!
。
------------------------------------------------------*/
#include
longsum(intn)
{
/**********FOUND**********/
inti,j
longt,s=0;
/**********FOUND**********/
for(i=2;i<=n;i++)
{
t=1;
for(j=1;j<=i;j++)
t=t*j;
s=s+t;
}
/**********FOUND**********/
return(t);
}
main()
{
printf("thissum=%ld\n",sum(14));
}答案:
=======(答案1)=======
inti,j;
=======(答案2)=======
for(i=2;i<=n;i=i+2)
=======(答案3)=======
return(s);
第4题(10.0分)题号:
360难度:
中第2章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
计算正整数num的各位上的数字之积。
例如:
若输入:
252,则输出应该是:
20。
若输入:
202,则输出应该是:
0。
------------------------------------------------------*/
#include
#include
longfun(longnum)
{
/**********FOUND**********/
longk=1
do
{
k*=num%10;
/**********FOUND**********/
num\=10;
/**********FOUND**********/
}while(!
num);
return(k);
}
main()
{
longn;
printf("Pleaseenteranumber:
");scanf("%ld",&n);
printf("\n%ld\n",fun(n));
}答案:
=======(答案1)=======
longk=1;
=======(答案2)=======
num/=10;
=======(答案3)=======
}while(num);
第5题(10.0分)题号:
413难度:
易第2章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
读取7个数(1-50)的整数值,每读取一个值,程序打印
出该值个数的*。
------------------------------------------------------*/
#include
main()
{
inti,a,n=1;
/**********FOUND**********/
while(n<7)
{
do
{
scanf("%d",&a);
}
/**********FOUND**********/
while(a<1&&a>50);
/**********FOUND**********/
for(i=0;i<=a;i++)
printf("*");
printf("\n");
n++;
}
}答案:
=======(答案1)=======
while(n<=7)
=======(答案2)=======
while(a<1||a>50);
=======(答案3)=======
for(i=1;i<=a;i++)
第6题(10.0分)题号:
553难度:
中第1章
/*-------------------------------------------------------
【程序改错】
---------------------------------------------------------
题目:
列程序的功能为:
已知圆锥半径r和高h,计算圆锥体积v。
请纠正程序中存在错误,
使程序实现其功能。
-------------------------------------------------------*/
#include
main()
{
/***********FOUND***********/
floatr=10,h=5;
/***********FOUND***********/
v=1/3*3.14159*r2*h;
/***********FOUND***********/
printf("v=%d\n",v);
}
答案:
=======(答案1)=======
floatr=10,h=5,v;
=======(答案2)=======
v=1.0/3*3.14159*r*r*h;
=======(答案3)=======
printf("v=%f\n",v);
第7题(10.0分)题号:
399难度:
易第2章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
编写函数fun求20以内所有5的倍数之积。
------------------------------------------------------*/
#include
#defineN20
intfun(intm)
{
/**********FOUND**********/
ints=0,i;
for(i=1;i/**********FOUND**********/
if(i%m=0)
/**********FOUND**********/
s=*i;
returns;
}
main()
{
intsum;
sum=fun(5);
printf("%d以内所有%d的倍数之积为:
%d\n",N,5,sum);
}答案:
=======(答案1)=======
ints=1,i;
=======(答案2)=======
if(i%m==0)
=======(答案3)=======
s=s*i;
第8题(10.0分)题号:
397难度:
中第2章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
输入两个实数,按代数值由小到大输出它们,并在fun()
函数中输出。
(输出的数据都保留2位小数)
------------------------------------------------------*/
#include
fun()
{
/**********FOUND**********/
floatt
floata,b;
scanf("%f%f",&a,&b);
/**********FOUND**********/
if(a
{
t=a;
a=b;
b=t;
}
/**********FOUND**********/
printf("%5.2f,%5.2f\n",&a,&b);
}
main()
{
fun();
}答案:
=======(答案1)=======
floatt;
=======(答案2)=======
if(a>b)
=======(答案3)=======
printf("%5.2f,%5.2f\n",a,b);
第9题(10.0分)题号:
28难度:
中第1章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
实现两个字符串的连接。
例如:
输入dfdfqe和12345时,则输出dfdfqe12345.
------------------------------------------------------*/
#include
main()
{
chars1[80],s2[80];
voidscat(chars1[],chars2[]);
gets(s1);
gets(s2);
scat(s1,s2);
puts(s1);
}
voidscat(chars1[],chars2[])
{
inti=0,j=0;
/**********FOUND**********/
while(s1[i]=='\0')
i++;
/**********FOUND**********/
while(s2[j]=='\0')
{
/**********FOUND**********/
s2[j]=s1[i];
i++;
j++;
}
/**********FOUND**********/
s2[j]='\0';
}答案:
=======(答案1)=======
while(s1[i]!
='\0')
=======(答案2)=======
while(s2[j]!
='\0')
=======(答案3)=======
s1[i]=s2[j];
=======(答案4)=======
s1[i]='\0';
第10题(10.0分)题号:
11难度:
中第1章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
用下面的和式求圆周率的近似值。
直到最后一项的绝对值
小于等于0.0001。
π111
—=1-—+—-—+...
4357
------------------------------------------------------*/
#include
/**********FOUND**********/
#include
fun()
{
inti=1;
/**********FOUND**********/
ints=0,t=1,p=1;
/**********FOUND**********/
while(fabs(t)<=1e-4)
{
s=s+t;
p=-p;
i=i+2;
t=p/i;
}
/**********FOUND**********/
printf("pi=%d\n",s*4);
}
main()
{
fun();
}答案:
=======(答案1)=======
#include
=======(答案2)=======
floats=0,t=1,p=1;
=======(答案3)=======
while(fabs(t)>1e-4)
=======(答案4)=======
printf("pi=%f\n",s*4);
第11题(10.0分)题号:
401难度:
易第2章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
编写函数fun计算下列分段函数的值:
x*x+xx<0且x≠-3
f(x)=x*x+5x0≤x<10且x≠2及x≠3
x*x+x-1其它
------------------------------------------------------*/
#include
doublefun(floatx)
{
/**********FOUND**********/
doubley
/**********FOUND**********/
if(x<0||x!
=-3.0)
y=x*x+x;
elseif(x>=0&&x<10.0&&x!
=2.0&&x!
=3.0)
y=x*x+5*x;
else
y=x*x+x-1;
/**********FOUND**********/
returnx;
}
main()
{
doublef;
floatx;
printf("inputx=");
scanf("%f",&x);
f=fun(x);
printf("x=%f,f(x)=%f\n",x,f);
}答案:
=======(答案1)=======
floaty;
=======(答案2)=======
if(x<0&&x!
=-3.0)
=======(答案3)=======
returny;
第12题(10.0分)题号:
10难度:
中第1章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
判断m是否为素数,若是返回1,否则返回0。
------------------------------------------------------*/
#include
/**********FOUND**********/
voidfun(intn)
{
inti,k=1;
if(m<=1)k=0;
/**********FOUND**********/
for(i=1;i/**********FOUND**********/
if(m%i=0)k=0;
/**********FOUND**********/
returnm;
}
voidmain()
{
intm,k=0;
for(m=1;m<100;m++)
if(fun(m)==1)
{
printf("%4d",m);k++;
if(k%5==0)printf("\n");
}
}
答案:
=======(答案1)=======
intfun(intm)
=======(答案2)=======
for(i=2;i=======(答案3)=======
if(m%i==0)k=0;
=======(答案4)=======
returnk;
第13题(10.0分)题号:
23难度:
中第1章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
先从键盘上输入一个3行3列矩阵的各个元素的值,然后输
出主对角线上的元素之和sum。
------------------------------------------------------*/
#include
voidfun()
{
inta[3][3],sum;
inti,j;
/**********FOUND**********/
a=0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
/**********FOUND**********/
scanf("%d",a[i][j]);
for(i=0;i<3;i++)
/**********FOUND**********/
sum=sum+a[i][j];
/**********FOUND**********/
printf("sum=%f\n",sum);
}
main()
{
fun();
}答案:
=======(答案1)=======
sum=0;
=======(答案2)=======
scanf("%d",&a[i][j]);
=======(答案3)=======
sum=sum+a[i][i];
=======(答案4)=======
printf("sum=%d\n",sum);
第14题(10.0分)题号:
391难度:
中第2章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
求出N×M整型数组的最小元素及其所在的行坐标及列坐标
(如果最小元素不唯一,选择位置在最前面的一个)。
例如:
输入的数组为:
923
4156
1219
10112
求出的最小数为1,行坐标为2,列坐标为1。
------------------------------------------------------*/
#include
#defineN4
#defineM3
intRow,Col;
intfun(intarray[N][M])
{
intmin,i,j;
min=array[0][0];
Row=0;
Col=0;
for(i=0;i{