C语言达人近来看看 很奇怪的问题

来源:百度知道 编辑:UC知道 时间:2024/05/12 20:03:52
#include <stdio.h>
#include <math.h>

double d(double (*p)(double))
{
double a,b,t=1e-6,i,s=0.0;
scanf("%f%f",&a,&b);
printf("%f %f",a,b);//这里输出的不是输入的a,b,是一串溢出的数据
for(i=a;i<=b;i+=t)
s=s+t*((*p)(i));
return(s);
}

double f(double x)
{
return(sin(x));
}

main()
{
printf("dsinx=%f\n",d(f));
}
写了这么一个求定积分的函数,跑了一下看看,结果跑出来全是0。00000,然后加了一个输出a,b的值看看,结果发现输出的不是输入的值,百思不得其解。

double 用 %lf 格式化输入输出

小弟是初学者,虽然不知道你要干什么,但是这样改了以后至少结果不会是0。
#include <stdio.h>
#include <math.h>

float d()
{
float a,b,t=1e-6,i,s=0.0;
do
{
printf("Input a,b:");
scanf("%f,%f",&a,&b);
}
while(a>b);
printf("\n%f %f\n",a,b);
for(i=a;i<=b;i+=t)
s+=t*(sin(i));
return(s);
}
main()
{
printf("dsinx=%f\n",d());
}

double 换成 float
float精确度足够了

for(i=a;i<=b;i+=t)
s=s+t*((*p)(i));
return(s);
可能是这是错