别采用顺序表和带头节点的单链表存储一元多项式,并且实现两个多项式的相加运算C语言实现
时间: 2024-11-04 13:10:24 浏览: 18
一元多项式相加实验报告(C语言实现)
5星 · 资源好评率100%
在C语言中,为了避免直接使用顺序表或带头节点的单链表存储一元多项式,我们可以选择使用数组结构来存储每个多项式的系数和指数。因为多项式本质上是一系列乘积形式的项,数组可以更好地对应这种结构。我们可以创建一个结构体`Term`来表示一个项(系数乘以x的幂),然后用另一个结构体`Polynomial`来管理整个多项式。
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
double coefficient; // 系数
int exponent; // 指数
} Term;
typedef struct {
size_t degree; // 多项式的最高次数
Term terms[1]; // 动态分配的空间,用于存储多项式的所有项
} Polynomial;
// 初始化多项式
Polynomial* create_polynomial(size_t degree) {
Polynomial* poly = (Polynomial*)malloc(sizeof(Polynomial));
poly->degree = degree;
return poly;
}
// 添加多项式项
void add_term(Polynomial* poly, double coefficient, int exponent) {
if (poly->degree >= exponent) {
poly->terms[poly->degree] = (Term){coefficient, exponent};
poly->degree++;
} else {
printf("Exponent is too high for the polynomial.\n");
}
}
// 相加两个多项式
Polynomial* add_poly(Polynomial* poly1, Polynomial* poly2) {
Polynomial* result = create_polynomial(0);
for (size_t i = 0; i <= poly1->degree || i <= poly2->degree; i++) {
double coeff1 = poly1->degree > i ? 0 : poly1->terms[i].coefficient;
double coeff2 = poly2->degree > i ? 0 : poly2->terms[i].coefficient;
result->add_term(coeff1 + coeff2, i);
}
return result;
}
// 打印多项式
void print_polynomial(Polynomial* poly) {
printf("( ");
for (size_t i = 0; i < poly->degree; i++) {
if (i > 0)
printf("+ ");
printf("%.2f*x^%d", poly->terms[i].coefficient, poly->terms[i].exponent);
}
printf(" )\n");
}
int main() {
Polynomial* poly1 = create_polynomial(5);
Polynomial* poly2 = create_polynomial(4);
// 添加多项式项到poly1和poly2...
// ...
Polynomial* sum = add_poly(poly1, poly2);
print_polynomial(sum);
free(poly1);
free(poly2);
free(sum); // 不要忘记释放内存
return 0;
}
```
阅读全文