C语言数列的求和1-1/2+1/3-1/4.......的编写

我写出来的代码在验证的时候前两步编译和建立都无错误,就是最后一步运算输入1结果出来的却是0.5然后2是-0.33。感觉是计算式错误,但是我找不出来,请求大佬帮我看看。
#include<stdio.h>
#include<math.h>
int main()
{
double n,i,sum,y,a;
while(scanf("%lf",&n)!=EOF)
{
sum = 0;
for(i=1;i<=n;i++)
y = n+1;
a = pow(-1,y);
sum = sum+(1.0/i*a);
printf("%.2lf\n",sum);
}
return 0;
}

你的程序和题目是两码事。

先抛开题目,说说你程序的问题。

1、a=pow(-1,y),对于给定的n,则a的正负是一定的,起不到改变正负号的作用。

2、for循环需要用大括号括起来。

3、其它不再赘述,下面是具体修改的方法。

修改:

#include<stdio.h>
#include<math.h> //没有必要加载
int main()
{
double n,i,sum,y,a=1; //对a赋初值1,不需要变量y
while(scanf("%lf",&n)!=EOF)
{
sum = 0;
for(i=1;i<=n;i++)
{ //增加大括号
//y = n+1;//此句删除
//a = pow(-1,y);//此句删除
sum = sum+(1.0/i*a);
a=-a;//增加此句
}//增加大括号
printf("%.2lf\n",sum);
}
return 0;
}

再说题目。如果原题确实如你所写,那么应该是一直加下去,而不是让你输入项数。程序如下:

#include <stdio.h>
int main()
{
double i,s=0,a=1;
for(i=1;1/i>=1e-6;i++)
{s+=a/i;a=-a;}
printf("s=%f",s);
return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-10-01
把小于等于改为小于
相似回答