| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 271 人关注过本帖
标题:求指教2个多项式相加程序的问题
只看楼主 加入收藏
hifine
Rank: 1
等 级:新手上路
帖 子:7
专家分:7
注 册:2011-9-30
结帖率:100%
收藏
 问题点数:0 回复次数:1 
求指教2个多项式相加程序的问题
程序代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{   float coef;                               //项的表示
    int exp;                                  //系数
    struct Node *next;                        //指数
}   PolyNode;                                 //指向多项式中的下一结点 

PolyNode * polyCreat()                        //尾插法
{   PolyNode *L,*r,*s;
    float coef;
    int exp;
    L=(PolyNode *)malloc(sizeof(PolyNode));
    r=L;                                      //r为尾指针
    scanf("%f,%d",&coef,&exp);
    while(coef!=0)                            //如果输入的系数为0,结束
    {   s=(PolyNode *)malloc(sizeof(PolyNode));
        s->coef=coef;
        s->exp=exp;
        r->next=s;
        r=s;
        scanf("%f,%d",&coef,&exp);
    }
    r->next=NULL;
    return(L);
}

void polyAdd(PolyNode *pa,PolyNode *pb)        //多项式相加
{   PolyNode *p,*q,*r,*t;                      //暂时存放欲释放的结点,r为和多项式链表中的尾指针
    float sum;                                 //系数相等时,相加求和的结果保存在sum中
    p=pa->next;                                //p,q分别指向pa,pb链表的第一个结点
    q=pb->next;
    r=pa;                                      //和多项式保存在头指针为pa的链表中,r初始指向pa
    while(p&&q)
    {   if(p->exp<q->exp)                      //p指向的项指数小于q,尾指针指向p,且将p指向链表下一节点
           {   r=p;
               p=p->next;
           }
        else if(p->exp==q->exp)                //指数相等时,系数相加
        {   sum= p->coef+q->coef;
            if(sum!=0)                         //系数相加不为0
            {   p->coef=sum;
                r=p;
                p=p->next;
                t=q;
                q=q->next;
                free(t);
            }
            else                               //系数相加为0
            {   t=p;
                p=p->next;
                r->next=p;
                free(t);
                t=q;
                q=q->next;
                free(t);
            }
        }
        else                                   //q指向的项的指数小于p时,将q加入到和多项式
        {   r->next=q;
            r=q;
            q=q->next;
            r->next=p;
        }
    }
    if(q) r->next=q;
    free(pb);
}

void printPoly(PolyNode *pl)
{   int i=0;
    PolyNode *p;
    p=pl->next;
    while(p)
    {   printf("(%7.2f, %5d)",p->coef,p->exp);
        p=p->next;
        i++;
        if(i%4==0) printf("\n");
    }
    printf("\n相加结果多项式项数为%d项\n",i);
    getchar();
}                
   
void main()
{   PolyNode *polya,*polyb;
    printf("请输入多项式A的系数和指数,格式:系数,指数,以0结束输入\n");
    polya=polyCreat();
    printf("请输入多项式B的系数和指数,格式:系数,指数,以0结束输入\n");
    polya=polyCreat();
    polyAdd(polya,polyb);
    printf("下面输出多项式的和:\n");
    printPoly(polya);
}
编译通过了,在dev c++中调试,说“程序产生一个访问违例(段异常),我知道应该是指针问题,但找不出来
错误时的断点是这
q=pb->next;
哪里指针错了?


[ 本帖最后由 hifine 于 2012-3-25 13:11 编辑 ]
搜索更多相关主题的帖子: 多项式 
2012-03-25 13:10
hifine
Rank: 1
等 级:新手上路
帖 子:7
专家分:7
注 册:2011-9-30
收藏
得分:0 
再次认真检查,自己发现错误了。。
2012-03-25 14:13
快速回复:求指教2个多项式相加程序的问题
数据加载中...
 
   



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

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