按照我最开始的思路就是执行下面的代码
#include<stdio.h>
#include<Windows.h>int main()
{
int i=0;
double sum1=0;
double sum2=0;
double sum=0;
for(i=1;i<101;i++)
{
if(i%2==0)
{
sum1=sum1+1/i;
}
else
{
sum2=sum2+1/i;
}
}
sum=sum2-sum1;
printf("%lf\n",sum);
system("pause");
return 0;
}
就这样的程序我调了一个多小时,愣是没看出来。
然后发现i是整形,1/i也是整形,而sum1是浮点型,这样赋值就出现了问题
然后把1改成 1.0;
就这样程序改好了。
真是细节觉得成败。
其实这个程序还可以在简化一下
int main()
{
int i=0;
int flag=1;
double sum=0.0;
for(i=1;i<101;i++)
{
sum=sum+flag*(1.0/i);
flag = -flag;
}
printf("%lf\n",sum);
system("pause");
return 0;
}
直接用flag=-flag替代1和-1之间的变换
节省了许多无效的代码。