翛之上人 2021-04-08 09:54 采纳率: 0%
浏览 22

问求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那个就不对,求大佬解释下

  • 写回答

2条回答 默认 最新

  • 关注

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

    评论

报告相同问题?