在上一题基础上建立并初始化两个struct Item数组,表示两个多项式。按照代数多项式加、减方法,进行多项式的加法、减法运算,产生和多项式和差多项式,并显示。输入x的值,计算并显示和多项式、差多项式值。
时间: 2024-03-25 15:36:45 浏览: 54
两个多项式的加法运算
好的,这里是代码:
```c
#include <stdio.h>
#include <math.h>
struct Item {
double coeff; // 多项式系数
int power; // x 的幂次
};
void input_poly(struct Item poly[], int n) {
for (int i = 0; i < n; i++) {
printf("请输入第 %d 项的系数和幂次:\n", i + 1);
printf("系数:");
scanf("%lf", &poly[i].coeff);
printf("幂次:");
scanf("%d", &poly[i].power);
}
}
void print_poly(struct Item poly[], int n) {
for (int i = 0; i < n; i++) {
if (i > 0 && poly[i].coeff > 0) {
printf("+");
}
printf("%.2lfx^%d", poly[i].coeff, poly[i].power);
}
printf("\n");
}
void add_poly(struct Item poly1[], int n1, struct Item poly2[], int n2, struct Item result[], int *n) {
int i = 0, j = 0, k = 0;
while (i < n1 && j < n2) {
if (poly1[i].power > poly2[j].power) {
result[k] = poly1[i];
i++;
k++;
} else if (poly1[i].power < poly2[j].power) {
result[k] = poly2[j];
j++;
k++;
} else {
result[k].coeff = poly1[i].coeff + poly2[j].coeff;
result[k].power = poly1[i].power;
i++;
j++;
k++;
}
}
while (i < n1) {
result[k] = poly1[i];
i++;
k++;
}
while (j < n2) {
result[k] = poly2[j];
j++;
k++;
}
*n = k;
}
void sub_poly(struct Item poly1[], int n1, struct Item poly2[], int n2, struct Item result[], int *n) {
int i = 0, j = 0, k = 0;
while (i < n1 && j < n2) {
if (poly1[i].power > poly2[j].power) {
result[k] = poly1[i];
i++;
k++;
} else if (poly1[i].power < poly2[j].power) {
result[k].coeff = -poly2[j].coeff;
result[k].power = poly2[j].power;
j++;
k++;
} else {
result[k].coeff = poly1[i].coeff - poly2[j].coeff;
result[k].power = poly1[i].power;
i++;
j++;
k++;
}
}
while (i < n1) {
result[k] = poly1[i];
i++;
k++;
}
while (j < n2) {
result[k].coeff = -poly2[j].coeff;
result[k].power = poly2[j].power;
j++;
k++;
}
*n = k;
}
double calc_poly(struct Item poly[], int n, double x) {
double result = 0.0;
for (int i = 0; i < n; i++) {
result += poly[i].coeff * pow(x, poly[i].power);
}
return result;
}
int main() {
struct Item poly1[100];
struct Item poly2[100];
struct Item result[200];
int n1, n2, n;
printf("请输入第一个多项式的项数:");
scanf("%d", &n1);
input_poly(poly1, n1);
printf("请输入第二个多项式的项数:");
scanf("%d", &n2);
input_poly(poly2, n2);
printf("第一个多项式为:");
print_poly(poly1, n1);
printf("第二个多项式为:");
print_poly(poly2, n2);
add_poly(poly1, n1, poly2, n2, result, &n);
printf("和多项式为:");
print_poly(result, n);
sub_poly(poly1, n1, poly2, n2, result, &n);
printf("差多项式为:");
print_poly(result, n);
double x;
printf("请输入 x 的值:");
scanf("%lf", &x);
double sum_result = calc_poly(result, n, x);
printf("和多项式的值为:%.2lf\n", sum_result);
double sub_result = calc_poly(result, n, x);
printf("差多项式的值为:%.2lf\n", sub_result);
return 0;
}
```
这段代码中,我们先定义了一个名为 `Item` 的结构体,包含两个成员变量:`coeff` 表示多项式系数,`power` 表示 x 的幂次。接着,我们编写了一些函数来帮助读取、计算和输出多项式。在主函数中,我们先读取用户输入的两个多项式,然后分别计算它们的和多项式和差多项式,并输出结果。最后,我们读取用户输入的 x 值,计算和多项式和差多项式在给定 x 值下的值,并输出结果。
需要注意的是,如果多项式的项数超过了数组的容量,程序可能会发生错误,因此需要进行足够的错误处理。此外,由于多项式的幂次可能不是连续的,因此在计算和多项式和差多项式时需要进行复杂的逻辑判断。
阅读全文