c语言数列求和:求1-2/3+3/5-4/7+5/9-6/11+...的前n项和,结果保留3位小数

#include<stdio.h>
#include<math.h>
int main()
{
int n,i,deno;
double sum,flag;
scanf("%d",&n);
flag=1;
sum=0;deno=1;
for(i=1;i<=n;i++)
{
sum=flag*(i/deno)+sum;
deno+=2;
flag=-flag;
}

printf("%.3f\n",sum);
return 0;
}
这样运行之后 输入5 输出为1 但正确答案是0.917,,然后我deno定义为double类型时竟然神奇的又好了 有什么区别? 为什么呢

i/deno只有当i = 1 deno = 1,i/deno = 1,
其他情况得0,因为"/"对于int型数据来说,除后取整操作,即10/9=1.111111......,那么实际结果为1,小数点后的全部丢弃(不是四舍五入,而是全舍)
要想得到你要的结果应该这样
1.0 * i / deno //1.0是double型的,与i相乘还得double型的,这样就能出正确结果

或 ((double) i ) / deno追问

是不是只要运算中有一个浮点数得到的结果就是浮点数,譬如像我那样直接把deno定义double类型

追答

嗯对的,精度低与精度高的数值操作后得精度较高同类型的值

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-09-26
i/deno这两个计算的结果是个整数。追问

是因为两个数都是整数吗?

追答

是的

相似回答