c语言的算法

来源:百度知道 编辑:UC知道 时间:2024/05/12 17:35:29
#include <stdio.h>
main()
{
int i=1,sgn=1;
float term=1.0,sum=1.0;
while (i<=100)
{term=-sgn/(i+1);
sum=sum+term;

i++;
}

printf("%f\n",sum);
getchar();
}

程序运行结果是 1.000000
我如果将sgn 或 i 改为float, 那么显示-3.197278

而正确程序是:
main()
{
int sign=1;
float deno=2.0,sum=1.0,term;
while (deno<=100)
{
sign=-sign;
term=sign/deno;
sum=sum+term;
deno=deno+1;
}
printf("%f\n",sum);
}

正确是0.688172
请问我那里错了?
请问我应该怎样改啊?
谢谢了!

#include <stdio.h>
main()
{
int i=1,sgn=1;
float term=1.0,sum=1.0;
while (i<=100)
{term=-sgn/(i+1); /*这样你的-sgn永远是-1,应像正确 的程序那样写成 sgn = -sgn;才能出现+,-*/
sum=sum+term;
i++;
}

printf("%f\n",sum);
getchar(); //......
}
运算中的错误,是因为两个整数做除法结果为整数,一般采取"向零取整"的方法,例如4 / 3 = 1,只有当运算的两个数有一个为实数或双精度数结果是double类型.

sgn/(i+1);
在int i=1,sgn=1的情况下,当i>0时,sgn/(i+1)是等于0的。所以就会出现最后的1

term=-sgn/(i+1);这个是INT/INT不可能会得到FLOAT,所以这中间存在一个类弄转换问题。INT转为FLOAT是采用后面补0来解决的。自然会出错,下面的term=sign/deno; 是INT/FLOAT得到的是FLOAT没有类型转换,自然就不会出错了

补充一下:同意上面说的得到结果的说话