程序运行结果:
实现原理
多项式加法:
(1)如果cpa的指数<cpb的指数,则将cpa所指向的插入和多项式链中,向后移动指针;
(2)如果cpa的指数>cpb的指数,则将cpb所指向的插入和多项式链中,向后移动指针;
(3)如果cpa的指数=cpb的指数,则若cpa的指数+cpb的指数=0,则删除相应结点,向后移动指针,并释放内存空间;
(4)否则cpa的指数+cpb的指数!=0,则修改同指数项的系数值,向后移动指针;
(5)如果pa链表非空,则链接pa剩余结点;
(6)如果pb链表非空,则链接pb剩余结点。
多项式乘法:
(1)多项式乘法可以看成单项式和多项式相乘,再作加法;
(2)可以利用循环,将被乘多项式与乘多项式每一项依次相乘;
(3)循环中每一次应累加部分积;
(4)循环结束时多项式相乘完成。
程序实现:
- 创建多项式,m为多项式的项数,当m为0时,函数只初始化头结点
void CreatePolyn(polynomial **p, int m){
int i, data;
int flag;
polynomial *cp, *temp;
(*p) = (polynomial *)malloc(sizeof(polynomial));
(*p)->coef = 0.0;
(*p)->expn = -1;
(*p)->next = NULL;
for(i = 1; i <= m; ++i){
cp = *p;
flag = 0; // 标志多项式中是否已经存在相同指数的多项式
temp = (polynomial *)malloc(sizeof(polynomial));
// 接收所输入的多项式的各项,默认各项指数互异
scanf("%f %d", &(temp->coef), &(temp->expn));
while(cp->next && temp->expn > cp->next->expn){
cp = cp->next;
}
if(cp->next && temp->expn == cp->next->expn){
continue;// 如果已经存在相同指数的多项式,忽略该项
}
temp->next = cp->next;
cp->next = temp;
}
}
- 打印多项式,考虑多种特殊项的格式,均以最简形式打印
void