| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3518 人关注过本帖
标题:一元多项式的相减
只看楼主 加入收藏
Karryu
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2016-5-5
结帖率:90%
收藏
已结贴  问题点数:10 回复次数:11 
一元多项式的相减
程序代码:
#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
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:10 
#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);
}


学会看常见的错误提示还是很有必要的

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

2016-09-18 23:37
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
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
回复 3楼 Karryu
 scanf("%d,%d",&j,&k);

所以你给的输入坑定是漏了那个逗号。所以才会一直出错。

φ(゜▽゜*)♪
2016-09-19 14:23
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
scanf("%d,%d",&j,&k);
    while((j!=0)||(k!=0))     //这里的条件是j!=0或k!=0。
        {if(k<=p->expn)       // 也就是说当k是负数时,会执行这句。接下来会发生什么不用我多解释吧。
         printf("输入错误\n");  
你指的负数应该是指k是负数吧。
如果j是负数还是能运行。

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

2016-09-19 15:39
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
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
回复 6楼 Karryu
抱歉之前没有仔细看你的代码。
代码本身没有问题,有问题的只能是你输入的时候搞错了,导致输入流里的数据不能被读出,一直存在里面而造成的死循环。
方便的话你将你的输入堆图发一份上来看看。
或者在循环里加上:scanf("%*[^\n]")或者fflush(stdin)。


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

2016-09-19 23:33
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
快速回复:一元多项式的相减
数据加载中...
 
   



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

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