文档库 最新最全的文档下载
当前位置:文档库 › 一元多项式简单计算器

一元多项式简单计算器

#include
#include
#include


typedef struct Polynomial{
float coef;
int expn;
struct Polynomial *next;
}*Polyn,Polynomial;

void Insert(Polyn p,Polyn h){
if(p->coef==0) free(p);
else
{
Polyn q1,q2;
q1=h;
q2=h->next;
while(q2&&p->expnexpn)
{
q1=q2;
q2=q2->next;
}
if(q2&&p->expn==q2->expn)
{
q2->coef+=p->coef;
free(p);
if(!q2->coef)
{
q1->next=q2->next;
free(q2);
}
}
else
{
p->next=q2;
q1->next=p;
}
}
}

Polyn CreatePolyn(Polyn head,int m){

int i;
Polyn p;
p=head=(Polyn)malloc(sizeof(struct Polynomial));
head->next=NULL;
for(i=0;i{
p=(Polyn)malloc(sizeof(struct Polynomial));
printf("qingshuru%dxiangdexishuyuzhishu:",i+1);
scanf("%f %d",&p->coef,&p->expn);
Insert(p,head);
}
return head;
}

void DestroyPolyn(Polyn p){

Polyn q1,q2;
q1=p->next;
q2=q1->next;
while(q1->next)
{
free(q1);
q1=q2;
q2=q2->next;
}
}

void PrintPolyn(Polyn P){
Polyn q=P->next;
int flag=1;
if(!q)
{
putchar('0');
printf("\n");
return;
}
while(q)
{
if(q->coef>0&&flag!=1) putchar('+');
if(q->coef!=1&&q->coef!=-1)
{
printf("%g",q->coef);
if(q->expn==1) putchar('X');
else if(q->expn) printf("X^%d",q->expn);
}
else
{
if(q->coef==1)
{
if(!q->expn) putchar('1');
else if(q->expn==1) putchar('X');
else printf("X^%d",q->expn);
}
if(q->coef==-1)
{
if(!q->expn) printf("-1");
else if(q->expn==1) printf("-X");
else printf("-X^%d",q->expn);
}
}
q=q->next;
flag++;
}
printf("\n");
}

int compare(Polyn a,Polyn b){
if(a&&b)
{
if(!b||a->expn>b->expn) return 1;
else if(!a||a->expnexpn) return -1;
else return 0;
}
else if(!a&&b) return -1;
else return 1;
}

Polyn AddPolyn(Polyn pa,Polyn pb){
Polyn qa=pa->next;
Polyn qb=pb->next;
Polyn headc,hc,qc;
hc=(Polyn)malloc(sizeof(struct Polynomial));
hc->next=NULL;
headc=hc;
while(qa||qb)
{
qc=(Polyn)malloc(sizeof(struct Polynomial));
switch(compare(qa,qb)){
case 1:
{
qc->coef=qa->coef;
qc->expn=qa->expn;
qa=qa->next;
break;
}
case 0:
{
qc->coef=qa->coef+qb->coef;
qc->expn=qa->expn;
qa=qa->next;
qb=qb->next;
break;
}
case -

1:
{
qc->coef=qb->coef;
qc->expn=qb->expn;
qb=qb->next;
break;
}
}
if(qc->coef!=0)
{
qc->next=hc->next;
hc->next=qc;
hc=qc;
}
else free(qc);
}
return headc;
}

Polyn SubtractPolyn(Polyn pa,Polyn pb){
Polyn h=pb;
Polyn p=pb->next;
Polyn pd;
while(p)
{
p->coef*=-1;
p=p->next;
}
pd=AddPolyn(pa,h);
for(p=h->next;p;p=p->next)
p->coef*=-1;
return pd;
}

int ValuePolyn(Polyn head,int x){

Polyn p;
int i;
int sum=0,t;
for(p=head->next;p;p=p->next)
{
t=1;
for(i=p->expn;i!=0;)
{
if(i<0){t/=x;i++;}
else{t*=x;i--;}
}
sum+=p->coef*t;
}
return sum;
}

Polyn Derivative(Polyn head){

Polyn q=head->next,p1,p2,hd;
hd=p1=(Polyn)malloc(sizeof(struct Polynomial));
hd->next=NULL;
while(q)
{
if(q->expn!=0)
{
p2=(Polyn)malloc(sizeof(struct Polynomial));
p2->coef=q->coef*q->expn;
p2->expn=q->expn-1;
p2->next=p1->next;
p1->next=p2;
p1=p2;
}
q=q->next;
}
return hd;
}

Polyn MultiplyPolyn(Polyn pa,Polyn pb){

Polyn hf,pf;
Polyn qa=pa->next;
Polyn qb=pb->next;
hf=(Polyn)malloc(sizeof(struct Polynomial));
hf->next=NULL;
for(;qa;qa=qa->next)
{
for(qb=pb->next;qb;qb=qb->next)
{
pf=(Polyn)malloc(sizeof(struct Polynomial));
pf->coef=qa->coef*qb->coef;
pf->expn=qa->expn+qb->expn;
Insert(pf,hf);
}
}
return hf;
}

void main()
{
int m,n,a,x;
char flag;
Polyn pa=0,pb=0,pc;

printf(" huanyingshiyongduoxiangshichaozuochengxu\n\n");
printf("qingshuru a dexiangshi:");
scanf("%d",&m);
pa=CreatePolyn(pa,m);
printf("qingshuru b dexiangshi:");
scanf("%d",&n);
pb=CreatePolyn(pb,n);


printf(" *******************************************************\n");
printf(" * duoxiangshichaozuochengxu *\n");
printf(" * *\n");
printf(" * A:shuchuduoxiangshi a B:shuchuduoxiangshi b *\n");
printf(" * *\n");
printf(" * C:shuchu a de daoshu D:shichu b dedaoshu *\n");
printf(" * *\n");
printf(" * E:dairu x dezhijisuan a F:dairu x dezhijisu b *\n");
printf(" * *\n");
printf(" * G:shuchu a+b H:shuchu a-b *\n");
printf(" * *\n");


printf(" * I:shuchu a*b J:tuichuchengxu *\n");
printf(" * *\n");
printf(" *******************************************************\n");

while(a)
{
printf("\nqingxuanzecaozuo:");
scanf(" %c",&flag);
switch(flag)
{

case'A':
case'a':
{
printf("\n duoxiangshi a=");
PrintPolyn(pa);
break;
}
case'B':
case'b':
{
printf("\n duoxiangshi b=");
PrintPolyn(pb);
break;
}
case'C':
case'c':
{
pc=Derivative(pa);
printf("\n duoxiangshi a dedaohanshuwei:a'=");
PrintPolyn(pc);
break;
}
case'D':
case'd':
{
pc=Derivative(pb);
printf("\n duoxiangshi b dedaohanshuwei:b'=");
PrintPolyn(pc);
break;
}
case'E':
case'e':
{
printf("shuru x dezhi:x=");
scanf("%d",&x);
printf("\n x=%d时,a=%d\n",x,ValuePolyn(pa,x));
break;
}
case'F':
case'f':
{
printf("shuru x dezhi:x=");
scanf("%d",&x);
printf("\n x=%d shi,b=%d\n",x,ValuePolyn(pb,x));
break;
}
case'G':
case'g':
{
pc=AddPolyn(pa,pb);
printf("\n a+b=");
PrintPolyn(pc);
break;
}
case'H':
case'h':
{
pc=SubtractPolyn(pa,pb);
printf("\n a-b=");
PrintPolyn(pc);
break;
}
case'I':
case'i':
{
pc=MultiplyPolyn(pa,pb);
printf("\n a*b=");
PrintPolyn(pc);
break;
}
case'J':
case'j':
{
printf("\n ganxieshiyongcachengxu !\n");
DestroyPolyn(pa);
DestroyPolyn(pb);
a=0;
break;
}
default:
printf("\n nidejisuancuowu,qingcongxinshuru!\n");
}
}
}

相关文档
相关文档 最新文档