一个简单的程序问题 为什么答案都是1.0000000000? 我想算 1/1-1/2+1/3-1/4。。。。

#include <stdio.h>

int main(){
int i,n;
double sum1=0,sum2=0,sum=0;
printf("input an integer\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
sum1=1/i+sum1;
for(i=2;i<=n;i+=2)
sum2=sum2+1/i;
printf("result=%f",sum1-2*sum2);
}

#include <stdio.h>

int main(){
int i,n;
double sum1=0,sum2=0,sum=0;
printf("input an integer\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
sum1=1/(double)i+sum1;//强制类型转换
for(i=2;i<=n;i+=2)
sum2=sum2+1/(double)i;//强制类型转换
printf("result=%f",sum1-2*sum2);
}
不使用类型转换,则1和i都是整型,那么相除也得到整型
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-10-16
呵呵这个问题很好解决也很容易犯:你的i为整形的所以当i=1时,1/i=1,其余的当i>1时1/i=0,所以你的结果永远都是1.0000000000.要改的话直接定义i为double形的就可以了

编程计算 sum=1+1\/2!+1\/3!+……+1\/10!, 并输出结果。
double sum=0;for(int i=1;i<=m;i++){ k *= i;sum += 1\/k;} printf("%.10f\\n",sum);return 0;}

0.999999999……=1?
因此0.999999999...所指的是9的个数为无穷多个,这一点首先要明确。然后就可以用等比数列知识来证明上述结论。证明过程如下:0.999999999...=0.9+0.09+0.009+0.0009+...=0.9*(1-0.1^n)\/(1-0.1)=0.9\/(1-0.1)=1(其中n为无穷大)因此0.99999999...=1是成立的。

C语言中为什么不能用 if(a==b)判断两个浮点数是否相等?我知道 if...
你查一下符点数存储标准IEEE754就知道了!符点数是采用二进制科学计数法来进行存储的,因此,绝大多数的数在计算机中是不能 精确 表示的。如果两个数a b都是常数赋值,这样比较,应该不会有问题,如:double a=5.3,b=5.3;if ( a == b ){ printf("a=b\\n");} 这时会输出a=b 如果a或...

相似回答