数列求和的代码运行时一直输出-nan(ind)

0

题目内容:

计算并输出s的值。s的计算方法见下式,其中m为实数,其值由键盘读入。计算时,要求最后一项的绝对值小于1e-4,输出结果保留两位小数。

输入格式:实数m,格式控制串为"%lf"

输出格式:式子的值,输出格式控制串为"%.2f\n"

输入样例:0.2

输出样例:0.18

#include<stdio.h>
#include<math.h>
int main()
{
	int i = 1, sign = 1, fac = 0;
	double item, s = 0, m;
	printf("Please enter a number:");
	scanf_s("%lf", &m);
	do
	{
		fac *= i;
		item = sign * pow(m, (double)i) /(double)fac;
		s += item;
		i++;
		sign = -sign;
	} while (fabs(item>=1E-4));
	printf("s=%.2f\n", s);
	return 0;
}

当我把i前面的double去掉的时候运行时输入值后无反应,似乎进入死循环

ava
三木

2020-11-15

0

看不到你的完整题目。

不过你的 while 条件的括号匹配错了:

// 你的错误代码
} while (fabs(item >= 1E-4));

// 正确写法
} while (fabs(item) >= 1E-4);

i 前面是否加 (double) 强制转换没有任何影响,因为 pow 的参数要求 double,i 会自动转为 double。

其次,你的 fac 变量始终为 0,无论循环多少遍。

ava
慢羊羊

2020-11-15

谢谢村长,修改了之后还是出错,可能是我的算法出了问题,在输入2.0时无输出,似乎进入死循环,而输入0.5时则输出-nan(ind)。S=m-m²/2!+m³/3!-m4 /4!+……这是译文的缺失部分,即要求的数列村长能帮我看看算法哪里有问题吗谢谢了 - 三木 2020-11-15
@三木 把你的问题详细补充到主贴中吧,答案我已经修改过了。 - 慢羊羊 2020-11-16
技术讨论社区