标题:下面是我写的程序,有错,望指点
只看楼主
万俟宇暘
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2014-3-30
结帖率:0
已结贴  问题点数:20 回复次数:10 
下面是我写的程序,有错,望指点
#include <stdio.h>
#include <stdlib.h>
//#include <malloc.h>
typedef struct node//结构体
{
    int zhishu;//一元多项式指数
    float xishu;//一元多项式系数
    struct node *next;
}polynode,*linklist;
polynode *temp;
void crelist(polynode *l)//为链表分配空间
{
    l=(linklist)malloc(sizeof(polynode));
    l->next=NULL;
}
void distroylist(polynode *l)//销毁链表,回收空间
{
    free(l);
}
void printlist(polynode *l)//输出链表
{
    while (l!=NULL)
    {
        printf("  %fx^%d",l->xishu,l->zhishu);
        l=l->next;
    }
    printf("\n");
}
void createlist(polynode *l)//创建链表并输入值
{
    crelist(l);
    do
    {
        printf("请输入多项式的系数和指数:\n");
        scanf("%f,%d",l->xishu,l->zhishu);
        l=l->next;
        printf("继续输入?");
        //getchar();
    } while(getchar()!='n'||getchar()!='N');   
}
polynode*addlist(polynode *s,polynode *p) //链表相加
{
    float sum;
/*    while (p==NULL)
    {
        temp=p;
        p=p->next;
        temp=temp->next;
    }
    while (s==NULL)
    {
        temp=s;
        s=s->next;
        temp=temp->next;
    }*/
    while(p!=NULL&&s!=NULL)
    {
        if (s->zhishu>p->zhishu)
        {
            temp=p;
            p=p->next;
            temp=temp->next;
        }
        if (s->zhishu<p->zhishu)
        {
            temp=s;
            s=s->next;
            temp=temp->next;
        }
        else
        {
            sum=s->xishu+p->xishu;
            if(sum!=0)
            {
                temp->xishu=sum;
                temp->zhishu=s->zhishu;
            }
            s=s->next;
            p=p->next;
        }
        if (s->next==NULL)
        {
            temp=p;
            p=p->next;
            temp=temp->next;
        }
        if (p->next==NULL)
        {
            temp=s;
            s=s->next;
            temp=temp->next;
        }
    }
    temp->next=NULL;
    return temp;
}
int main()//主函数
{
    polynode *m,*n;
    createlist(m);
    printf("输入成功!\n");
    createlist(n);
    printf("输入成功!\n");
    addlist(m,n);
    printlist(m);
    printf("\n加上\n");
    printlist(n);
    printf("的结果是:\n");
    printlist(temp);
    distroylist(m);
    distroylist(n);
    return 0;
}
搜索更多相关主题的帖子: include 多项式 结构体 回收 
2014-03-30 21:39
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:4 
以下是引用万俟宇暘在2014-3-30 21:39:47的发言:

下面是我写的程序,有错,望指点

   拜托  能不能不这样提问呢

DO IT YOURSELF !
2014-03-30 21:48
万俟宇暘
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2014-3-30
得分:0 
回复 2楼 wp231957
帮我改一下,能运行就行
2014-03-30 21:51
神机军师
Rank: 7Rank: 7Rank: 7
来 自:游鱼潜水
等 级:黑侠
威 望:2
帖 子:202
专家分:542
注 册:2013-12-21
得分:4 
回复 2楼 wp231957
貌似我喜欢干这活啊

未知令人期待!
2014-03-30 22:03
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
以下是引用神机军师在2014-3-30 22:03:42的发言:

貌似我喜欢干这活啊
那你就帮帮楼主吧

链表这块 我是盲区

DO IT YOURSELF !
2014-03-30 22:04
神机军师
Rank: 7Rank: 7Rank: 7
来 自:游鱼潜水
等 级:黑侠
威 望:2
帖 子:202
专家分:542
注 册:2013-12-21
得分:0 
1.typedef 重新定义的类型名习惯全部大写
2.结构体定义最后要是想定义指针类型,就用 polynode * 变量名 好了
3.crelist函数里面malloc强制类型转换 我用(polynode *)了,以为我不明白linklist 到底啥意思,请见谅啦。
4.createlist函数里面: scanf("%f,%d",l->xishu,l->zhishu) 这一句,后面需要用的是地址,所以改为:
                                  scanf("%f,%d",&l->xishu,&l->zhishu)
5.addlist函数里面
temp=p;
p=p->next;
temp=temp->next;
这一系列改动行不通,这是关于函数参数传递的问题
polynode*addlist(polynode *s,polynode *p)
指针传递,毫无疑问,你可以通过访问*p.  或者p-> 来改变链表的值,但是这里的p 和 s是由主调函数传递过来的指针
数值,只是他们指向的东西你可以在这个被调函数里面通过上述方式改变,但是这里的p 和 s的值的改变并不影响原函数的数值。就如同一间房间的钥匙,这里的p s 是主调函数的数值的复制体,你可以通过它来打开房间,但是你毁了它,它的原件还是存在的,它自己本身什么变化不影响原件。
于是乎,,这个函数我不知道怎么改了,说出来发现的问题吧。。

未知令人期待!
2014-03-30 22:20
神机军师
Rank: 7Rank: 7Rank: 7
来 自:游鱼潜水
等 级:黑侠
威 望:2
帖 子:202
专家分:542
注 册:2013-12-21
得分:0 
https://bbs.bccn.net/thread-429276-1-1.html
这个是自己编的,楼主看懂的话应该还是有点用的
里面的问题请忽略,因为问题还是很多,只是能够运行,就看看思路和一些规范吧
呃,怎么感觉自夸呢,,,,,,
有问题互相讨论共同进步

未知令人期待!
2014-03-30 22:24
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
得分:4 
楼主是让你给改好了,不是看你在这里说原理说哪里错了

总有那身价贱的人给作业贴回复完整的代码
2014-03-31 06:24
ying8501
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:1092
专家分:1446
注 册:2008-11-24
得分:4 
问题最主要在楼主的概念太不清了。
void crelist(polynode *l)//为链表分配空间  ---- 应该是给每个结点分配空间,而不是只为头结点分配空间  ---- 此函数可以不要
{
    l=(linklist)malloc(sizeof(polynode));
    l->next=NULL;
}
去掉上边的函数,试着修改下面两个函数,你会进步很大。特别注意:建立链表,应该是给每个结点先分配空间再赋值

polynode * createlist(polynode *l)//创建链表并输入值 ---- 应该是给每个结点先分配空间
{
    polynode *p1,p2;
      
    do
    {
        
        printf("请输入多项式的系数和指数:\n");
        scanf("%f,%d",&l->xishu,&l->zhishu);
        l=l->next;
        printf("继续输入?");
        //getchar();
    } while(getchar()!='n'||getchar()!='N');   
    return l;
}

void distroylist(polynode *l)//销毁链表,回收空间 ---- 应该是从头结点开始,依次释放每个结点的空间
{
    free(l);
}

2014-03-31 08:07
so_love
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:7
帖 子:812
专家分:4151
注 册:2013-11-25
得分:4 
lz就是要答案。。。。

一花一世界、一叶一追寻、片片花叶落、情系何人身。
2014-03-31 10:03



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-429407-1-1.html




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

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