主题:求解啊
wsmbaw0707
[专家分:0] 发布于 2012-02-02 14:46:00
信汇款、中奖信息、陌生电话,勿使用外挂软件。
Began change (470018019) 14:25:17
1+1/1!+1/2!+.....+1/n! 当最后一项小于1e-4为止
#include<stdio.h>
void main()
{
int n,t;
double k,sum;
n=1;
t=1;
sum=1.0;
while(1/n>=1e-4)
t=n*t;
k=1/t;
sum=sum+k;
n=n+1;
printf("%lf",sum);
}
又不对。。
回复列表 (共5个回复)
沙发
wsmbaw0707 [专家分:0] 发布于 2012-02-02 14:48:00
编译器通过 但没结果
板凳
qq312448494 [专家分:0] 发布于 2012-02-02 15:08:00
把需要循环的部分用大括号括起来试试~
3 楼
遗憾见多了 [专家分:100] 发布于 2012-02-02 15:58:00
1/n 得 0
4 楼
Sky_YiBai [专家分:140] 发布于 2012-02-02 17:54:00
这是我写的,已经编译正确。你看看吧
#include <stdio.h>
void main()
{
float n=1.0;
float t=1.0;
double k=0.0;
double sum=1.0;
do{
sum=sum+k;
t=n*t;
k=1/t;
n++;
}while(k>=1e-4);
printf("%lf",sum);
}
你的问题是:
1.首先,明显的问题是:printf语句没位置不对,你应该把while语句的括号写出来,照你这个格式书写,tc的理解是每个while循环输出一下!
2.我建议你你在定义n,t,k三个变量时,不要定义成int型,因为经过除法有类型的强制转换问题,也可能导致不精确,同时n,t没必要定义成双精度,因为他的有效位数到不了那么高,定义成double型会浪费存储空间!
3.由于本题的n值并不是提前给定的,而是要求n的阶乘的倒数>=1e-4,所以我觉得do while语句比while语句更好,当然while语句也可以,建议你体会一下两者的差别!
结果是:2.718254 如果精度差,你就全改成double即可~~
5 楼
Sky_YiBai [专家分:140] 发布于 2012-02-02 18:20:00
不行你就把阶乘的运算定义成自定义函数,再调用,有问题随时问我
我来回复