一道不知道错在哪里的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)输出的是负数呢 展开
输入精度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)输出的是负数呢 展开
1个回答
展开全部
你这些函数都是错的:
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肯定是无法正确工作的。
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肯定是无法正确工作的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询