| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 909 人关注过本帖
标题:数据结构:一元多项式的加减,求助啊,来高手
只看楼主 加入收藏
Euangelio
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-11-29
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
数据结构:一元多项式的加减,求助啊,来高手
为什么编译连接都没错,但是运行就崩溃啊
以下是我的代码
头文件#include<stdio.h>
#include<malloc.h>
typedef struct LNode     //定义单链表
{
    float xishu;      //系数
    int zhishu;     //指数
    struct LNode *next;
}LNode,*LinkList;
void InitList(LinkList &L);
void CreatPolyn(LinkList &L);
void DispPolyn(LinkList L);
void Polyn(LinkList &pa,LinkList &pb);

单链表实现#include"linklist.h"
void InitList(LinkList &L)   //定义一个空表
{
    L=(LinkList)malloc(sizeof(LNode));
    L->next=NULL;
    return ;
}
void CreatPolyn(LinkList &L)   //用单链表定义一个多项式
{
    int m;
    LinkList q,p;
    InitList(L);
    q=L;
    printf("输入项数\n");
    scanf("%d",&m);
    printf("按降幂输入系数和指数\n");
    for(int i=0;i<m;i++)
    {
        p=(LinkList)malloc(sizeof(LNode));  //生成新结点
        scanf("%f%d",p->xishu,p->zhishu);
        p->next=NULL;
        q->next=p;
        q=p;
    }
    return ;
}
void DispPolyn(LinkList L)  //显示输入的多项式
{   
    LinkList  p;
    p=L->next;
    printf("Mul Ploy L  is: \n");
    while(p)
     {
         if(p->xishu>0)  //如果系数大于0则加上+号
            printf("+%fX^%d",p->xishu,p->zhishu);
         else  printf(" %fX^&d",p->xishu,p->zhishu);
            p=p->next;
     }
     return ;
}
extern void Polyn(LinkList &pa,LinkList &pb)
{
       LNode *p,*q,*pre,*temp;
       int sum,t;
       CreatPolyn(pa);
       DispPolyn(pa);
       CreatPolyn(pb);
       DispPolyn(pb);
       p=pa->next;    //p指向pa头结点
       q=pb->next;    //q指向qa头结点
       pre=pa;     //用来记录合成的多项式
       printf("选择要执行的操作:1,加法运算2,减法运算:");
       scanf("%d",&t);
       if(t==1)
       {
           while(p!=NULL&&q!=NULL)   //当两个多项式都为完时
           {
               if(p->zhishu<q->zhishu)   //如果q大于p的指数把q项存入
               {
                    pre->next=q;
                    pre=pre->next;
                    q=q->next;
               }
               else if(p->zhishu==q->zhishu)   //如果q等于p的指数把q项q项和存入
               {
                   sum=p->xishu+q->xishu;
                   if(sum!=0)//如果和不为0
                   {
                       p->xishu=sum;
                       pre->next=p;
                       pre=pre->next;
                       p=p->next;
                       temp=q;
                       q=q->next;
                       free(temp);//释放temp
                   }
                   else   //如果和为0
                   {
                       temp=p->next;
                       free(p);//释放p
                       p=temp;
                       temp=q->next;
                       free(q); //释放q
                       q=temp;
                   }
               }
               else     //如果p大于q的指数把p项存入         
               {
                   pre->next=p;     
                   pre=pre->next;
                   p=p->next;  
               }
           }
           if(p!=NULL)  //如果p为完q完,则p接入
               pre->next=p;
           else       //如果q为完p完,则q接入
               pre->next=q;        
           printf("计算结果为");
           DispPolyn(pa);
       }
       else if(t==2)
       {
           while(p!=NULL&&q!=NULL)  //当两个多项式都为完时
           {
                if(p->zhishu<q->zhishu)  //如果q大于p的指数把-q项存入
                    {
                        q->xishu=-q->xishu;
                        pre->next=q;
                        pre=pre->next;
                        q=q->next;
                    }
                else if(p->zhishu==q->zhishu)   //如果q等于p的指数把q项q项和存入
                    {
                        sum=p->xishu-q->xishu;
                        if(sum!=0)//如果和不为0
                        {
                            p->xishu=sum;
                            pre->next=p;
                            pre=pre->next;
                            p=p->next;
                            temp=q;
                            q=q->next;
                            free(temp);  //释放temp
                        }
                        else   //如果和为0
                        {
                            temp=p->next;
                            free(p);  //释放p
                            p=temp;
                            temp=q->next;
                            free(q);  //释放q
                            q=temp;
                        }
                    }
               else       //如果p大于q的指数把p项存入   
               {
                   pre->next=p;     
                   pre=pre->next;
                   p=p->next;  
               }
           }
           if(p!=NULL)  //如果p为空q空,则p接入
               pre->next=p;
           else  //如果q为空p空,则-q接入
           {
               pre->next=q;
               while(q!=NULL)
               {
                    q->xishu=-q->xishu;
                    q=q->next;
               }
               
           }
           printf("计算结果为");
           DispPolyn(pa);
       }
}
主函数
#include"linklist.h"
void main()
{   
    printf("        *****************欢迎来到一元多项式计算程序***************      \n");
    LNode *L1,*L2;
    Polyn(L1,L2);
}
搜索更多相关主题的帖子: include 多项式 
2011-11-29 22:42
Euangelio
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-11-29
收藏
得分:0 
没高手?
2011-11-29 22:54
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:7 
错误太多,滥用指针,基础没打好

总有那身价贱的人给作业贴回复完整的代码
2011-11-29 23:07
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:7 
我擦。头看晕了

认为事物非黑即白是缺智慧的表现……
2011-11-30 01:51
Euangelio
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-11-29
收藏
得分:0 
回复 3楼 embed_xuel
敢问哪的指针错了,我发现有一行的scanf错了,调试好后就可以运行了
2011-11-30 12:20
Euangelio
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-11-29
收藏
得分:0 
CreatPolyn里的给系数和指数赋值的语句少个&
2011-11-30 12:23
快速回复:数据结构:一元多项式的加减,求助啊,来高手
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028368 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved