数据结构一元多项式的相加和相减完整代码
时间: 2024-10-01 09:00:43 浏览: 82
在一元多项式中,我们可以用数组或链表来存储系数和对应的变量指数。对于两个多项式进行相加和相减的操作,主要涉及到对系数以及指数的操作。这里我假设我们使用数组存储,其中每个元素表示 `a_n * x^n` 的形式。
以下是一个简单的C语言代码示例,用于实现一元多项式的相加和相减:
```c
#include <stdio.h>
// 结构体定义多项式
typedef struct {
int coefficient; // 系数
int exponent; // 指数
} Term;
// 功能:计算两个多项式的和
Term addPolynomials(Term* poly1, int len1, Term* poly2, int len2) {
if (len1 == 0) return poly2[0]; // 如果poly1为空,直接返回poly2的第一个项
if (len2 == 0) return poly1[len1 - 1]; // 否则如果poly2为空,返回poly1的最后一个项
Term result = {0}; // 初始化结果为0
for (int i = 0; i < len1 || i < len2; ++i) {
int coeff1 = poly1[i].coefficient;
int coeff2 = i < len2 ? poly2[i].coefficient : 0;
result.coefficient += coeff1 + coeff2;
result.exponent = min(poly1[i].exponent, poly2[i].exponent); // 取较小的指数
}
return result;
}
// 功能:计算两个多项式的差
Term subtractPolynomials(Term* poly1, int len1, Term* poly2, int len2) {
if (len1 == 0) return poly2[0]; // 如果poly1为空,返回poly2的第一个项
if (len2 == 0) return {-poly1[len1 - 1].coefficient, poly1[len1 - 1].exponent}; // 否则如果poly2为空,取其相反数并保持原指数
Term result = {0};
for (int i = 0; i < len1 && i < len2; ++i) {
int coeff1 = poly1[i].coefficient;
int coeff2 = poly2[i].coefficient;
result.coefficient += coeff1 - coeff2;
result.exponent = min(poly1[i].exponent, poly2[i].exponent);
}
// 如果poly1比poly2长
if (len1 > len2) {
for (int i = len2; i < len1; ++i) {
result.coefficient -= poly1[i].coefficient;
result.exponent = poly1[i].exponent;
}
} else {
// 如果poly2比poly1长
for (int i = len1; i < len2; ++i) {
result.coefficient += poly2[i].coefficient;
result.exponent = poly2[i].exponent;
}
}
return result;
}
// 辅助函数,确保指数不小于0
int min(int a, int b) {
return a < b ? a : b;
}
// 示例:
void printPolynomial(Term* poly, int len) {
printf("(%d*x^%d)", poly[len - 1].coefficient, poly[len - 1].exponent);
for (int i = len - 2; i >= 0; --i) {
printf(" + (%d*x^%d)", poly[i].coefficient, poly[i].exponent);
}
printf("\n");
}
int main() {
Term poly1[] = {{2, 3}, {4, 1}, {1, 0}}; // 2x^3 + 4x + 1
Term poly2[] = {{3, 2}, {1, 1}, {5, 0}}; // 3x^2 + x + 5
int len1 = sizeof(poly1) / sizeof(poly1[0]);
int len2 = sizeof(poly2) / sizeof(poly2[0]);
Term sum = addPolynomials(poly1, len1, poly2, len2);
Term diff = subtractPolynomials(poly1, len1, poly2, len2);
printf("Poly1: ");
printPolynomial(poly1, len1);
printf("Poly2: ");
printPolynomial(poly2, len2);
printf("Sum: ");
printPolynomial(&sum, 1); // 相加后只有一个项
printf("Difference: ");
printPolynomial(&diff, 1); // 相减后也可能只剩下一个项
return 0;
}
```
这个代码首先定义了一个多项式的结构体 `Term`,然后实现了相加 `addPolynomials` 和相减 `subtractPolynomials` 函数。`printPolynomial` 函数用于打印多项式的表达式。在 `main` 函数中,我们创建了两个多项式实例,分别进行了相加和相减,并展示了结果。
阅读全文
相关推荐


















