#2
DKCN2006-07-08 16:54
|
一元多项式简单的计算器
此计算器主要完成多项式的加法,减法,乘法等运算
实现功能:(!)输入并建立多项式
(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");
}