用cfree通过指针方法编写程序,通过输入x计算a0+a1cosx a2cos .+aoccosx9的值。(要求系数 {aj8保存在数组a中,运行时数组取为(1,-1.1,-2.2.2.3,3.4,-3.5,4.6,47,58,-5.9,输入 的X取为1.5,输出结果保留4位小数)
时间: 2024-02-15 21:03:49 浏览: 19
好的,下面是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 10
void cfree(double *a, double *b, double *c, double *d) {
int i;
for (i = 0; i < N - 1; i++) {
c[i] = a[i + 1] / b[i];
b[i + 1] = b[i + 1] - c[i] * d[i];
}
}
double f(double x, double *a) {
int i;
double sum = a[0];
for (i = 1; i < N; i++) {
sum += a[i] * cos(i * x);
}
return sum;
}
int main() {
double a[N] = {1, -1.1, -2.2, 2.3, 3.4, -3.5, 4.6, 4.7, 5.8, -5.9};
double x = 1.5;
double b[N - 1] = {1, 1.1, 2.2, 2.3, 3.4, 3.5, 4.6, 4.7, 5.8};
double c[N - 2] = {0};
double d[N - 1] = {1, cos(x), cos(2 * x), cos(3 * x), cos(4 * x), cos(5 * x), cos(6 * x), cos(7 * x), cos(8 * x)};
cfree(a, b, c, d);
double ans = f(x, a);
printf("a0 + a1 * cos(x) + a2 * cos(2x) + ... + a9 * cos(9x) = %.4f\n", ans);
return 0;
}
```
注意:由于题目中的系数是从 a1 开始的,所以我们需要对输入的系数数组 a 进行一些调整。具体来说,b 数组表示的是 a 数组的前缀和,即 b[i] = a[0] + a[1] + ... + a[i],因此 b[0] 应该初始化为 1。d 数组表示的是 cos(x) 到 cos(8x) 的值,因此应该初始化为数组 [1, cos(x), cos(2x), ..., cos(8x)]。在 cfree 函数中,我们计算出了系数数组 a,然后在 f 函数中根据题目要求计算出函数值。最后输出结果即可。