高级程序设计训练——sin的泰勒展开迭代

该程序使用C语言实现了一个计算sin(x)近似值的算法,通过迭代法不断逼近实际值,直到前后两次计算的差的绝对值小于给定的精度值e。程序中包含了双重循环,一个用于迭代次数,一个用于计算阶乘。在给定x=1.23和e=0.0000001的例子中,程序输出了最小迭代次数7和对应的sin(x)值0.942488802。
摘要由CSDN通过智能技术生成

给定一个精度值e,用下列公式计算sin(x)的近似值,要求前后两次迭代之差的绝对值小于e,给出相应的最小迭代次数n和最后一次计算的sin(x)值。

 sin x = x - x3/3! + x5/5! - x7/7! + ... + (-1)n-1x2n-1/(2n-1)!

 其中x为弧度,n为正整数。

 【输入形式】

从控制台输入x( (0<x<=10) )和e( x>e>0 )的值,以一个空格分隔。

【输出形式】

输出迭代次数n和最后一次计算的sin(x)的值(以一个空格分隔,并且输出sin(x)时要求小数点后保留9位有效数字)。

【样例输入】

1.23 0.0000001

【样例输出】

7 0.942488802

【样例说明】

输入的x为1.23,精度值e为0.0000001。当n为5时,利用上述公式计算sin(x)的值为0.942489044,n为6时计算的结果为0.942488800,两结果之差的绝对值约为0.000000244,大于要求的精度值0.0000001,故需要继续迭代计算。当n为7时计算的结果为0.942488802,与n为6的计算结果之差的绝对值约为0.000000002,小于要求的精度值,所以最小迭代次数应为7,最后一次计算的sin(x)的值为0.942488802(小数点后保留9位有效数字)。

注意:
(1) 为保证计算精度,请使用double数据类型保存计算数据。
(2) 应至少迭代两次,即:n>=2

#include<stdio.h>
#include<math.h>
#include <stdlib.h>

int main()
{
	double sin,e,x,s=1;
	int n=1,flag=0,i;
	double k=1;  //k做阶乘结果时要设成double,要不然会溢出
	double x1=1,temp;
	
	scanf("%lf",&x);
	scanf("%lf",&e);
	sin=x;

	while(s>=e)
	{
		n+=1;
		k=1; //注意:新一轮循环时,作为中间变量的k要归1
		temp=sin;
		/*
		for(i=0;i<2n-1;i++)
		{
			x1*=x;
		}*/
		x1=pow(x,2*n-1);  //注意:这里是2*n,不是2n!
		for(i=1;i<=2*n-1;i++)
		{
			k*=i;
		}
		
		if(!flag)
			sin-=x1/k;
		else
			sin+=x1/k;

		flag=!flag;

		s=fabs(temp-sin); //取绝对值

	}

	printf("%d %.9lf",n,sin);
    system("pause"); //暂停程序(按任意键继续)以免弹太快看不见结果程序就结束了
	return 0;

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值