C语言计算1-1/2+1/3-1/4+...+1/99-1/100

#include <stdio.h>
void main()
{
int i,a=1;
float sum,sum1,sum2=0;
for(i=1;i<=100;i++)
{
sum1=1/i+sum1;
a=i-2;
sum2=1/a+sum2;
sum=sum1+sum2;
}
printf("1+2+3+...+100=%d\n",sum);
}
结果程序崩溃了!
求改错!

#include<stdio.h>

#include<math.h>

int main()

{

int i;

float sum=0.0,temp=0.0;

for (i = 1; i <= 100; i++)

{

temp = pow(-1, i + 1);

sum = sum + temp * 1 / i;

}

printf("sum is %f\n", sum);

system("pause");

return 0;

}

运行效果:

扩展资料:

在循环体外,可以定义一个辅助变量flag,令flag=1。

循环体中,只需要在结束末尾令flag=-flag,

这样就可以使flag在1和-1之间不断转变,从而完成编程。

代码

#include<stdio.h>

int main()

{

int i, flag = 1;

float sum = 0.0;

for (i = 1; i <= 100; i++)

{

sum = sum + flag*(1.0 / i);

flag = -flag;

}

printf("sum is %f\n", sum);

system("pause");

return 0;

}

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-04-12
#include<stdio.h>
int main(){
double i=0;
double res=1;
for(i=2;i<=100;i++){
int k=i-1;
if(k%2!=0){
res=res-1/i;

}else{
res=res+1/i;
}


}
printf("%lf",res);

return 0;

}

本回答被网友采纳
第2个回答  推荐于2017-10-13
根据你的需要,改进了一下代码,如下
#include <stdio.h>
void main()
{
int i;
float a=1,sum=0;
for (i=1;i<101;i++)
{
sum=sum+a/i;
a=a*(-1);
}
printf("1-1/2+1/3-1/4....-1/100=%f\n",sum);
}
不懂再交流
望采纳追问

我找到关键了,%d应该改为%f,请问为什么不能是%d?

追答

%d是整形数据,1/2等明显是浮点型的数据,所以要用%f,不然会导致数据丢失等问题

追问

%d的输出结果是-536870912,差距太大了吧?

追答

对啊,在没有强制转换的情况下,这种数据类型变化的读取错误导致输出结果是什么都正常。

因为,没有强制转化的话,数据通过转化为二进制来转化,而%d只截取了部分%f的二进制数,导致出现离谱的数据
主要还是浮点型数据的二进制数与整形数据的二进制数组成方式不一样,整形和浮点型所占字节也不一样,所以这种默认转化一般都导致数据错的离谱

本回答被提问者采纳
第3个回答  2014-07-20
你的输入n是什么意思?
如果是计算
1-1/2+1/3-1/4+...+1/99-1/100
那么不需要输入n,其他不变就是了

如果是计算
1-1/2+1/3-1/4+...+1/n
才需要输入n
代码如下(不需要math.h头文件):
#include <stdio.h>void main(){ double sum; int i,n,m; //加个变量i printf("请输入n:"); scanf("%d",&n); for(i=1,m=1,sum=0;i<=n;i++) //n改为i,100改为n { sum+=m*(1.0/i); m=-m; } printf("sum=%lf\n",sum); }追问

感觉你是复制粘贴来的。哪里来的n?好像用不着scanf吧?

第4个回答  2014-07-20
发生除0错误 ,,,,
i=2时 a=0 1/0 这一段导致程序崩溃

指出几个问题,第一 1/i 是得不出想要的小数的 你可以试试,1/10 = 0 1/2 = 0 因为都是int型
结果也是int 你要 1.0 / i 这样 double/int 结果是范围大的那个类型,即double
#include<stdio.h>
int main()
{
double a=1,sum;
int i;
sum=0;
for(i=1;i<=100;i++)
{
sum+=1.0/i*a;
a*=-1;
}
printf("1+2+3+...+100=%lf\n",sum);
}追问

先试试,如果可以就采纳你的

相似回答