酷代码 AI
菜单

6-2 使用函数求余弦函数的近似值 分数 10 作者 C课程组 单位 浙江大学 本题要求实现一个函数,用下列公式求cos(x)的近似值,精确到最后一项的绝对值小于e: cos(x)=x 0 /0!−x 2 /2!+x 4 /4!−x 6 /6!+⋯ 函数接口定义: double funcos( double e, double x ); 其中用户传入的参数为误差上限e和自变量x;函数funcos应返回用给定公式计算出来、并且满足误差要求的cos(x)的近似值。输入输出均在双精度范围内。 裁判测试程序样例: #include <stdio.h> #include <math.h> double funcos( double e, double x ); int main() { double e, x; scanf("%lf %lf", &e, &x); printf("cos(%.2f) = %.6f\n", x, funcos(e, x)); return 0; } /* 你的代码将被嵌在这里 */ 输入

代码解释 整体思路 本题要求使用给定的级数公式来计算 $\cos(x)$ 的近似值,直到某一项的绝对值小于误差上限 $e$。级数公式为:$\cos(x)=\frac{x^0}{0!}-\frac{x^2}{2!}+\frac{x^4}{4!}-\frac{x^6}{6!}+\cdots$。 代码实现 ```c #include <stdio.h> #include <math.h> // 函数定义,用于计算余弦函数的近似值 double funcos( double e, double x ); int main() { double e, x; // 从标准输入读取误差上限 e 和自变量 x scanf("%lf %lf", &e, &x); // 调用 funcos 函数计算近似值并输出结果 printf("cos(%.2f) = %.6f\n", x, funcos(e, x)); return 0; } // 实现 funcos 函数 double funcos( double e, double x ) { // 初始化第一项的值,即 x^0 / 0! = 1 double term = 1.0; // 初始化总和为第一项的值 double sum = term; // 从第二项开始,指数为 2 int n = 2; // 符号,第二项为负 int sign = -1; // 进入循环,不断计算级数的每一项 while (1) { // 初始化阶乘为 1 double factorial = 1.0; // 计算当前项的阶乘 for (int i = 1; i <= n; i++) { factorial *= i; } // 计算当前项的值 term = sign * pow(x, n) / factorial; // 判断当前项的绝对值是否小于误差上限 e if (fabs(term) < e) { // 若满足条件,则跳出循环 break; } // 累加当前项到总和 sum += term; // 更新符号,正负交替 sign = -sign; // 指数增加 2,准备计算下一项 n += 2; } // 返回计算得到的总和,即余弦函数的近似值 return sum; } ``` 代码详细解释 1. 变量初始化: - `term`:用于存储级数的每一项的值,初始化为第一项 $\frac{x^0}{0!}=1$。 - `sum`:用于存储级数的总和,初始化为第一项的值。 - `n`:表示当前项的指数,从 2 开始,因为第一项已经初始化。 - `sign`:表示当前项的符号,第二项为负,初始化为 -1。 2. 循环计算级数的每一项: - 在 `while (1)` 循环中,不断计算级数的每一项。 - 对于每一项,先计算其阶乘 `factorial`,通过 `for` 循环实现。 - 然后根据公式计算当前项的值 `term`。 - 判断当前项的绝对值是否小于误差上限 `e`,如果是,则跳出循环。 - 否则,将当前项累加到总和 `sum` 中,并更新符号 `sign` 和指数 `n`。 3. 返回结果: - 循环结束后,返回总和 `sum`,即为余弦函数的近似值。 复杂度分析 - 时间复杂度:$O(k)$,其中 $k$ 是满足误差要求所需的项数。 - 空间复杂度:$O(1)$,只使用了常数级的额外空间。 [2025-12-10 22:35:42 | AI问答 | 851点数解答]

服务商
相关提问
发财导航,免费问AI
实用工具查看更多