学习型 ASP/PHP/ASP.NET 主机 30元/年全能 ASP/PHP/ASP.NET 主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付
发新话题
打印

关于pow函数的一个问题

关于pow函数的一个问题

#include "math.h"
main()
{int i,n;
double sum;                     
scanf("%d",&n);
for(i=1,sum=0;i<=n;i++)
sum+=1/i*pow(-1,i+1);
printf("\nsum is %.2f\n",sum);
system("pause");}
这个程序无论我输入什么结果都是1.00,哪里出错了那?

TOP

错在 sum+=1/i*pow(-1,i+1); 这一句, ”1/i“ 被编译器视为整型相除,结果为整数, 当i=1时,1/i 结果为 1 , 当后面的i都大于1时, 1/i 结果就变成 0 了, 所以实际上你只能得 i =1 时的结果 ,后面的都因为
pow()结果乘以前面的0而变成0了, 所以,原因不是 pow的问题,。。

你把 ‘1/i’ 改成 “1.0/i” 试试!
真理往往掌握在少数人手中,可现实却是少数服从多数!

TOP

按你说的的确可以 ,但是我这么想: 我之前已经定义 sum为double型,那么 sum+=1/i*pow(-1,i+1);中所有变量都要转换为double型再运算,所以1/i可以得到double型,这么想错哪儿了

TOP

”1/i“ 编译器是不认同你的想法的,它是不会帮你自动转换的,甚至报错都不会。。。
真理往往掌握在少数人手中,可现实却是少数服从多数!

TOP

发新话题