凊(◦˙▽˙◦) 2022-09-20 20:46 采纳率: 88%
浏览 11
已结题

写一元多项式相加的代码时,代码出现问题

我已经被这个问题折磨的不行了,我不会改

#include<iostream.h>
#include<stdlib.h>
#define MAX 20
//存放多项式的数组类型
typedef struct{
    float coef;
    int expon;
}polyarray [MAX];
//定义单链表结点类型
typedef struct poly_node{
    float coef;     //系数
    int expon;      //指针域
    struct poly_node *next;
}poly_node,*poly_pointer;  //指向结构的指针
//创建,初始化,显示,
//尾插法创建链表
void  creatpoly(poly_pointer &L,polyarray a[],int n){
    poly_pointer r,s;
    L=(poly_pointer)malloc(sizeof(poly_node));
    L->next=NULL;
    r=L;  //p时钟指向尾结点,开始时指向头结点
    for(int i=0;i<n;i++){
        s=(poly_pointer)malloc(sizeof(poly_node));//创建新结点
        s->coef=a[i].coef;
        s->expon=a[i].expon;
        r->next=s;//将结点s插入到结点r之后
        r=s;
    }
    r->next    =NULL;   //尾结点next域为空
}

void display(poly_pointer L){
    poly_pointer p=L->next;
    while(p!=NULL){
        cout<<p->coef<<"*"<<p->expon;
        p=p->next;
    }
    cout<<endl;

}
//按exp域递减排序
void sort(poly_pointer &head){
    poly_pointer p=head->next,q,r;
    if(p!=NULL){  //若原链表中有一个以上的数据结点
        r=p->next;
        p->next=NULL;
        p=r;
        while(p!=NULL){
            r=p->next;
            q=head;
            while(q->next!=NULL&&q->next->expon>p->expon)
                q=q->next;
            p->next=q->next;
            q->next=p;
            p=r;
        }
    }
}


void AddPolyn(poly_pointer &pa,poly_pointer pb){
    //求一元多项式pa 和pb 的和,保存在pa里
    poly_pointer qa=pa->next,qb=pb->next; 
    
    poly_pointer p=pa;
    while(qa && qb){
        if(qa->expon<qb->expon){
            //qa连入结果
            pa=(poly_pointer)malloc(sizeof(poly_node));
            pa->next=pa->next;
            pa->expon=pa->expon;
            p->next=pa;
            p=pa;
            pa=pa->next;
    
        }else if(qa->expon==qb->expon){
                pa->expon+=qb->expon;
            if(qa->coef){//qa连入结果
                pa=(poly_pointer)malloc(sizeof(poly_node));
                pa->expon=pa->expon;
                pa->coef=pa->coef;
                p->next=pa;
                p=pa;

            }
                qa=qa->next; qb=qb->next;
        }

        else{  //qa->expon>qb->expon
//qb连入结果
                pa=(poly_pointer)malloc(sizeof(poly_node));
                pa->expon=pb->expon;
                pa->coef=pb->coef;
                p->next=pa;
                p=pa;
                pb=pb->next;
        }
    }//while

        //谁未结束,谁连进
        if(pb!=NULL) pa=pb;
        while(pa!=NULL){
            pa=(poly_pointer)malloc(sizeof(poly_node));
            pa->expon=pa->expon;
            pa->coef=pa->coef;
            p->next=pa;
            p=pa;
            pa=pa->next;
        }
        p->next=NULL;


}

void mian(){
    poly_pointer LA,LB;
    polyarray a[]={{3,1},{2,2},{1,3},{4,4}};
polyarray b[]={{3,1},{2,2},{1,3},{4,4},{3,5}};
    creatpoly(LA,a,4);
    creatpoly(LB,b,5);
    cout<<"原A:";
    display(LA);
    cout<<endl;
    cout<<"原B:";
    display(LB);
    cout<<endl;
    sort(LA);
        sort(LB);
cout<<"有序:";
display(LA);
cout<<"有序:";
    display(LB);
    AddPolyn(LA,LB);
    cout<<"结果:";
        display(LA);
    cout<<endl;
}


img

img

img

  • 写回答

2条回答 默认 最新

  • 快乐鹦鹉 2022-09-20 21:38
    关注

    报错是在poly.h的35和36行
    你这个数据结构定义方式不对
    struct _polyarray
    {
    float coef;
    float expon;
    }polyarray[MAX];
    当使用typedef时,你的polyarray就是数据类型名称,而不是变量名称,不能后面加[MAX}形成数组的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月29日
  • 已采纳回答 9月21日
  • 创建了问题 9月20日

悬赏问题

  • ¥15 基于ucc28019的pfc电路中芯片一直不工作
  • ¥15 yolov8在3588板子端c++推理报错
  • ¥50 unitywebrequest分段下载导致报错,如何解决?
  • ¥15 错误使用 gretna_GUI_PreprocessInterface>RunBtn_Callback
  • ¥15 WPF如何用Chart绘画出Y轴的左边数据
  • ¥15 pycharm无法查看内置代码
  • ¥15 跑hls xfopencv的例程standalone_hls_axi_example出的错误,csim没问题,c synthesis出的错误
  • ¥15 sqlserver update语句逐行生效
  • ¥20 Windows10系统命令行调用
  • ¥15 php环境如何实现国密SM2相关功能