/**********FOUND**********/
if(m%i=0)k=0;
/**********FOUND**********/
returnm;
}
答案:
【1】intfun(intm)或fun(intm)
【2】for(i=2;ii;i++)或for(i=2;i<=m-1;i++)或for(i=2;m-1=>i;i++)
【3】if(m%i==0)k=0;
【4】returnk;
12)./*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
用下面的和式求圆周率的近似值。
直到最后一项的绝对值
小于等于0.0001。
π111
—=1-—+—-—+...
4357
------------------------------------------------------*/
/**********FOUND**********/
#include"stdio.h"
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"math.h"或#include
【2】floats=0,t=1,p=1;或floats=0,p=1,t=1;或floatp=1,s=0,t=1;或floatp=1,t=1,s=0;或floatt=1,p=1,s=0;或floatt=1,s=0,p=1;
【3】while(fabs(t)>1e-4)或while(0.00010.0001)
【4】printf("pi=%f\n",s*4);
13)./*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
求1到10的阶乘的和。
------------------------------------------------------*/
main()
{
inti;
floatt,s=0;
floatfac(intn);
/**********FOUND**********/
for(i=1;i<10;i++)
/**********FOUND**********/
s=fac(i);
printf("%f\n",s);
}
floatfac(intn)
{
/**********FOUND**********/
inty=1;
inti;
for(i=1;i<=n;i++)
y=y*i;
/**********FOUND**********/
return;
}
答案:
【1】for(i=1;i<=10;i++)或for(i=1;10>=i;i++)或for(i=1;i<11;i++)或for(i=1;11>i;i++)
【2】s=s+fac(i);或s+=fac(i);或s=fac(i)+s;
【3】floaty=1.0;或floaty=1;
【4】returny;或return(y);或return(y);
14)./*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
求1到20的阶乘的和。
------------------------------------------------------*/
fun()
{
intn,j;
floats=0.0,t=1.0;
for(n=1;n<=20;n++)
{
/**********FOUND**********/
s=1;
for(j=1;j<=n;j++)
/**********FOUND**********/
t=t*n;
/**********FOUND**********/
s+t=s;
}
/**********FOUND**********/
printf("jiecheng=%d\n",s);
}
main()
{
fun();
}
答案:
【1】t=1;或t=1.0;
【2】t=t*j;或t*=j;或t=j*t;
【3】s=s+t;或s+=t;或s=t+s;
【4】printf("jiecheng=%f\n",s);
15)./*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
输出Fabonacci数列的前20项,要求变量类型定义成浮点型,
输出时只输出整数部分,输出项数不得多于或少于20。
------------------------------------------------------*/
fun()
{
inti;
floatf1=1,f2=1,f3;
/**********FOUND**********/
printf("%8d",f1);
/**********FOUND**********/
for(i=1;i<=20;i++)
{
f3=f1+f2;
/**********FOUND**********/
f2=f1;
/**********FOUND**********/
f3=f2;
printf("%8.0f",f1);
}
printf("\n");
}
main()
{
fun();
}
答案:
【1】printf("%8.0f",f1);或printf("%f",f1);或printf("%8f",f1);
【2】for(i=1;i<20;i++)或for(i=1;20>i;i++)或for(i=2;i<=20;i++)或for(i=2;20>=i;i++)或for(i=1;i<=19;i++)或for(i=1;19>=i;i++)
【3】f1=f2;
【4】f2=f3;
16)./*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
根据整型形参m的值,计算如下公式的值。
111
t=1-——-——-...-——
2x23x3mxm
例如:
若m=5,则应输出:
0.
------------------------------------------------------*/
doublefun(intm)
{
doubley=1.0;
inti;
/**********FOUND**********/
for(i=2;i/**********FOUND**********/
y-=1/(i*i);
/**********FOUND**********/
returnm;
}
main()
{
intn=5;
printf("\ntheresultis%lf\n",fun(n));
}
答案:
【1】for(i=2;i<=m;i++)或for(i=2;m>=i;i++)或for(i=2;ii;i++)或for(i=2;1+m>i;i++)
【2】y-=1.0/(i*i);或y=y-1.0/(i*i);或y-=1.0/(float)(i*i);或y=y-1.0/(float)(i*i);或y=y-1.0/i/i;或y=y-1.0/(float)i/(float)i;或y=y-1/(double)(i*i);或y-=1/(double)(i*i);
【3】returny;或return(y);或return(y);
18)./*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
计算并输出k以内最大的10个能被13或17整除的自然数之和。
k的值由主函数传入。
例如:
若k的值为500,则函数值为4622。
------------------------------------------------------*/
intfun(intk)
{
intm=0,mc=0,j;
/**********FOUND**********/
while((k>=2)||(mc<10))
{
/**********FOUND**********/
if((k%13=0)||(k%17=0))
{
m=m+k;
mc++;
}
/**********FOUND**********/
k++;
}
/**********FOUND**********/
return;
}
main()
{
printf("%d\n",fun(500));
}
答案:
【1】while((2<=k)&&(mc<10))或while((k>=2)&&(mc<10))或while((2<=k)&&(mc<=9))或while((k>=2)&&(mc<=9))
【2】if(!
(k%17!
=0||k%13!
=0))或if(k%13==0||k%17==0)
【3】k--;或k=k-1;或k-=1;
【4】returnm;或return(m);
19)./*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
计算正整数num的各位上的数字之积。
例如:
输入252,则输出应该是20。
------------------------------------------------------*/
longfun(longnum)
{
/**********FOUND**********/
longk;
do
{
k*=num%10;
/**********FOUND**********/
num\=10;
}while(num);
returnk;
}
main()
{
longn;
printf("\nPleaseenteranumber:
");
/**********FOUND**********/
scanf("%ld",n);
/**********FOUND**********/
printf("\n%ld\n",fun(longn));
}
答案:
【1】longk=1;
【2】num/=10;或num=num/10;
【3】scanf("%ld",&n);
【4】printf("\n%ld\n",fun(n));
20)./*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
已知一个数列从第0项开始的前三项分别为0、0、1,以
后的各项都是其相邻的前三项的和。
下列给定程序中,
函数fun的功能是:
计算并输出该数列的前n项的平方根
之和sum,n的值通过形参传入。
例如:
当n=10时,程序的输出结果应为23.。
------------------------------------------------------*/
#include
/**********FOUND**********/
fun(intn)
{
doublesum,s0,s1,s2,s;
intk;
/**********FOUND**********/
sum=0.0;
if(n<=2)sum=0.0;
s0=0.0;
s1=0.0;
/**********FOUND**********/
s2=0.0;
/**********FOUND**********/
for(k=4;k>n;k++)
{
s=s0+s1+s2;
sum+=sqrt(s);
s0=s1;s1=s2;s2=s;
}
returnsum;
}
main()
{
intn;
scanf("%d",&n);
printf("%lf\n",fun(n));
}
答案:
【1】doublefun(intn)
【2】sum=1.0;或sum=1;
【3】s2=1.0;或s2=1;
【4】for(k=4;k<=n;k++)或for(k=4;n>=k;k++)或for(k=4;kk;k++)或for(k=4;1+n>k;k++)
21)./*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
根据以下公式求π值,并作为函数值返回。
例如:
给指定精度的变量eps输入0.0005时,应当输出Pi=3.。
π1121231234
—=1+—+—x—+—x—x—+—x—x—x—+...
23353573579
------------------------------------------------------*/
doublefun(doubleeps)
{
doubles,t;
intn=1;
s=0.0;
t=1;
/**********FOUND**********/
while(t<=eps)
{
s+=t;
/**********FOUND**********/
t=n/(2*n+1)*t;
n++;
}
/**********FOUND**********/
returns;
}
main()
{
doublex;
scanf("%lf",&x);
printf("\neps=%lf,Pi=%lf\n\n",x,fun(x));
}
答案:
【1】while(t>eps)或while(eps=eps)或while(eps<=t)或while(t>eps)或while(eps=eps)或while(eps<=t)
【2】t=t*n/(2*n+1);或1.0*n/(2*n+1)*t或n/(2*n+1.0)*t或n/(2.0*n+1)*t或n/(2.0*n+1.0)*t或1.0*n/(2.0*n+1.0)*t
【3】return2*s;或return(2*s);或return(2*s);或return(s*2);或return(s*2);
22)./*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
求出两个非零正整数的最大公约数,并作为函数值返回。
例如:
若给num1和num2分别输入49和21,则输出的最大公约数为7。
------------------------------------------------------*/
intfun(inta,intb)
{
intr,t;
if(a
{
t=a;
/**********FOUND**********/
b=a;
/**********FOUND**********/
a=t;
}
r=a%b;
while(r!
=0)
{
a=b;
b=r;
/**********FOUND**********/
r=a/b;
}
/**********FOUND**********/
returna;
}
main()
{
intnum1,num2,a;
scanf("%d%d",&num1,&num2);
a=fun(num1,num2);
printf("themaximumcommondivisoris%d\n\n",a);
}
答案:
【1】a=b;
【2】b=t;
【3】r=a%b;
【4】returnb;或return(b);或return(b);
26)./*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
找出大于m的最小素数,并将其作为函数值返回。
------------------------------------------------------*/
#include
intfun(intm)
{
inti,k;
for(i=m+1;;i++)
{
/**********FOUND**********/
for(k=1;k
/**********FOUND**********/