c语言 求两个多项式的乘积(1)编写函数实现一个多项式的输入,返回多项式链表的头指针。(2)编写函数实现两个多项式相乘,返回结果多项式链表的头指针。(3)编写函数输出一个多项式的二元组序列。(4)在main函数中分别调用上述函数,实现输入两个多项式,求出它们的乘积并输出结果,先输入多项式非零项的个数,再输入每一对非零项系数和指数。
时间: 2024-02-22 12:57:43 浏览: 80
以下是 C 语言实现两个多项式相乘的代码,包含了输入多项式、输出多项式和相乘三个函数:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义多项式结构体
typedef struct node {
int coef; // 系数
int exp; // 指数
struct node *next; // 指向下一项的指针
} Polynomial;
// 函数声明
Polynomial *create(); // 输入多项式
Polynomial *mult(Polynomial *p1, Polynomial *p2); // 相乘
void print(Polynomial *p); // 输出多项式
int main() {
Polynomial *p1, *p2, *result;
printf("请输入第一个多项式的非零项个数:");
p1 = create();
printf("请输入第二个多项式的非零项个数:");
p2 = create();
printf("\n第一个多项式:\n");
print(p1);
printf("\n第二个多项式:\n");
print(p2);
result = mult(p1, p2);
printf("\n两个多项式的乘积:\n");
print(result);
return 0;
}
// 输入多项式
Polynomial *create() {
Polynomial *head, *p, *q;
int n, i;
printf("请输入非零项的个数:");
scanf("%d", &n);
head = (Polynomial *)malloc(sizeof(Polynomial)); // 创建头节点
head->next = NULL; // 初始化为空链表
q = head;
for (i = 0; i < n; i++) {
p = (Polynomial *)malloc(sizeof(Polynomial)); // 创建新节点
printf("请输入第%d个非零项的系数和指数:", i+1);
scanf("%d%d", &(p->coef), &(p->exp));
q->next = p; // 将新节点插入链表
q = p;
}
q->next = NULL; // 结束链表
return head;
}
// 相乘
Polynomial *mult(Polynomial *p1, Polynomial *p2) {
Polynomial *head, *p, *q, *r, *t;
int coef, exp;
head = (Polynomial *)malloc(sizeof(Polynomial)); // 创建头节点
head->next = NULL; // 初始化为空链表
q = p2; // p2 指针不动
while (p1 != NULL) {
p = head;
while (q != NULL) {
coef = p1->coef * q->coef; // 相乘得到系数
exp = p1->exp + q->exp; // 指数相加
// 查找指数相同的项并相加
while (p->next != NULL && p->next->exp < exp) {
p = p->next;
}
if (p->next != NULL && p->next->exp == exp) {
p->next->coef += coef;
} else {
r = (Polynomial *)malloc(sizeof(Polynomial)); // 创建新节点
r->coef = coef;
r->exp = exp;
t = p->next;
p->next = r;
r->next = t;
}
q = q->next; // p2 指针向后移动
}
q = p2; // p2 指针重新指向头节点
p1 = p1->next; // p1 指针向后移动
}
return head;
}
// 输出多项式
void print(Polynomial *p) {
if (p->next == NULL) {
printf("0\n");
return;
}
while (p->next != NULL) {
p = p->next;
printf("%dx^%d", p->coef, p->exp);
if (p->next != NULL && p->next->coef >= 0) {
printf("+");
}
}
printf("\n");
}
```
注意,此代码实现的是两个多项式的正常相乘,没有进行优化。
阅读全文