错哪了?

来源:百度知道 编辑:UC知道 时间:2024/06/20 09:55:45
#include <stdio.h>
#include <math.h>
double fun ( double eps)
{int i;
float a=1.0,b=1.0,pi,sum=1.0,s;
for(i=2;s>=eps;i++)
{a=a*(i-1);
b=b*(2*i-1);
s=a/b;
sum=sum+s;
}
pi=2*sum;

return pi;

}
main( )
{ double x;
printf("Input eps:") ;
scanf("%lf",&x); printf("\neps = %lf, PI=%lf\n", x, fun(x));
NONO();
}
NONO ( )
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *fp, *wf ;
int i ;
double x ;
fp = fopen("C:\\WEXAM\\24018006\\in.dat","r") ;
wf = fopen("C:\\WEXAM\\24018006\\out.dat","w") ;
for(i = 0 ; i < 10 ; i++) {
fscanf(fp, "%lf", &x) ;
fprintf(wf, "%lf\n", fun(x)) ;
}
fclose(fp) ;
fclose(wf) ;
}

请问功能函数fun的函数

这是一个计算圆周率pi的值的程序,eps是精度,越小pi越精确。至少得取0.3以下。s至少取值为1,大了也行无所谓,因为在for循环里面会修改它的值。主要是for循环第一次运行时 s>eps 成立,这样s才会大于eps,for循环才会运行。
double fun ( double eps)
{
int i;
float a=1.0,b=1.0,pi,sum=1.0,s=1.0;
for(i=2;s>=eps;i++)
{
a=a*(i-1);
b=b*(2*i-1);
s=a/b;
sum = sum + s;
}
pi=2*sum;
return pi;
}

fun函数没错,只要给 s 初始化为1或大点的数,且传递的 eps 小于 s 值

float a=1.0,b=1.0,pi,sum=1.0,s;
变量s 没有初始化
改为:
float a=1.0,b=1.0,pi=0,sum=1.0,s=0;

写的很难看懂

你先把程序功能说清点

另外你中间文件打开为何要用两个文件指针呢?

s没有初始化,将
float a=1.0,b=1.0,pi,sum=1.0,s;
改为
double a=1.0,b=1.0,pi,sum=1.0,s=1;

**************************************

注意,楼上网友提到的s=0是行不通的,因为输入的精度不可能是一个负值,所以如果s=0就和没有修改的结果一样.

s没有赋初值,另外NONO函数要定义在main函数之前。
不过改了之后编译没错,运行时错了。
应该是没有你NONO函数的文件,所以没有读入。

你的fun中的s变量没初始化就直接进行
for(i=2;s>=eps;i++)中的判断了 这样的话s是个很大的负数判断应该为假,所以进