⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 新建 文本文档.txt

📁 说明:此代码是能实现一元多项式相乘的一个函数
💻 TXT
字号:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define NULL 0
#define OK 1
#define ERROR 0

typedef int Status,ElemType;
typedef struct Node{
  float coef;
  int expn;
  struct Node *next;
}Node,* polynomial;

/*polynomial CreatPolyn(polynomial p,int n){
        polynomial p1,s;
        int i;
        p=(polynomial)malloc(sizeof(Node));
        p->next=NULL;
        p1=p;
        for(i=0;i<n;i++){
                s=(polynomial)malloc(sizeof(Node));
                p1->next=s;
                scanf("%f%d",&s->coef,&s->expn);
                s->next=NULL;
                p1=s;
                printf("\n");
        }
        return(p);
}*/

polynomial CreatPa(){
        polynomial p1,pa,s;
        int i ;
        float ac[4]={7,3,9,5};
        int ae[4]={0,1,8,17};
        pa=(polynomial)malloc(sizeof(Node));
        pa->next=NULL;
        p1=pa;
        for(i=0;i<4;i++){
                s=(polynomial)malloc(sizeof(Node));
                p1->next=s;
                s->coef=ac; s->expn=ae;
                s->next=NULL;
                p1=s;
        }
        return(pa);
}

polynomial CreatPb(){
        polynomial p1,pb,s;
        int i ;
        float bc[3]={8,22,-9};
        int be[3]={1,7,8};
        pb=(polynomial)malloc(sizeof(Node));
        pb->next=NULL;
        p1=pb;
        for(i=0;i<3;i++){
                s=(polynomial)malloc(sizeof(Node));
                p1->next=s;
                s->coef=bc; s->expn=be;
                s->next=NULL;
                p1=s;
        }
        return(pb);
}

void PrintPolyn(polynomial p){
        polynomial p1;
        p1=p->next;
        if(!p1) {printf("This is an empty polynomial:\n "); return ERROR;}
        printf("p=%.2f*x^%d",p1->coef,p1->expn);
        p1=p1->next;
        while(p1!=NULL){
                printf("+%.2f*x^%d",p1->coef,p1->expn);
                p1=p1->next;
        }
}

void AddPolyn(polynomial pa,polynomial pb){            /*两个多项式相加,相加后把结果存在pa中*/
        polynomial ha,hb,hc,q;
        ha=pa->next; hb=pb->next; hc=pa;
        while(ha&&hb){
                if(ha->expn<hb->expn){                        /*如果pa的系数大*/
                        hc->next=ha; ha=ha->next; hc=hc->next;
                }
                else if(ha->expn>hb->expn){
                        hc->next=hb; hb=hb->next; hc=hc->next;
                }
                else{
                        ha->coef+=hb->coef;
                    if(ha->coef){
                                hc->next=ha; ha=ha->next; hc=hc->next;
                                q=hb; hb=hb->next; free(q);
                        }
                        else{
                                q=ha; ha=ha->next; free(q);
                                q=hb; hb=hb->next; free(q);
                        }
                }
        }                                                   /*结束后至少有一个多相式被处理*/
        if(ha) hc->next=ha;
        if(hb) hc->next=hb;
        pb->next=NULL;
        free(pb);                                            /*释放pb的头指针*/
}

polynomial MultiPolyn(polynomial pa,polynomial pb){   /*多项式相乘*/
        polynomial pc,pd,p;
        Node *p0,*p1,*p2;
        pd=(polynomial)malloc(sizeof(Node));
        pd->next=NULL;
        p1=pa->next;
        p2=pb->next;
        while(p1!=NULL){
                pc=(polynomial)malloc(sizeof(Node));
                pc->next=NULL;
                p0=pc;
                while(p2!=NULL){
                        p=(polynomial)malloc(sizeof(Node));
                        p->coef=p1->coef*p2->coef;
                        p->expn=p1->expn+p2->expn;
                        p->next=p0->next;p0->next=p;p0=p0->next;
                        p2=p2->next;
                }
                AddPolyn(pd,pc);
                p1=p1->next;
                p2=pb->next;
        }
        /*PrintPolyn(pd);
        printf("\n");*/
        return(pd);
}
void main(){
        polynomial p1,pa,pb,p;
        int n1=4,n2=3;
        clrscr();
        printf("\n\nNow the programming begin:\n");
        pa=CreatPa();
        PrintPolyn(pa);
        printf("\n");
        pb=CreatPb();
        PrintPolyn(pb);
        printf("\n");
        p=MultiPolyn(pa,pb);
        printf("\nAfter multipolyn pa and pb:\n");
        PrintPolyn(p);
        printf("\n\nNow Add pa and pb\n");
        AddPolyn(pa,pb);
        printf("\nAfter add pb and pb ,the pa become:\n");
        PrintPolyn(pa);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -