| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 418 人关注过本帖
标题:这道编程我不知道哪里错了,求帮助。
只看楼主 加入收藏
WZX945
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-5-17
结帖率:0
收藏
已结贴  问题点数:20 回复次数:1 
这道编程我不知道哪里错了,求帮助。
这段程序是通过尾差法对于2个一元多项式相加,其中多项式的系数和指数通过input.txt输入,结果通过 output.txt输出
我的问题在于相加之后的结果还是等于第一个多项式。
求大神帮忙看一下。
程序如下:

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct polynode   
{
      int coef;  //系数
      int exp;   //指数
      struct polynode *next;
}node;

node * create(void)  //用尾插法建立一元多项式的链表的函数
{
    FILE *fil;
     node *h,*r,*s;
     int c,e;
     fil=fopen("input.txt","rb");
     h=(node *)malloc(sizeof(node));  //建立多项式的头结点
     r=h; //r始终指向链表的表尾
     fscanf(fil,"%d",&c); //输入系数
     fscanf(fil,"%d",&e); //输入指数
     while(c!=0)  //输入系数不为0时
    {
          s=(node *)malloc(sizeof(node)); //申请新结点
          s->coef=c;  //申请新结点后赋值
          s->exp=e;   //申请新结点后赋值
          r->next=s; //做尾插,插入新结点
          r=s;  //r始终指向单链表的表尾
          fscanf(fil,"%d",&c);
          fscanf(fil,"%d",&e);
         
    }
     r->next=h; //将表的最后一个结点的next置NULL,以示表结束
     return(h);
}

void polyadd(node *polya, node *polyb)//一元多项式相加函数,用于将两个多项式相加,然后将和多项式存放在多项式polya中,并将多项式ployb删除
{
       node *p,*q,*pre,*temp;
       int sum;
       p=polya->next;//令p和q分别指向polya和polyb多项式链表中的第一个结点
       q=polyb->next;
       pre=polya;    //位置指针,指向和多项式polya
       while(p!=NULL&&q!=NULL) //当两个多项式均未扫描结束时,执行以下操作
      {
            if(p->expexp)           //若p指向的多项式指数小于q指的指数
            {
                   pre->next=p;      //将p结点加入到和多项式中
                   pre=pre->next;
                   p=p->next;
            }
            else if(p->exp==q->exp)    //若指数相等,则相应的系数相加
            {
                   sum=p->coef+q->coef;
                   if(sum!=0)
                   {
                        p->coef=sum;
                        pre->next=p;pre=pre->next;p=p->next;
                        temp=q;q=q->next;free(temp);
                    }
                  else     //如果系数和为零,则删除结点p与q,并将指针指向下一个结点
                 {
                       temp=p->next;free(p);p=temp;
                       temp=q->next;free(q);q=temp;
                 }
           }
          else                      //若p指数大于q指数
          {
                pre->next=q;  //p结点不动,将q结点加入到和多项式中
                pre=pre->next;
                q=q->next;
          }
    }
    if(p!=NULL)  //多项式A中还有剩余,则将剩余的结点加入到和多项式中
           pre->next=p;
    else        //否则将B的结点加入到和多项式中
           pre->next=q;                                                        
}
void print(node * p) //输出函数,打印出一元多项式
{      
    FILE *fil;
    fil=fopen("output.txt","wb");
    while(p->next!=NULL)
    {  
        p=p->next;
        fprintf(fil," %d %d\r\n",p->coef,p->exp);  
         
    }
    fclose(fil);
}  
int main()      
{
      node * polya,* polyb;
      printf("\n 结果在output文件中! \n");
      polya=create();  //调用建立链表函数,创建多项式A
      print(polya);
      polyb=create();  //同理,创建B
      print(polyb);
      polyadd(polya,polyb);    //调用一元多项式相加函数
      print(polya);            //调用输出函数,打印结果
      printf("\n");
      return 0;
}


[ 本帖最后由 WZX945 于 2013-5-17 14:52 编辑 ]
搜索更多相关主题的帖子: 多项式 create include 
2013-05-17 14:51
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:20 
《数据结构基础C语言版》上有这个多项式加法的例子

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2013-05-17 18:27
快速回复:这道编程我不知道哪里错了,求帮助。
数据加载中...
 
   



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

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