一道不知道错在哪里的c程题,达人帮忙看看

输入一个正整数repeat(0<repeat<10),做repeat次下列运算:输入精度eps,根据下式求PI的值,直到最后一项小于eps。PI/2=1+1/(1*3)+... 输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入精度eps,根据下式求 PI 的值,直到最后一项小于eps。
PI/2=1+1/(1*3)+2!/(1*3*5)+3!/(1*3*5*7)+...+n!/(1*3*5*...*(2n+1))
要求定义并调用函数 fact(n)计算 n!,函数形参n的类型是int,函数类型是double;定义并调用函数 multi(n)计算 1*3*5*...*n,函数形参n的类型是int,函数类型是double。
输入输出示例:括号内是说明
输入:
2 (repeat=2)
1E-6 (eps=1E-6)
1E-5 (eps=1E-5)
输出示例:
PI = 3.14159
PI = 3.14158
题目要求完毕

自己写的如下
#include <stdio.h>
double fact(int n);
double multi(int n);
int main(void)
{
int i;
int repeat, ri;
double eps, sum, item;

scanf("%d", &repeat);
for(ri = 1; ri <= repeat; ri++){
scanf("%le", &eps);
sum=1;
i=1;
item=1;
while(item>=eps){
item=fact(i)/multi(i);
sum=sum+item;
i++;
}
printf("PI = %0.5f,%f,%f\n", 2 * sum,fact(i),multi(i));
}

}

double multi(int n)
{
int i,m;
m=1;
for(i=1;i<=(2*n+1);i=i+2)
m=m*i;
return m;
}

double fact(int n)
{
int i,f;
f=1;
for(i=1;i<=n;i++)
f=f*i;
return f;
}
错在哪里了啊,懂的朋友看看吧,还有为什么输入1e-6后multi(i)输出的是负数呢
展开
 我来答
阳光上的桥
2009-05-17 · 知道合伙人软件行家
阳光上的桥
知道合伙人软件行家
采纳数:21424 获赞数:65726
网盘是个好东东,可以对话和传文件

向TA提问 私信TA
展开全部
你这些函数都是错的:

double multi(int n)
{
int i,m;
m=1;
for(i=1;i<=(2*n+1);i=i+2)
m=m*i;
return m;
}

double fact(int n)
{
int i,f;
f=1;
for(i=1;i<=n;i++)
f=f*i;
return f;
}

返回类型要是double,那么里面的变量m和f都应该定义为double,否则结果超过int的32767就会出现负数,这两个函数应该修改为:

double multi(int n)
{
int i;
double m=1;
for(i=1;i<=(2*n+1);i=i+2) m=m*i;
return m;
}

double fact(int n)
{
int i;
double f=1;
for(i=1;i<=n;i++) f=f*i;
return f;
}

另外,你程序里面的输入语句是scanf("%d", &repeat); 这就只能输入整数,你输入1e-6肯定是无法正确工作的。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式