一元多项式的代数运算

下面是我们前段时间做的实验报告:(数据结构c版)
   【设计题目】
     一元多项式的代数运算
   【问题描述】
     计算任意两个一元多项式的加法、减法以及乘法。
   【基本要求】
     由键盘输入二多项式的每一项的指数、系数,输出这二个多项式的和、积。
   【实现说明】
     可以采用链接存储线性表的方式。

以下是我写的代码,所用的语言是c,运行环境 window xp 下的     Turbo C 2.0 实现  

#include "stdio.h"
#include "alloc.h"
typedef struct node{
        int c,e; /*c 为系数,e为指数*/
        struct node *next;
}Polytype;
 
Polytype *create() /*输入并建立多项式*/
{
   Polytype *head=malloc(sizeof(Polytype)),*p;
   int n,e,c;     /*n 为项数,e为指数,c为系数*/
   p=head;
   printf("/n n:");   scanf("d%",&n);
   while(n){
       printf("/n c,e:"); scanf("%d,%d",&c,&e);
       n--;
       p->next=malloc(sizeof(Polytype));   /* 创建空单链表*/
       p=p->next;
       p->c=c;   p->e=e;
   }
   p->next=NULL;    
   return head;     /* 返回指针*/
 }
 
void PrintPoly(Polytype *head) /*输出多项式*/
{
   Polytype *p=head->next;
   while(p){
        printf("(%d,%d),",p->c,p->e);
        p=p->next;
   }
   printf("/n");
}
 
Polytype *polyadd(Polytype *ha,Polytype *hb){/*多项式相加*/
   Polytype *hc=malloc(sizeof(Polytype)),*pc=hc,*pa=ha->next,*pb=hb->next;
   int e,c; /*c 为系数,e为指数*/
   while(pa || pb){
        if(pa&&(pb==NULL||(pa->e<pb->e))){
            c=pa->c;   e=pa->e;
            pa=pa->next;
        }
        else if(pb&&(pa==NULL||(pa->e>pb->e))){
            c=pb->c;   e=pb->e; 
            pb=pb->next;
        }
             else{
                    c=pa->c+pb->c;
                    e=pa->e;                    /*or e=pb->e*/
                    pa=pa->next;   pb=pb->next;
                 }
        if(c){
             pc->next=malloc(sizeof(Polytype));
             pc=pc->next;
             pc->c=c;
             pc->e=e;
        }
   }
   pc->next=NULL;
   return hc;
}
 
Polytype *polyminus(Polytype *ha,Polytype *hb){/*多项式相减*/
   Polytype *hc=malloc(sizeof(Polytype)),*pc=hc,*pa=ha->next,*pb=hb->next;
   int e,c; /*c 为系数,e为指数*/
   while(pa || pb){
        if(pa&&(pb==NULL||(pa->e<pb->e))){
            c=pa->c;   e=pa->e;
            pa=pa->next;
        }
        else if(pb&&(pa==NULL||(pa->e>pb->e))){
            c=pb->c;   e=pb->e; 
            pb=pb->next;
        }
             else{
                    c=pa->c-pb->c;
                    e=pa->e;                    /*or e=pb->e*/
                    pa=pa->next;   pb=pb->next;
                 }
        if(c){
             pc->next=malloc(sizeof(Polytype));
             pc=pc->next;
             pc->c=c;
             pc->e=e;
        }
   }
   pc->next=NULL;
   return hc;
}
 
Polytype *onexmul(Polytype *pa,Polytype *hb){/*单项乘多项*/
   Polytype *pb=hb->next,*pc,*hc=malloc(sizeof(Polytype));
   pc=hc;
   while(pb){
        pc->next=malloc(sizeof(Polytype));
        pc=pc->next;
        pc->e=pa->e+pb->e;
        pc->c=pa->c*pb->c;
        pb=pb->next;
   }
   pc->next=NULL;
   return hc;
}
 
Polytype *mulxmul(Polytype *ha,Polytype *hb){/*多项乘多项*/
   Polytype *t,*hc=malloc(sizeof(Polytype)),*pa;
   pa=ha->next;
   hc->next=NULL;
   while(pa){
        t=onexmul(pa,hb);
        hc=polyadd(hc,t);
        freepoly(t);
         pa=pa->next;
   }
   return hc;
}
 
void freepoly(Polytype *head){
   Polytype *p=head;
   while(p){
        head=head->next;
        free(p);
        p=head;
   }
}
 
main(){
   Polytype *ha,*hb,*hc;
   ha=create();   PrintPoly(ha);
   hb=create();  PrintPoly(hb);
 
   hc=polyadd(ha,hb);
   printf("a+b:");
   PrintPoly(hc);
   freepoly(hc);
 
   hc=polyminus(ha,hb);
   printf("a-b:");
   PrintPoly(hc);
   freepoly(hc);
 
   hc=mulxmul(ha,hb);
   printf("a*b:");
   PrintPoly(hc);
   freepoly(hc);
   freepoly(ha);
   freepoly(hb);
}
上面的代码可以实现题目的要求,但本人觉的它还不是很完好,.不过它还是对初学者有定帮助的..所以仅做为参考...如果你想学好技术的话,建议你还是亲手写写.........。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值