一个C语言的程序,不知错在哪里,这是程序代码,答案是0.9460831

来源:百度知道 编辑:UC知道 时间:2024/05/16 15:17:15
/* Note:Your choice is C IDE */
#include "stdio.h"
#include "math.h"
double f(double x)
{
double y;
if(x==0) y=1;
else y=sin(x)/x;
return(y);
}
main()
{
double a,b,e,h,k,s,n,m=0,t[100];
printf("please input a,b,e\n");
scanf("%lf%lf%lf",&a,&b,&e);
n=1;
t[1]=(b-a)*(f(a)+f(b))/2;
do
{
h=(b-a)/n;
s=0;
for(k=0;k<n;k++)
{
s+=f(a+(k+1/2)*h);
}
t[2*n]=t[n]/2+h/2*s;
n=n*2;
m=m+1;
}
while(fabs(t[n/2]-t[n/4])>=e);
printf("%lf",m);
printf("f(x)*dx=%lf",t[n/4]);
}

你这个是计算积分的.
我直接将初值终值设为0,1
应当与你的原意是一致的.

/* Note:Your choice is C IDE */
#include "stdio.h"
#include "math.h"
double f(double x)
{
double y;
if(x==0) y=1;
else y=sin(x)/x;
return(y);
}

/*你那样,浪费t数组的空间,我将你的t的角标由n变成m*/

main()
{
double a,b,e,h,k,s,n,t[100];
int m;
/*printf("please input a,b,e\n");
scanf("%lf%lf%lf",&a,&b,&e); */
a=0;
b=1;
e=1e-8;

n=1;
m=1;
t[1]=(b-a)*(f(a)+f(b))/2;
do
{
h=(b-a)/n;
s=0;
for(k=0;k<n;k++)
{
s+=f(a+(k+1.0/2)*h); /*这里应当改为1.0/2*/
}
t[m+1]=t[m]/2+h/2*s;
n=n*2;
m=m+1;
}
while(fabs(t[m]-t[m-1])>=e); /*这个,你原先的有问题,你就看第一次运行时,你的n=2,你这里是t[n/2]-t[n/4]是不对的*/
printf("%d\n",m);
printf("f(x)*dx=%.7lf",t[m-1]);
getch();
}

不知道你的题目目的是什么。不