用c写一个一元多项式的表示和相减、相加
时间: 2023-05-19 13:06:11 浏览: 62
好的,以下是用C语言实现一元多项式的表示和相加、相减的代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct PolyNode *Polynomial;
struct PolyNode {
int coef; // 系数
int expon; // 指数
Polynomial next; // 指向下一个节点的指针
};
// 创建一个新的节点
Polynomial newNode(int coef, int expon) {
Polynomial p = (Polynomial)malloc(sizeof(struct PolyNode));
p->coef = coef;
p->expon = expon;
p->next = NULL;
return p;
}
// 将多项式插入到链表中
void insert(Polynomial *p, int coef, int expon) {
Polynomial node = newNode(coef, expon);
if (*p == NULL) {
*p = node;
} else {
Polynomial cur = *p;
while (cur->next != NULL) {
cur = cur->next;
}
cur->next = node;
}
}
// 释放链表的内存
void freeList(Polynomial p) {
Polynomial cur = p;
while (cur != NULL) {
Polynomial temp = cur;
cur = cur->next;
free(temp);
}
}
// 打印多项式
void printPoly(Polynomial p) {
if (p == NULL) {
printf("0\n");
return;
}
while (p != NULL) {
if (p->coef != 0) {
printf("%dX^%d", p->coef, p->expon);
if (p->next != NULL && p->next->coef > 0) {
printf("+");
}
}
p = p->next;
}
printf("\n");
}
// 多项式相加
Polynomial addPoly(Polynomial p1, Polynomial p2) {
Polynomial result = NULL;
while (p1 != NULL && p2 != NULL) {
if (p1->expon > p2->expon) {
insert(&result, p1->coef, p1->expon);
p1 = p1->next;
} else if (p1->expon < p2->expon) {
insert(&result, p2->coef, p2->expon);
p2 = p2->next;
} else {
int sum = p1->coef + p2->coef;
if (sum != 0) {
insert(&result, sum, p1->expon);
}
p1 = p1->next;
p2 = p2->next;
}
}
while (p1 != NULL) {
insert(&result, p1->coef, p1->expon);
p1 = p1->next;
}
while (p2 != NULL) {
insert(&result, p2->coef, p2->expon);
p2 = p2->next;
}
return result;
}
// 多项式相减
Polynomial subPoly(Polynomial p1, Polynomial p2) {
Polynomial result = NULL;
while (p1 != NULL && p2 != NULL) {
if (p1->expon > p2->expon) {
insert(&result, p1->coef, p1->expon);
p1 = p1->next;
} else if (p1->expon < p2->expon) {
insert(&result, -p2->coef, p2->expon);
p2 = p2->next;
} else {
int diff = p1->coef - p2->coef;
if (diff != 0) {
insert(&result, diff, p1->expon);
}
p1 = p1->next;
p2 = p2->next;
}
}
while (p1 != NULL) {
insert(&result, p1->coef, p1->expon);
p1 = p1->next;
}
while (p2 != NULL) {
insert(&result, -p2->coef, p2->expon);
p2 = p2->next;
}
return result;
}
int main() {
Polynomial p1 = NULL, p2 = NULL, result = NULL;
int n1, n2, coef, expon;
printf("请输入第一个多项式的项数:");
scanf("%d", &n1);
printf("请输入第一个多项式的系数和指数:\n");
for (int i = 0; i < n1; i++) {
scanf("%d %d", &coef, &expon);
insert(&p1, coef, expon);
}
printf("第一个多项式为:");
printPoly(p1);
printf("请输入第二个多项式的项数:");
scanf("%d", &n2);
printf("请输入第二个多项式的系数和指数:\n");
for (int i = 0; i < n2; i++) {
scanf("%d %d", &coef, &expon);
insert(&p2, coef, expon);
}
printf("第二个多项式为:");
printPoly(p2);
result = addPoly(p1, p2);
printf("两个多项式相加的结果为:");
printPoly(result);
freeList(result);
result = subPoly(p1, p2);
printf("两个多项式相减的结果为:");
printPoly(result);
freeList(result);
freeList(p1);
freeList(p2);
return 0;
}
```
希望这个代码能够帮到你!
相关推荐
![pptx](https://img-home.csdnimg.cn/images/20210720083543.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)