计算数列 1-1/3!+1/5!-1/7!+1/9!-…的和至某项的绝对值小于 1e-5 时为止(该项不累加)(注意精度控制)

计算数列1-1/3!+1/5!-1/7!+1/9!-…的和至某项的绝对值小于1e-5时为止(该项不累加)。(注意精度控制)三种方法,答案都不一样。第一种是给的答案(答案总... 计算数列 1-1/3!+1/5!-1/7!+1/9!-…的和至某项的绝对值小于 1e-5 时为止(该项不累加)。(注意精度控制)
三种方法,答案都不一样。第一种是给的答案(答案总错所以有点不敢信)0.6几,第二种是自己写的-0.72几,第三种是网上搜索加自己改编0.78几。
求问哪里错了?正确的怎样的?C语言。

1、#include<stdio.h>
#include<math.h>
void main()
{
float s=1,t=1,i=3;
while(fabs(1/t)>=1e-5)
{
t=-t*(i-1);
s=s+1/t;
i+=2;
}
printf("%.6f",s);
}

2、#include <stdio.h>
#include <math.h>
void main()
{
float sum=0,i=1;
int n;
for (n=1;fabs(1/i)>=1e-5;n=n+2)
{
i=-i*n;
sum=sum+1/i;
}
printf("%.6f",sum);
}

3、#include <stdio.h>

#include <math.h>
int main( )
{
int temp, flag;
double item, sum;
sum=0.0;
flag=1;
temp=1;
item=1;
while(item>=1e-5)
{
sum=sum+flag*item;
flag=-flag;
temp=temp+2;
item=1.0/temp;
}
printf("%.6f\n", sum);
}
展开
 我来答
xoaxa
2014-02-04 · TA获得超过8612个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3513万
展开全部

/*

0.841468

Press any key to continue

*/

#include <stdio.h>

double Fact(int n) { // 返回n!
double i,fact = 1;
for(i = 1; i <= n; ++i)
fact *= i;
return fact;
}

void main() {
double s = 0,t = 1,sign = 1;
int i = 1;
while(t >= 1E-5) {
s += sign * t;
++i;
t = 1 / Fact(2 * i - 1);
sign = -sign;
}
printf("%.6lf\n",s);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友72165e1
2014-02-04 · TA获得超过2170个赞
知道大有可为答主
回答量:1369
采纳率:100%
帮助的人:429万
展开全部
第一个程序中,按程序的变量定义和题目的意思,t应该依次是1,3,5,7,...的阶乘,但从实际的代码实现上却不是。不仅如此,第二、第三个程序也不是计算出奇整数的阶乘后再取其倒数,所以造成了错误的计算结果。
按第一个程序修改程序清单如下:
#include<stdio.h>
#include<math.h>
void main()
{
float s=0,t=1,i=1;
float h=1,a=1;
while(a>=1e-5)
{
s+=a*h;
h=-h;
t*=++i;
t*=++i;
a=1.0/t;
}
printf("%.6f",s);
}
经上机运行通过,并且其结果应该是0.84...
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式