1. 程式人生 > 其它 >一元多項式

一元多項式

技術標籤:# 資料結構演算法c語言

#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));//輸出函式裡面呼叫加法函式 }