c语言 求两个多项式的乘积(1)编写函数实现一个多项式的输入,返回多项式链表的头指针。(2)编写函数实现两个多项式相乘,返回结果多项式链表的头指针。(3)编写函数输出一个多项式的二元组序列。(4)在main函数中分别调用上述函数,实现输入两个多项式,先输入多项式非零项的个数,再输入每一对非零项系数和指数,求出它们的乘积并输出乘积的系数和指数。
时间: 2024-02-22 13:58:05 浏览: 66
以下是实现上述要求的代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义多项式结构体
typedef struct PolyNode *PtrToPolyNode;
struct PolyNode {
int coef; // 系数
int expon; // 指数
PtrToPolyNode next;
};
typedef PtrToPolyNode Polynomial;
// 创建新节点
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 freeList(Polynomial p) {
Polynomial tmp;
while (p != NULL) {
tmp = p;
p = p->next;
free(tmp);
}
}
// 实现一个多项式的输入,返回多项式链表的头指针
Polynomial inputPoly() {
int n; // 非零项的个数
int coef, expon;
Polynomial head = newNode(0, 0);
Polynomial tail = head;
scanf("%d", &n);
while (n--) {
scanf("%d %d", &coef, &expon);
tail->next = newNode(coef, expon);
tail = tail->next;
}
return head;
}
// 实现两个多项式相乘,返回结果多项式链表的头指针
Polynomial multiplyPoly(Polynomial p1, Polynomial p2) {
Polynomial head = newNode(0, 0);
Polynomial tail = head;
Polynomial p, q, t;
for (p = p1->next; p != NULL; p = p->next) {
for (q = p2->next; q != NULL; q = q->next) {
int coef = p->coef * q->coef;
int expon = p->expon + q->expon;
for (t = tail->next; t != NULL; t = t->next) {
if (t->expon == expon) {
t->coef += coef;
break;
} else if (t->next == NULL || t->next->expon < expon) {
t->next = newNode(coef, expon);
t->next->next = t->next;
break;
}
}
}
}
return head;
}
// 输出一个多项式的二元组序列
void printPoly(Polynomial p) {
int flag = 0;
for (Polynomial t = p->next; t != NULL; t = t->next) {
if (t->coef != 0) {
if (flag == 0) {
flag = 1;
} else {
printf(" ");
}
printf("%d %d", t->coef, t->expon);
}
}
if (flag == 0) { // 处理多项式为0的情况
printf("0 0");
}
printf("\n");
}
int main() {
Polynomial p1, p2, res;
p1 = inputPoly();
p2 = inputPoly();
res = multiplyPoly(p1, p2);
printPoly(res);
freeList(p1);
freeList(p2);
freeList(res);
return 0;
}
```
其中,`inputPoly()` 实现了多项式的输入,`multiplyPoly()` 实现了两个多项式相乘,`printPoly()` 实现了输出多项式的二元组序列,`newNode()` 实现了创建新节点,`freeList()` 实现了释放链表。在 `main()` 函数中,我们先输入两个多项式,并调用 `multiplyPoly()` 函数求它们的乘积,最后调用 `printPoly()` 函数输出结果,同时释放链表。
阅读全文