多项式的加法和乘法
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
typedef struct{
float coef;
int expn;
}DataType;
typedef struct node{
DataType data;
struct node *next;
}ListNode;
typedef ListNode * LinkList;
int LocateNode(LinkList L,DataType e){
ListNode *p=L->next;
while(p&&e.expn<p->data.expn)
p=p->next;
if(p==NULL||e.expn!=p->data.expn)
return 0;
else
return 1;
}
void InsertNode(LinkList L,DataType e){
ListNode *s,*p;
p=L;
while(p->next&&e.expn<p->next->data.expn)
p=p->next;
s=(ListNode *)malloc(sizeof(ListNode));
s->data.coef=e.coef;
s->data.expn=e.expn;
s->next=p->next;
p->next=s;
}
ListNode *CreatPolyn(LinkList L,int n){
LinkList pa;
int i;
DataType e;
pa=(ListNode *)malloc(sizeof(ListNode));
pa->next=NULL;
for(i=1;i<=n;i++){
printf("请输入第%d项指数和系数:\n",i);
scanf("%f%d",&e.coef,&e.expn);
if(!LocateNode(pa,e))
InsertNode(pa,e);
}
L=pa;
return L;
}
void printfList(LinkList L){
ListNode *p;
p=L->next;
while(p){
printf("%c %6.2fx^%d",(p->data.coef>0?'+':' '),p->data.coef,p->data.expn);
p=p->next;
}
printf("\n");
}
ListNode *AddPolyn(LinkList La,LinkList Lb){
ListNode *pa,*pb,*pc,*s;
LinkList Lc;
float sum;
pa=La->next;
pb=Lb->next;
Lc=pc=La;
while(pa&&pb){
if(pa->data.expn>pb->data.expn){
pc->next=pa;
pc=pa;
pa=pa->next;
}
else if(pa->data.expn<pb->data.expn){
pc->next=pb;
pc=pb;
pb=pb->next;
}
else{
sum=pa->data.coef+pb->data.coef;
if(fabs(sum)>1e-6){
pa->data.coef=sum;
pc->next=pa;
pc=pa;
pa=pa->next;
s=pb;
pb=pb->next;
free(s);
}
else{
s=pa;
pa=pa->next;
free(s);
s=pb;
pb=pb->next;
free(s);
}
}
}
pc->next=pa?pa:pb;
free(Lb);
return Lc;
}
ListNode *CreatPolyn1(LinkList L,LinkList p){
LinkList pa;
DataType e;
pa=(ListNode *)malloc(sizeof(ListNode));
pa->next=NULL;
while(L->next){
e.coef=L->next->data.coef*p->data.coef;
e.expn=L->next->data.expn+p->data.expn;
if(!LocateNode(pa,e))
InsertNode(pa,e);
L=L->next;
}
L=pa;
return L;
}
ListNode *MultiplyPolyn(LinkList La1,LinkList Lb1){
LinkList pa,pc,s,p;
pa=La1;
p=Lb1->next;
pc=(ListNode *)malloc(sizeof(ListNode));
pc->next=NULL;
while(p){
s=CreatPolyn1(pa,p);
pc=AddPolyn(pc,s);
p=p->next;
}
s=pc;
return s;
}
void main(){
LinkList La,Lb,Lc;
int n,k;
printf("输入第一个多项式的项数:");
scanf("%d",&n);
printf("输入第一个多项式的每一项的系数,指数:\n");
La=CreatPolyn(La,n);
printf("第一个多项式为:");
printfList(La);
printf("输入第二个多项式的项数:");
scanf("%d",&n);
printf("输入第二个多项式的每一项的系数,指数:\n");
Lb=CreatPolyn(Lb,n);
printf("第二个多项式为:");
printfList(Lb);
printf("输入1做加法,输入2做乘法:");
scanf("%d",&k
你可能喜欢
- 多项式习题
- 多项式练习题
- 单项式乘法
- 单项式乘以多项式
- 多项式运算
- 多项式相加
- 多项式乘法习题2页
- 多项式习题3页
- 多项式乘法习题2页
- 第一章 多项式习题解答19页
- 单多项式习题4页
- 7年级数学上册单项式多项式习题5页
- 多项式练习题及答案12页
- 八年级数学单项式乘以多项式练习题b_(1)3页
- 多项式练习全方位训练题4页
- 重庆市涪陵第十九中学八年级数学上册 14.1.2 单项式与多项式相乘练习题2页
- 重庆市涪陵第十九中学八年级数学上册 14.1.4.3 多项式与多项式相乘练习题1页
- 重庆市涪陵第十九中学八年级数学上册 14.1.4.6 多项式除单项式练习题1页
- 单项式、多项式的乘法4页
- 5.2单项式的乘法16页
- 5.2单项式的乘法19页
- 5.2 单项式的乘法--16页
- 5.2单项式的乘法26页
- 六年级公开课学案 5.2单项式的乘法2页
- 8.2.5沪科版七年级下数学8.2.5_整式乘法----单项式乘以多项式17页
- 单项式乘以多项式7页
- 八年级数学单项式乘以多项式练习题b_(1)3页
- 七年级一班单项式乘以多项式导学案2页
- 单项式乘以多项式及多项式乘以多项式20页
- 单项式乘以多项式2页
- 第4章 多项式的运算教案21页
- 一元多项式运算相加2页
- 第二讲 矩阵与多项式运算34页
- 6--多项式运算24页
- 4多项式的运算小结与复习2页
- 4多项式的运算检测2页
- 数据结构实验-多项式的相加减7页
- 综合实验 多项式的相加7页
- 多项式相加2页
- 一元多项式运算相加2页
- 实验三链表及其多项式相加1页
- c编写的多项式相加1页


