PTA 7-214 泰勒级数展开近似sin(x)的值
分数 10
作者 chenmin
单位 福建工程学院
编写程序,从键盘输入x,利用幂级数展开计算sin(x)的近似值,要求某一项绝对值误差小于10^-5。
公式如下:
方法提示:对于类似的数列求和问题,关键是抽象出第i项的通用公式,将推导出的通用第i项累加到sum,直到第i项的绝对值小于1e-5为止。另外,注意奇偶项符号的处理。
输入格式:
输入x。
输出格式:
sin(x)的逼近结果。
输入样例:
在这里给出一组输入。例如:
0.5233
输出样例:
保留4位小数。例如:
0.4997
代码长度限制
10 KB
时间限制
200 ms
内存限制
32 MB
#include <stdio.h>
#include <math.h>
int factorial(int i){ //求阶乘
if(i == 0)
return 1;
if(i >= 1)
return factorial(i - 1) * i;
}
int main(){
double x, sum = 0.0;
scanf("%lf", &x);
int i = 1; //第一项
while(fabs(1.0 * pow(x, 2 * i - 1) / factorial(2 * i - 1)) >= pow(10, -5)){
//当第i项的绝对值小于10^-5时循环结束
if(i % 2 == 1){ //当第i项为奇数时
sum += 1.0 * pow(x, 2 * i - 1) / factorial(2 * i - 1); //通项公式
}else if(i % 2 == 0){ //当第i项为偶数时
sum -= 1.0 * pow(x, 2 * i - 1) / factorial(2 * i - 1);
}
i++; //下一项
}
printf("%.4lf\n", sum); //输出和(注意保留4为小数)
return 0;
}
解题思路:
step1:定义求阶乘的函数
step2:用 “第i项的绝对值小于1e-5” 作为循环结束的条件
step3:判断奇数项(+);偶数项(-)
归属知识点:
循环结构
递归函数
选择结构
数学函数