c语言 求两个多项式的乘积(1)编写函数实现一个多项式的输入,返回多项式链表的头指针。(2)编写函数实现两个多项式相乘,返回结果多项式链表的头指针。(3)编写函数输出一个多项式的二元组序列。(4)在main函数中分别调用上述函数,实现输入两个多项式,求出它们的乘积并输出结果,先输入多项式非零项的个数,再输入每一对非零项系数和指。输出结果为乘积多项式的非零项的个数和每一对非零项系数和指数。系数和指数均为整数
时间: 2024-02-22 22:57:51 浏览: 15
下面是对应的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int coef; // 系数
int expn; // 指数
struct node *next; // 指向下一个结点的指针
} PolyNode, *PolyLink;
// 输入一个多项式
PolyLink createPoly() {
PolyLink head, tail, p;
int n, coef, expn;
scanf("%d", &n);
head = tail = (PolyLink)malloc(sizeof(PolyNode));
head->next = NULL;
while (n--) {
scanf("%d %d", &coef, &expn);
p = (PolyLink)malloc(sizeof(PolyNode));
p->coef = coef;
p->expn = expn;
tail->next = p;
tail = p;
}
tail->next = NULL;
return head;
}
// 两个多项式相乘
PolyLink multiplyPoly(PolyLink A, PolyLink B) {
PolyLink head, tail, p, q, r;
int coef, expn;
head = tail = (PolyLink)malloc(sizeof(PolyNode));
head->next = NULL;
for (p = A->next; p != NULL; p = p->next) {
for (q = B->next; q != NULL; q = q->next) {
coef = p->coef * q->coef;
expn = p->expn + q->expn;
for (r = head->next; r != NULL; r = r->next) {
if (r->expn == expn) {
r->coef += coef;
break;
}
}
if (r == NULL) {
r = (PolyLink)malloc(sizeof(PolyNode));
r->coef = coef;
r->expn = expn;
r->next = head->next;
head->next = r;
}
}
}
return head;
}
// 输出一个多项式
void printPoly(PolyLink poly) {
PolyLink p;
for (p = poly->next; p != NULL; p = p->next) {
printf("(%d,%d)", p->coef, p->expn);
if (p->next != NULL) {
printf(",");
}
}
printf("\n");
}
int main() {
PolyLink A, B, C;
A = createPoly();
B = createPoly();
C = multiplyPoly(A, B);
printPoly(C);
return 0;
}
```
注意:该代码中假设多项式的指数都是非负整数。如果需要处理负指数的情况,需要对代码进行修改。