| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2651 人关注过本帖
标题:谁帮忙写个两个多项式相加的程序(我写的代码已附上,要求也已附上)
取消只看楼主 加入收藏
清风拂晓
Rank: 8Rank: 8
来 自:火星
等 级:蝙蝠侠
威 望:1
帖 子:356
专家分:889
注 册:2010-8-13
结帖率:96.15%
收藏
已结贴  问题点数:50 回复次数:3 
谁帮忙写个两个多项式相加的程序(我写的代码已附上,要求也已附上)
要求:两个多项式分别按升幂的次序存储在两个链表中
      然后通过计算把两个多项式相加的结果放入原本存储第一个多项式的链表中
      然后把第一个多项式的链表输出(即为结果)
      没有常数项
下面是我自己写的代码但是有些情况不能得出结果,可以赋值回去试试:
//*两个多项式的输入必须依照幂次数的升序依次输入,并且没有常数项*//
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define LENTH sizeof(struct  Polyfactor)
  //*构造多项式因子的结构体*//
typedef struct Polyfactor                     
{
//*声明多项式因子的系数*//
 int coeff;
 //*多项式因子的幂次数*//
 int power;   
 //*用于指向下一个多项式因子的指针*//
 struct Polyfactor *next;      
}Factor;              
//*建立链表存储多项式函数*//
Factor *createpolyn(Factor *head)     
{
    //*设置两个指针用于创建链表*//
    Factor *p1=0;                 
    Factor *p2=0;
    int m=0;
    int n=0;
    //*当输入是q时多项式输入结束*//
    do                  
    {
        printf("请输入多项式因子的系数:");         
         scanf("%d",&m);
         printf("请输入多项式因子的幂次数:");
         scanf("%d",&n);
        if(head==0)
         {
            p1=(Factor*)malloc(LENTH);
            if(p1==0)
            {
                exit(0);
            }
            head=p1;
            p2=p1;
        }
         else
         {
            p1=(Factor*)malloc(LENTH);   
            if(p1==0)
            {
            exit(0);
            }
            else
            {
             p2->next=p1;
             p2=p1;
            }
            
        }
        p2->coeff=m;
        p2->power=n;
        fflush(stdin);
    }while(m!=0&&n!=0);
    p2->next=0;
    return head;
}     //*多项式的输入*//
//*对链表进行插入,其中p3指向P1的前驱*//
Factor *addpolyn(Factor *head,Factor *p1,Factor *p2,Factor *p3)   
{
//p1所指向的链表结点为尾结点时,并且P2没有指向链表尾结点*//
 if(p1->power==0&&p1->coeff==0)
 {
     p1->power=p2->power;
     p1->coeff=p2->coeff;
     p1->next=p2->next;
     return head;
 }
 //p1所指向的链表结点的幂次数比p2的小时,将p2插入p1后*//
 if(p1->power<p2->power)
 {
     if(p3==p1)
     {
         head=p2;
         p2=p2->next;
         p2->next=p1;
         return head;
     }
     else
     {
         p2->next=p1->next;
         p1->next=p2;
         p2=p2->next;
     }
 }
//p1所指向的链表结点的幂次数比p2的大时,将p2插入p1前*//
 else
 {
        p2->next=p1;
        p3->next=p2;
        p2=p2->next;
 }
 return head;
 
 }
 //*对链表进行删除,其中P3指向要删除点的前驱*//
Factor *delpolyn(Factor *head,Factor *p1,Factor *p3)
{
//*把要删除点的后继赋值给删除点的前驱的后继*//
 p3->next=p1->next;
 return head;
}
int main()
{   
 Factor *p=0,*p1=0,*p2=0,*p3=0;
 Factor *head1=0,*head2=0;
 Factor *createpolyn(Factor *head1);
 Factor *addpolyn(Factor *head,Factor *p1,Factor *p2,Factor *p3);
 Factor *delpolyn(Factor *head,Factor *p1,Factor *p3);
//*创建两个链表分别把两个头指针赋值给head1和head2*//
 head1=p1=createpolyn(head1);
 head2=p2=createpolyn(head2);
 p3=p1;
    do
 {
//*两个多项式因子的幂次数相同*//
  if(p1->power==p2->power)
  {
     if(p1->coeff==-p2->coeff)                       
     {
           head1=delpolyn(head1,p1,p3);         
     }
     else
     {
      p1->coeff+=p2->coeff;
     }
  }
  //*两个多项式的幂次数不同*//
  else                                          
  {
   head1=addpolyn(head1,p1,p2,p3);
  }
  p3=p1;
  p1=p1->next;
 }while(p1&&p2);
//*当两个链表都还没指向链表结尾时*//
 while(p2)
 {
  head1=addpolyn(head1,p1,p2,p3);            
 }
 p=head1;
 printf("所得的多项式:\n");
 do
 {
  printf("%dX^%d",p->coeff,p->power);
  printf("+");
  p=p->next;
//*输出所得多项式的结果*//
 }while(p);   
 return 0;
}

帮我看看怎么回事  或者你重新写个程序给我参考参考 拜谢啦

[ 本帖最后由 清风拂晓 于 2010-10-21 21:44 编辑 ]
搜索更多相关主题的帖子: 多项式 附上 相加 代码 
2010-10-21 21:23
清风拂晓
Rank: 8Rank: 8
来 自:火星
等 级:蝙蝠侠
威 望:1
帖 子:356
专家分:889
注 册:2010-8-13
收藏
得分:0 
你那个是重新放在一个链表里 不是用原来放两个多项式的其中一个链表来存放  你可不可再改下发上来?

清风拂暮(木)
2010-10-21 21:35
清风拂晓
Rank: 8Rank: 8
来 自:火星
等 级:蝙蝠侠
威 望:1
帖 子:356
专家分:889
注 册:2010-8-13
收藏
得分:0 
要用到前。后插入链表 和删除链表的函数

清风拂暮(木)
2010-10-21 21:42
清风拂晓
Rank: 8Rank: 8
来 自:火星
等 级:蝙蝠侠
威 望:1
帖 子:356
专家分:889
注 册:2010-8-13
收藏
得分:0 
谢谢啦   你写代码的速度好快 我这都研究了好几晚了还没得到正确的

清风拂暮(木)
2010-10-21 22:17
快速回复:谁帮忙写个两个多项式相加的程序(我写的代码已附上,要求也已附上)
数据加载中...
 
   



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

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