输入N<10000000, 及N个实数,输入x 计算y=a0+a1x+a2x2+a3x3+...+anxn l输出y Input N; 输入的测试数据数,-1结束 输入N个实数; x; 输入x,直到0时为本组结束 Output y Sample Input 5 1.1 1.2 1.3 1.4 1.5 1 2 1.1 0 -1 Sample Output 6.5 43.9 8.1
时间: 2024-01-21 19:04:38 浏览: 162
这里提供一个 C 语言程序来解决这个问题:
```c
#include <stdio.h>
#include <math.h>
#define MAX_N 10000000
#define MAX_A 100
double a[MAX_A];
double calculate_y(double x, int n) {
double y = 0.0;
double x_power = 1.0;
for (int i = 0; i <= n; i++) {
y += a[i] * x_power;
x_power *= x;
}
return y;
}
int main() {
int n;
while (scanf("%d", &n) == 1 && n != -1) {
for (int i = 0; i <= n; i++) {
scanf("%lf", &a[i]);
}
double x;
while (scanf("%lf", &x) == 1 && x != 0) {
double y = calculate_y(x, n);
printf("%.1f\n", y);
}
}
return 0;
}
```
解释一下代码的思路:
- `a` 数组用来存储输入的 $N+1$ 个实数系数。
- `calculate_y(x, n)` 函数用来计算 $y = a_0 + a_1 x + a_2 x^2 + \cdots + a_n x^n$ 在给定的 $x$ 值下的结果。这个函数使用了累加器的思路,从 $a_0$ 开始,每次将 $x$ 的幂次递增,并累加对应的系数乘上幂次的值。
- 在 `main()` 函数中,使用 `while (scanf("%d", &n) == 1 && n != -1)` 循环读入多组测试数据,每次读入 $N$ 的值,并输入 $N+1$ 个实数系数。然后再在循环内部使用 `while (scanf("%lf", &x) == 1 && x != 0)` 循环读入多个 $x$ 值,每次调用 `calculate_y()` 函数来计算对应的 $y$ 值,并输出结果。
- 注意,在 C 语言中,`scanf()` 函数返回成功读入的变量个数,因此可以使用 `scanf("%d", &n) == 1` 的方式来判断是否成功读入了一个整数。
希望这个程序能帮到你!
阅读全文