问求cosx的代码错误原因

 

能运行,但是跑不出正确结果

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
	int even = 0, factorial = 1, sgn;
	double x, term = 1, cosx = 0, sxm = 0, i = 0;
	scanf_s("%lf", &x);
	while (term > 1e-7)
	{
		factorial = 1;
		for (even = 2 * i; even > 0; even--)
			factorial *= even;
		even = i * 2;
		sxm = pow(x, even);
		term = sxm / factorial;
		sgn = pow(-1, i + 1);
		cosx = cosx + sgn * term;
		i++;
	}
	printf("cosx=%lf", cosx);
	return 0;
}

后来找了一个循环语句换成for语句的代码,就跑对了

#include <stdio.h>
#include<stdlib.h>
#include <math.h>
int main()
{
	int t, sgn = 1;
	double x, term=0, factorial = 1, sum = 1, sxm;
	scanf_s("%lf", &x);
	for (t = 2;; t++)
	{
		factorial = factorial * t;
		if (t % 2 == 0)
		{
			sgn = sgn * (-1);
			sxm = pow(x, t);
			term = sxm / factorial;
			sum = sgn * term + sum;
		}
		if (fabs(term) <= 1e-7)
			break;
	}
	printf("cosx=%lf", sum);
	return 0;
}

for的那个是对的,while那个就不对,求大佬解释下

第一个的i初始值是0,后面用到i++,乘以2条件是不一样的。这个条件if (fabs(term) <= 1e-7)与while循环的退出条件也不一样呀。

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632