论坛新人,请前辈帮忙:C语言求定积分
[size=24px][/size]比如用梯形法求函数 f=X²在区间(1,5)之间的近似值,用n等分区间,eps来确定精确度。例如s1表示用n来等分区间时求得的值,s2表示用2n等分区间时求得的值,当s1与s2之间的差值小于我设定的精度eps时,即返回s1的值。
请问如何用c语言来表示。下面是我的代码,s1的返回值总是为0。
[code=C/C++][/code]#include<stdio.h>
#include<math.h>
int main()
{
int i,a,b,x,n;
float h,s1,s2,eps;
a=1;b=1;
printf("set the parts:");
scaenf("%d",&n);
printf("set the eps:");
scanf("%f",&eps);
while(fabs(s1-s2)>=eps)
{
h=(b-a)/n;
for(i=0,s1=0,x=a;i<n;i++)
{s1+=(x*x+(x+h)*(x+h))*h/2;
x+=h;
}
n*=2;h=(b-a)/n;
for(i=0,s2=0,x=a;i<n;i++)
{s2+=(x*x+(x+h)*(x+h))*h/2;
x+=h;
}
}
printf("%.1f\n",s1);
return 0;
}
[解决办法]
代码及题目本身的疑问:
1. s1和s2都没有初值
2. scaenf("%d",&n);应该是scanf("%d",&n);
3. a和b皆为1?
4. 如果输入的n,使得fabs(s1 - s2) >= eps,那n是不是要重新取值?所以,我认为如果要求了fabs(s1 - s2) < eps,那么就不需要再要求有n了,也就是说n和fabs(s1 - s2) < eps只需要一个即可。
[解决办法]
http://wenku.baidu.com/view/482375c308a1284ac85043fd.html
看看这篇对你还有帮助。