#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;
}
我找到关键了,%d应该改为%f,请问为什么不能是%d?
追答%d是整形数据,1/2等明显是浮点型的数据,所以要用%f,不然会导致数据丢失等问题
追问%d的输出结果是-536870912,差距太大了吧?
追答对啊,在没有强制转换的情况下,这种数据类型变化的读取错误导致输出结果是什么都正常。
因为,没有强制转化的话,数据通过转化为二进制来转化,而%d只截取了部分%f的二进制数,导致出现离谱的数据
主要还是浮点型数据的二进制数与整形数据的二进制数组成方式不一样,整形和浮点型所占字节也不一样,所以这种默认转化一般都导致数据错的离谱
感觉你是复制粘贴来的。哪里来的n?好像用不着scanf吧?
先试试,如果可以就采纳你的