#include<stdlib.h>
#include<stdio.h>
#include<malloc.h>
#define ERROR 0;
#define OK 1;
#define FLASE 0;
#define TURE 1;
#define OVERFLOW -2;
typedef struct LNode{
float xs;
int zs;
struct LNode * next;
}LNode,*LinkList;
void create(LinkList *L,int m){
int i;
LinkList p,q;
*L=(LinkList)malloc(sizeof(LNode));
p=*L;
if(m<0){
printf("出现错误!\n");
printf("请输入大于0的项数!!\n");
scanf("%d",&m);
if(m<0){
printf("结束!!!\n");
exit (-2);
}
}
for(i=0;i<m;i++){
q=(LinkList)malloc (sizeof(LNode));//p,q都是结构体
printf("请输入系数和指数:");
scanf("%f %d",&q->xs,&q->zs);
p->next=q;
p=q;
}
p->next=NULL;
}//创建链表(多项式)
void print(LinkList L){
LinkList p;
p=L->next;
while(p){
printf("%.2f*X^%d",p->xs,p->zs);
p=p->next;
if(p!=NULL)
if(p->xs>=0)
printf("+");
}
printf("\n");
} //输出链表(多项式)
int cmp(LinkList a,LinkList b){//判断指数大小
if(a->zs<b->zs)
return -1;
else if(a->zs==b->zs)
return 0;
else
return 1;
}
LinkList add(LinkList a,LinkList b){//加法函数
LinkList pa,pb,pc,p,s,k;
float h;//系数和
pa=a->next;
pb=b->next;
p=(LinkList)malloc(sizeof(LNode));//p申请空间,p=a+b
pc=p;
while(pa && pb){//当pa,pb两个链表都不为空时
switch(cmp(pa,pb)){
case -1:
s=(LinkList)malloc(sizeof(LNode));
s->xs=pa->xs;
s->zs=pa->zs;
s->next=NULL;
pc->next=s;
pc=s;
pa=pa->next;
break;
case 0:
h=pa->xs+pb->xs;
if(h!=0){
s=(LinkList)malloc(sizeof(LNode));
s->xs=h;
s->zs=pa->zs;
s->next=NULL;
pc->next=s;
pc=s;
}
pa=pa->next;
pb=pb->next;
break;
case 1:
s=(LinkList)malloc(sizeof(LNode));
s->xs=pb->xs;
s->zs=pb->zs;
s->next=NULL;
pc->next=s;
pc=s;
pb=pb->next;
break;
}
}
while(pa){//pb后面为空,pa不为空
s=(LinkList)malloc(sizeof(LNode));
s->xs=pa->xs;
s->zs=pa->zs;
pc->next=s;
pc=s;
pa=pa->next;
}
while(pb){
s=(LinkList)malloc(sizeof(LNode));
s->xs=pb->xs;
s->zs=pb->zs;
pc->next=s;
pc=s;
pb=pb->next;
}
pc->next=NULL;
return p;
}
void main(){
LinkList a,b;
int x,y; //项数
printf("请输入第一个多项式的项数\n");
scanf("%d",&x);
create(&a,x);
print(a);
printf("请输入第二个多项式项数\n");
scanf("%d",&y);
create(&b,y);
print(b);
printf("相加\n");
print(add(a,b));//输出函数里面调用加法函数
}
一元多项式
最新推荐文章于 2024-03-30 16:59:36 发布