一元多项式简单的计算器
此计算器主要完成多项式的加法,减法,乘法等运算
实现功能:(!)输入并建立多项式
(2)输出多项式
(3)作两个多项式相乘的运算,建立并输出积多项式
(4)作两个多项式相除的运算,建立并输出商多项式
#include<stdio.h> 
#include<stdlib.h> 
typedef 
struct term 
{  
 short expn; /*幂次*/ 
 double coef; /*系数*/ 
 struct term* next;  
} 
Term; 
/*为了说明问题以下仅演示两个固定多项式 
 f(x)=3x^3-2x^2+x-1.5 
 g(x)=4x^4-3x^3+x+0.5 
 的加法与减法 
*/ 
int main() 
{  
 Term* create(int,double[]); 
 Term* chains(Term*,Term*,char); 
 void output(Term*); 
 void Free(Term*); 
 double fx[]={ 3,-2,1,-1.5}; 
 double gx[]={4,-3,0,1, 0.5}; 
 Term *hf,*hg,*hsum,*hdif; 
 /*首先为f(x),g(x)建立链表*/ 
 hf=create(3,fx); 
 hg=create(4,gx); 
 /*调用多项式"加法"*/ 
 hsum=chains(hf,hg,'+'); 
 /*遍历hsum输出"和式"*/ 
 output(hsum); 
 free(hsum); 
 /*调用多项式"减法"*/ 
 hdif=chains(hf,hg,'-'); 
 /*遍历hdif输出"差式"*/ 
 output(hdif); 
 free(hdif); 
 return 0; 
} 
Term *create(int expmax,double f[]) 
{ 
 int i; 
 Term *p,*q,*head=NULL; 
 for(i=0;i<=expmax;i++) 
 if(f[i]!=0.0) 
 { p=(Term*)malloc(sizeof(Term)); 
 p->coef=f[i]; 
 p->expn=expmax-i; 
 if(head==NULL)head=p; 
 else q->next=p; 
 q=p; 
 }  
 q->next=NULL; 
 return head; 
} 
/*两链表pb,pg合并。合并原则:运算符op*/ 
Term *chains(Term*pb,Term*pg,char op) 
{  
 Term *head=NULL,*p; 
 int i,expmax=0; 
 if(pb==NULL && pg==NULL) 
 return head; 
 if(pb!=NULL)expmax=pb->expn; 
 if(pg!=NULL&&expmax<pg->expn)expmax=pg->expn; 
 p=head=(Term*)malloc((expmax+1)*sizeof(Term)); 
 /*构造总表(置空)*/ 
 for(i=0;i<expmax;i++,p++) 
 { 
 p->expn=expmax-i; 
 p->coef=0.0; 
 p->next=p+1; 
 }  
 p->expn=0; 
 p->coef=0.0; 
 p->next=NULL; 
 /*将pb填入总表*/ 
 p=head; 
 while(pb!=NULL) 
 { 
 while(p->expn>pb->expn)p=p->next; 
 p->coef=pb->coef; 
 pb=pb->next; 
 } 
 /*从总表加上或减去pg*/ 
 p=head; 
 while(pg!=NULL) 
 { 
 while(p->expn>pg->expn)p=p->next; 
 if(op=='+') 
 p->coef+=pg->coef; 
 else if(op=='-') 
 p->coef-=pg->coef; 
 if(p->coef==0.0) 
 { if(p==head)head=p->next; 
 else(p-1)->next=p->next; 
 /*free(p);删零系数结点*/ 
 }  
 pg=pg->next; 
 } 
 return head; 
} 
void output(Term* head) 
{ Term *p =head; 
 while(p!=NULL) 
 {  
 if(p->coef==+1 && p->expn)printf("+"); 
 else if(p->coef==-1 && p->expn)printf("-"); 
 else if(p==head)printf( "%.2lf",p->coef); 
 else printf("%+.2lf",p->coef); 
 if(p->expn==1)printf("x"); 
 if(p->expn>=2)printf("x^%d",p->expn); 
 p=p->next; 
 } 
 printf("\n"); 
} 



											
	    

	