对于一元多项式 p(x) = p0 + p1x + p2x2 + ⋯ + pnxn 每个项都有系数和指数两部分,例如p2x2的系数为p2,指数为2。 编程实现两个多项式的相加。 例如: 5 + x + 2x2 + 3x3, − 5 − x + 6x2 + 4x4 两者相加结果: 8x2 + 3x3 + 4x4 其中系数5和-5都是x的0次方的系数,相加后为0,所以不显示。x的1次方同理不显示。 可用顺序表或单链表实现。
时间: 2023-04-19 16:02:38 浏览: 152
一元多项式的表示与相加,用链表解决
可以使用顺序表或单链表来实现多项式的相加。具体实现方法如下:
1. 定义一个结构体来表示多项式的每一项,包括系数和指数两个成员变量。
2. 定义一个顺序表或单链表来存储多项式的每一项。
3. 从键盘输入两个多项式,分别存储到顺序表或单链表中。
4. 遍历两个多项式的每一项,将指数相同的项的系数相加,得到新的系数,并将新的项插入到结果多项式中。
5. 输出结果多项式,不显示系数为0的项和指数为1的项及以下。
下面是使用顺序表实现多项式相加的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_TERM 100 // 多项式最大项数
// 多项式项的结构体
typedef struct {
int coef; // 系数
int exp; // 指数
} Term;
// 多项式的结构体
typedef struct {
Term terms[MAX_TERM]; // 多项式的项
int n; // 多项式的项数
} Polynomial;
// 从键盘输入多项式
void readPolynomial(Polynomial *p) {
printf("请输入多项式的项数:");
scanf("%d", &p->n);
printf("请输入多项式的每一项(系数 指数):\n");
for (int i = 0; i < p->n; i++) {
scanf("%d %d", &p->terms[i].coef, &p->terms[i].exp);
}
}
// 输出多项式
void printPolynomial(Polynomial *p) {
for (int i = 0; i < p->n; i++) {
if (p->terms[i].coef != 0 && p->terms[i].exp > 1) {
printf("%dx^%d + ", p->terms[i].coef, p->terms[i].exp);
} else if (p->terms[i].coef != 0 && p->terms[i].exp == 1) {
printf("%dx + ", p->terms[i].coef);
} else if (p->terms[i].coef != 0 && p->terms[i].exp == 0) {
printf("%d + ", p->terms[i].coef);
}
}
printf("\n");
}
// 多项式相加
void addPolynomial(Polynomial *p1, Polynomial *p2, Polynomial *result) {
int i = 0, j = 0, k = 0;
while (i < p1->n && j < p2->n) {
if (p1->terms[i].exp == p2->terms[j].exp) {
int coef = p1->terms[i].coef + p2->terms[j].coef;
if (coef != 0) {
result->terms[k].coef = coef;
result->terms[k].exp = p1->terms[i].exp;
k++;
}
i++;
j++;
} else if (p1->terms[i].exp > p2->terms[j].exp) {
result->terms[k].coef = p1->terms[i].coef;
result->terms[k].exp = p1->terms[i].exp;
i++;
k++;
} else {
result->terms[k].coef = p2->terms[j].coef;
result->terms[k].exp = p2->terms[j].exp;
j++;
k++;
}
}
while (i < p1->n) {
result->terms[k].coef = p1->terms[i].coef;
result->terms[k].exp = p1->terms[i].exp;
i++;
k++;
}
while (j < p2->n) {
result->terms[k].coef = p2->terms[j].coef;
result->terms[k].exp = p2->terms[j].exp;
j++;
k++;
}
result->n = k;
}
int main() {
Polynomial p1, p2, result;
readPolynomial(&p1);
readPolynomial(&p2);
addPolynomial(&p1, &p2, &result);
printf("相加后的多项式为:");
printPolynomial(&result);
return 0;
}
```
阅读全文