| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 2577 人关注过本帖
标题:一元多项式的相减
取消只看楼主 加入收藏
Karryu
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2016-5-5
结帖率:90%
收藏
已结贴  问题点数:10 回复次数:6 
一元多项式的相减
程序代码:
#include<stdio.h>
#include<malloc.h>

struct node
{
    int coef;
    int expn;
    struct node * next;
}
typedef struct node polyn;

polyn *createList()
{
    int i,c,d;
    polyn *head,*p,*q;
    p=head=(polyn *)malloc(sizeof(polyn));
    p->coef=-1;
    p->next=NULL;
    for(i=1;;i++)
    {    printf("请输入第%d项的系数以及指数\n",i);
        scanf("%d,%d",&c,&d);
        while((c!=0)||(d!=0))
        {if(d<p->coef)
         printf("输入错误\n");
         if(c==0)
         printf("系数不能为0!\n");
         else
         {q=(polyn *)malloc(sizeof(polyn));
          q->coef=c;
          q->expn=d;
          q->next=NULL;
          p->next=q;
          p=q;
         }
        }
    return(head);
}

polyn *subpolyn(polyn *ha,polyn *hb)
{ 
    int i;
    polyn *p,*q,*s,*t;
    p=ha;
    q=ha->next;
    s=hb->next;
    while((q!=0)&&(s!=0))
    {
        if((q->expn)<(s->expn))
        {
            p=q;
            q=q->next;
        }
         if((q->expn)>(s->expn))
        {
            t=(polyn *)malloc(sizeof(polyn));
            t->coef=s->coef;
            t->expn=s->expn;
            t->next=q;
            p->next=t;
            p=t;
            s=s->next;
        }
        else
        {
            i=(q->coef)-(s->coef);
            if(i==0)
            {
                p->next=q->next;
                 free(q);
                q=p->next;
                s=s->next;
            }
            else
            {
                p->coef=i;
                p=q;
                q=q->next;
                s=s->next;
            }
        }
    }
    if(s!=NULL)
    {q->next=s;}
    return(ha);
}

void printpolyn(polyn *head)
{
    polyn *p;
    p=head->next;
    while(p!=NULL)
    {printf("--> <&d,&d>",p->coef,p->expn);
     p=p->next;
    }
}

main()
{
    polyn *ha,*hb;
    printf("intput ha:\n");
    ha=createList();
    printf("intput hb:\n");
    hb=createList();
    printf("output ha:\n");
    printpolyn(ha);
    printf("output hb:\n");
    printpolyn(hb);
    ha=subpolyn(ha,hb);
    printf("多项式相减的结果\n");
    printpolyn(ha);
}















求助!!!哪里出问题了?





附件: 游客没有浏览附件的权限,请 登录注册
搜索更多相关主题的帖子: 多项式 
2016-09-18 23:21
Karryu
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2016-5-5
收藏
得分:0 
回复 2楼 linlulu001
谢谢 修改了之后能够运行了 但是建立的时候 如果指数输入负数的话就会出现不断循环print("输入错误"); 有时输入的是正确的也会这样 请问是什么原因呢


程序代码:
#include<stdio.h>
#include<malloc.h>

struct node
{
    int coef;
    int expn;
    struct node * next;
};
typedef struct node polyn;

polyn *createList()
{
    int i=1;
    int j,k;
    polyn *head,*p,*q;
    p=head=(polyn *)malloc(sizeof(polyn));
    p->expn= -1;
    p->next=NULL;
    printf("请输入第%d项的系数以及指数\n",i);
    scanf("%d,%d",&j,&k);
    while((j!=0)||(k!=0))
        {if(k<=p->expn)
         printf("输入错误\n");
         else 
             if(j==0)
             printf("系数不能为0!\n");
             else
             {
              q=(polyn *)malloc(sizeof(polyn));
              q->coef=j;
              q->expn=k;
              q->next=NULL;
              p->next=q;
              p=q;
              i++;
             }
       printf("请输入第%d项的系数以及指数\n",i);
       scanf("%d,%d",&j,&k);
        }
    return(head);
}

polyn *subpolyn(polyn *ha,polyn *hb)
{ 
    int i;
    polyn *p,*q,*s,*t;
    p=ha;
    q=ha->next;
    s=hb->next;
    while((q!=0)&&(s!=0))
    {
        if((q->expn)<(s->expn))
        {
            p=q;
            q=q->next;
        }
         else 
            if((q->expn)>(s->expn))
            {
            t=(polyn *)malloc(sizeof(polyn));
            t->coef=-(s->coef);
            t->expn=s->expn;
            t->next=q;
            p->next=t;
            p=t;
            s=s->next;
            }
            else
            {
               i=q->coef-s->coef;
               if(i==0)
               {
                p->next=q->next;
                 free(q);
                q=p->next;
                s=s->next;
               }
               else
               {
                q->coef=i;
                p=q;
                q=q->next;
                s=s->next;
            }
        }
    }
    if(s!=NULL)
    {p->next=s;}
    return(ha);
}

void printpolyn(polyn *head)
{
    polyn *p;
    p=head->next;
    while(p!=NULL)
    {printf("--> <%d,%d>",p->coef,p->expn);
     p=p->next;
    }
    printf("\n");
}

main()
{
    polyn *ha,*hb;
    printf("intput ha:\n");
    ha=createList();
    printf("intput hb:\n");
    hb=createList();
    printf("output ha:\n");
    printpolyn(ha);
    printf("output hb:\n");
    printpolyn(hb);
    ha=subpolyn(ha,hb);
    printf("多项式相减的结果:\n");
    printpolyn(ha);
    system("pause");
}












2016-09-19 14:00
Karryu
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2016-5-5
收藏
得分:0 
回复 5楼 linlulu001
嗯 因为是要一元多项式升序排列
但是现在是
如果第一项输入5,2 第二项输入5,1 就会出现语句"输入错误" "请输入第2项的..."可以继续输入的
但是第一项输入5,2 第二项输入5,-1 就会出现语句"输入错误""请输入第2项的..."这两句是不断地循环、刷屏,没有办法输入
只要某一项的系数,就是k输入负数,就会出现这种情况,请问是哪里的问题

[此贴子已经被作者于2016-9-19 22:59编辑过]

2016-09-19 22:58
Karryu
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2016-5-5
收藏
得分:0 
回复 4楼 书生牛犊
没有漏,就是输入某一项(j是系数 k是指数),只要指数输入非负数就很正常的运行,如果输入负数就进入提示错误 重新输入的这两个语句死循环了了...
2016-09-19 23:05
Karryu
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2016-5-5
收藏
得分:0 
回复 8楼 linlulu001
第一项输入5,-1的时候:(截图的时候不知道为-没了)



上面这个是正常的
如果在第四项输入一个5,-1
就会出现↓


[此贴子已经被作者于2016-9-20 23:19编辑过]

附件: 游客没有浏览附件的权限,请 登录注册
2016-09-20 23:18
Karryu
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2016-5-5
收藏
得分:0 
回复 8楼 linlulu001
按照你说的输入那两个语句的其中一句之后 就没有再出现这种问题了
那是为什么指数输入负数的时候才会出现输入流里的数据不能被读出的情况

还有一个问题就是
假设
ha:3+4x+5x&sup2;
hb: 4+3x+6x&sup3;
结果应该是为
-->(-1,0)-->(1,1)-->(5,2)-->(-6,3)
但实际上输出的是
-->(1,0)-->(1,1)-->(5,2)-->(6,3)
负号实现不了 定义函数的时候我是写了
t->coef=-(s->coef)的


[此贴子已经被作者于2016-9-21 09:08编辑过]

2016-09-20 23:22
Karryu
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2016-5-5
收藏
得分:0 
回复 11楼 linlulu001
用软件输入时的是正确的

[此贴子已经被作者于2016-9-21 13:24编辑过]

2016-09-21 13:18
快速回复:一元多项式的相减
数据加载中...
 
   



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

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