doublejc(int num); intmain() { double x; printf("sin(x):"); scanf("%lf", &x); int n = 1; // 当前项数,初始为1 double term = x; // 当前项的值,初始为x double sum = x; // 求和变量,初始为x int t = -1; while (fabs(term) >= 1e-5) { n++; term = pow(x, 2 * n - 1) / jc(2 * n - 1) * t; // 计算当前项的值 sum = sum + term; t = -t; // 取相反的正负号,使下一项的符号与上一项相反 } printf("%lf",sum);
return0; }
doublejc(int num) { double res = 1.0; int i = 0; for (i = 2; i <= num; i++) { res = res * i; } return res; }
详解
这段代码实现了通过泰勒级数计算正弦值的方法,并使用一个while循环来实现。在循环开始时,我们定义变量 n 表示当前项的编号,初始值为 1;定义变量 term 表示当前项的值,初始值也为 x;定义变量 sum 表示当前所有项的累加和,初始值也为 x。 由于正弦函数的泰勒级数中每一项都包括一个阶乘,因此我们需要先定义一个函数 jc 来计算阶乘。在while循环中,我们每次都计算当前项的值 term,并将其累加到 sum 中。同时,我们需要根据当前项的编号来决定这一项的符号是正还是负,可以定义一个变量 t,每次将其取相反值即可实现。
方法二
通过观察 sin(x) 的泰勒级数中每两项之间的关系,直接计算出每一项,并将它们累加起来。
c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
intmain() { double x; printf("sin(x):"); scanf("%lf", &x); double term = x; double sum = x; int n = 1; while (fabs(term) >= 1e-5) { term = -term * x * x / ((n + 1) * (n + 2)); // 计算当前项的值时直接利用前一项的值来计算。 sum = sum + term; n += 2; } printf("sin(x)=%lf", sum); return0; }