c语言实现一元多项式的乘法
时间: 2023-06-02 13:01:48 浏览: 174
C语言-一元稀疏多项式计算器
以下是一元多项式乘法的C语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义多项式结构体
typedef struct {
int coef; // 系数
int expn; // 指数
} Elem;
typedef struct {
Elem *elems; // 项数组
int len; // 项数
} Poly;
// 创建多项式
Poly createPoly(int len) {
Poly p;
p.elems = (Elem*)malloc(sizeof(Elem) * len);
p.len = len;
return p;
}
// 释放多项式
void freePoly(Poly *p) {
free(p->elems);
p->len = 0;
}
// 读取多项式
void readPoly(Poly *p) {
printf("请输入多项式的项数:");
scanf("%d", &p->len);
p->elems = (Elem*)malloc(sizeof(Elem) * p->len);
printf("请输入多项式的每一项(系数和指数,以空格分隔):\n");
for (int i = 0; i < p->len; i++) {
scanf("%d %d", &p->elems[i].coef, &p->elems[i].expn);
}
}
// 打印多项式
void printPoly(Poly p) {
for (int i = 0; i < p.len; i++) {
printf("%dX^%d", p.elems[i].coef, p.elems[i].expn);
if (i < p.len - 1) {
printf(" + ");
}
}
printf("\n");
}
// 多项式乘法
Poly polyMul(Poly p1, Poly p2) {
Poly res = createPoly(p1.len * p2.len);
int k = 0;
for (int i = 0; i < p1.len; i++) {
for (int j = 0; j < p2.len; j++) {
res.elems[k].coef = p1.elems[i].coef * p2.elems[j].coef;
res.elems[k].expn = p1.elems[i].expn + p2.elems[j].expn;
k++;
}
}
// 合并同类项
for (int i = 0; i < res.len; i++) {
for (int j = i + 1; j < res.len; j++) {
if (res.elems[i].expn == res.elems[j].expn) {
res.elems[i].coef += res.elems[j].coef;
// 将该项删除,将数组前移
for (int l = j; l < res.len - 1; l++) {
res.elems[l] = res.elems[l + 1];
}
res.len--;
// j指针回退
j--;
}
}
}
// 重新分配内存
res.elems = (Elem*)realloc(res.elems, sizeof(Elem) * res.len);
return res;
}
int main() {
Poly p1, p2, res;
printf("请输入第一个多项式:\n");
readPoly(&p1);
printf("请输入第二个多项式:\n");
readPoly(&p2);
res = polyMul(p1, p2);
printf("相乘的结果为:\n");
printPoly(res);
freePoly(&p1);
freePoly(&p2);
freePoly(&res);
return 0;
}
```
这段代码首先定义了一个多项式的结构体,包括了一个项数组和项数。然后实现了创建、释放、读取和打印多项式的函数。
接下来是多项式乘法的核心代码。它首先创建一个结果多项式,其长度为两个多项式的项数之积。然后使用两层循环遍历两个多项式的每一项,将相乘的结果存入结果多项式中。最后再合并同类项,即将指数相同的项的系数相加,并删除其中一个项,将数组前移。
最后在main函数中调用相应的函数实现多项式乘法,并释放内存。
阅读全文