这个程序哪里错了?

来源:百度知道 编辑:UC知道 时间:2024/05/17 04:35:14
#include <iostream>
using namespace std;
int main()
{
float sum=0.0;
int i;

double n;
cout<<"请输入一个整数n \n";
cin>>n;
for(i=1;i<=n;i++)
{
if(i%2==0)
i = -i;
else i = i;
sum = sum + 1.0/i;
}cout<<"sum= "<<sum<<endl;
}
这个程序求1-1/2+1/3-1/4………………1/n
希望指出我的错误~而不是想要个答案

#include <iostream>
using namespace std;
int main()
{
float sum=0.0;
int i,n; //n最好还是用int型的
double t=-1;//增加一个变量表示1或-1
cout<<"请输入一个整数n \n";
cin>>n;
for(i=1;i<=n;i++)
{
t = -t; //不用判断的,只要循环正负就可以了,而且你原来对i进行操作,i是循环变量,你改变它的值,循环就不再固定了,算法也被破坏了,这里是最大的错
sum = sum + t/i;
}cout<<"sum= "<<sum<<endl;
}

你在循环体中把循环变量i给改动了. 当i=2时,i变成了-2, 就错了.可以这样:
if (i%2==0) sum -= 1.0/i;
else sum += 1.0/i;
这样一来, 循环变量i只在循环体每执行一次后由i++改变. 另外,求除以2的余数一般用(i&1). 即:
if (i&1) sum += 1.0/i;
else sum -= 1.0/i;

应该声明int j,
把i=-i 改成 j=-i,
把i=i 改成 j=i,
把sum = sum+1.0/i 改成 sum = sum+1.0/j.
另外n应该是个int, 而不是double.

呵呵大家都看出了"i = -i;"这句对for循环的影响做成不能退出.
我也给一种解法.
在sum = sum + 1.0/i;之后加入一句
if(i<0)
i = -i;