请用c语言为我解决一元多项式的乘法与加法运算,并为我讲解解题思路和每一行代码的作用,要求必须将每一行代码讲解清楚
时间: 2024-03-11 14:48:40 浏览: 100
好的,下面是一元多项式的乘法与加法运算的 C 语言代码和解题思路。
首先,我们需要定义一元多项式的结构体,包含系数和指数两个成员变量:
```c
typedef struct PolyNode{
int coef; // 系数
int expon; // 指数
struct PolyNode* link;
}PolyNode, *Polynomial;
```
其中,link 指向下一个节点。
接下来,我们需要实现两个函数,一个用于多项式的乘法运算,一个用于多项式的加法运算。
1. 多项式的乘法运算
多项式的乘法运算需要遍历两个多项式,将结果存储在一个新的多项式中。具体实现如下:
```c
Polynomial PolyMult(Polynomial P1, Polynomial P2) {
if (!P1 || !P2) return NULL; // 如果有一个多项式为空,则返回空
Polynomial P, Rear, t1, t2, t;
int c, e;
P = (Polynomial)malloc(sizeof(PolyNode)); // 创建新的多项式
Rear = P;
t1 = P1;
t2 = P2;
while (t2) { // 遍历 P2
c = t1->coef * t2->coef; // 计算系数
e = t1->expon + t2->expon; // 计算指数
Attach(c, e, &Rear); // 将结果插入到新多项式中
t2 = t2->link;
}
t1 = t1->link;
while (t1) { // 遍历 P1
t2 = P2;
Rear = P;
while (t2) { // 遍历 P2
c = t1->coef * t2->coef; // 计算系数
e = t1->expon + t2->expon; // 计算指数
while (Rear->link && Rear->link->expon > e) { // 遍历新多项式
Rear = Rear->link;
}
if (Rear->link && Rear->link->expon == e) { // 如果新多项式中已经有该项,则系数相加
if (Rear->link->coef + c) {
Rear->link->coef += c;
} else {
t = Rear->link;
Rear->link = t->link;
free(t);
}
} else { // 如果新多项式中没有该项,则插入到新多项式中
t = (Polynomial)malloc(sizeof(PolyNode));
t->coef = c;
t->expon = e;
t->link = Rear->link;
Rear->link = t;
Rear = Rear->link;
}
t2 = t2->link;
}
t1 = t1->link;
}
t2 = P;
P = P->link;
free(t2); // 释放头节点
return P;
}
```
Attach 函数用于将结果插入到新的多项式中:
```c
void Attach(int c, int e, Polynomial* pRear) {
Polynomial P;
if (c == 0) return; // 如果系数为 0,不用插入
P = (Polynomial)malloc(sizeof(PolyNode));
P->coef = c;
P->expon = e;
P->link = NULL;
(*pRear)->link = P;
*pRear = P;
}
```
2. 多项式的加法运算
多项式的加法运算需要将两个多项式相加,将结果存储在一个新的多项式中。具体实现如下:
```c
Polynomial PolyAdd(Polynomial P1, Polynomial P2) {
if (!P1) return P2; // 如果 P1 为空,则返回 P2
if (!P2) return P1; // 如果 P2 为空,则返回 P1
Polynomial P, Rear, t1, t2, t;
int sum;
P = (Polynomial)malloc(sizeof(PolyNode)); // 创建新的多项式
Rear = P;
t1 = P1;
t2 = P2;
while (t1 && t2) { // 遍历 P1 和 P2
if (t1->expon == t2->expon) { // 指数相同,系数相加
sum = t1->coef + t2->coef;
if (sum) Attach(sum, t1->expon, &Rear);
t1 = t1->link;
t2 = t2->link;
} else if (t1->expon > t2->expon) { // P1 指数大于 P2
Attach(t1->coef, t1->expon, &Rear);
t1 = t1->link;
} else { // P2 指数大于 P1
Attach(t2->coef, t2->expon, &Rear);
t2 = t2->link;
}
}
while (t1) { // 将 P1 中剩余的项插入到新多项式中
Attach(t1->coef, t1->expon, &Rear);
t1 = t1->link;
}
while (t2) { // 将 P2 中剩余的项插入到新多项式中
Attach(t2->coef, t2->expon, &Rear);
t2 = t2->link;
}
t = P;
P = P->link;
free(t); // 释放头节点
return P;
}
```
以上就是一元多项式的乘法与加法运算的 C 语言代码和解题思路。
阅读全文