一元多項式
阿新 • • 發佈:2021-01-20
#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));//輸出函式裡面呼叫加法函式
}