#include <stdio.h>
#include <math.h>// 调用 math 库中的 pow() 和 sin() 函数
int main() {
double x, eps, sinx = 0, term = x// sinx 为近似值,term 为每一项的值
int n = 1// n 为当前项的次数
printf("请输入 x 的值(弧度):")
scanf("%lf", &x)
printf("请输入 eps 的值(误差限):")
scanf("%lf", &eps)
while (fabs(term) >eps) { // 当当前项的值小于误差限时,停止计算
sinx += term// 累加当前项的值
n += 2// 次数加 2
term = -term * x * x / (n * (n - 1))// 根据泰勒级数公式计算下一项的值
}
printf("sin(%lf) 的近似值为 %lf\n", x, sinx)
return 0
}
这个程序首先从键盘读入 x 和 eps 的值,其中 x 是 sin 函数的自变量,eps
是计算近似值的误差限,也就是要求的精度。然后,程序使用 while 循环计算 sin(x)
的近似值,直到当前项的绝对值小于误差限为止。在循环中,程序使用一个变量 n 来表示当前项的次数,初始值为 1,每次加 2,因为 sin
函数的泰勒级数只包含奇数次项。程序还使用一个变量 term 来表示每一项的值,初始值为
x,后面每次通过公式计算下一项的值。最后,程序输出计算得到的 sin(x) 的近似值。
#include<stdio.h>#include<math.h>
double sin(double)
double nResult(double,double)
int main()
{
double x=0
scanf("%lf",&x)
printf("sin(%lf)=%lf\n",x,sin(x))
return 0
}
double sin(double x)
{
//sin(x)=x-x^3/3!+x^5/5!-x^7/7!+……+(-1)(n^2n+1)/(2n+1)!+……
int i=0
double result=0,n=0
while( fabs( n=nResult(x,2*++i-1) ) > 0e-5 )//绝对值大于10^-5次方就循环
result+=(i%2==1)?n:-n
return result
}
double nResult(double x,double n)
{
//(n^2n+1)/(2n+1)!也就是n/1*n/2*n/3*n/4*.....n/(2n+1)
return n==1?x:nResult(x,n-1)*x/n
}
用递归给写了一个 sin(π)=0 sin(π/2)=1
楼主看得上就采纳吧
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)