题目:
根据麦克劳林公式计算正弦值。
输入格式
x ε
注:x 为角(弧度),ε 为计算精度。
输出格式
y
注:y 为 x 的正弦值,输出 6 位小数。
输入样例1
0.5235987755982989 0.00000001
输出样例1
0.500000
输入样例2
314.6828641345776 0.000001
输出样例2
0.500000
要求:所计算的最后一项的绝对值恰好小于 ε。
注:π=3.1415926535897932384626...。
代码实现:
#include <stdio.h>
#include <math.h>
int main()
{double x, eps, a = 100, j = 1, s = 0;int i = 1, k;scanf("%lf %lf", &x, &eps);if(x == 0){printf("0.000000");return 0;}while(fabs(x)>=2*3.1415926535897932384626){if(x > 0){x-=2*3.1415926535897932384626;}else{x+=2*3.1415926535897932384626;}}if(eps>fabs(x)){printf("%.6lf", x);return 0;}while(fabs(a)>=eps){for(k = 1; k<=i; k++){j*=k;}a = pow(-1, (i-1)/2)*pow(x, i)/j;s+=a;i+=2;j = 1;}printf("%.6lf", s);return 0;
}
解析:
由于sinx以2π为周期,所以要把x化简到(-2π,2π)区间内。此时再考虑这一类题最常考虑的“坑”——当精度很大,大于x的绝对值时,直接输出x。再按照公式设置循环结构。注意求解a时,不要分步骤太多,因为计算机在计算时不是精确计算。注意0要单独考虑。