| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 888 人关注过本帖
标题:疑惑,可以帮我分析一下为什么会这样?
只看楼主 加入收藏
落雪luoxue
Rank: 2
等 级:论坛游民
帖 子:13
专家分:52
注 册:2016-9-29
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:2 
疑惑,可以帮我分析一下为什么会这样?
写了一个简单的动态链表,但是在执行的时候虽然提示输入第二个多项式,但实际上相当于无效输入,根本不显示多项式二的数据,如图:
图片附件: 游客没有浏览图片的权限,请 登录注册

程序代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct ploy {
    double coef;
    int expn;
    struct ploy *next;
}Linklist;
int n = 0;

Linklist *creat()
{
    Linklist *head, *p1, *p2;
    p1 = p2 = (Linklist *)malloc(sizeof(Linklist *));
    head = NULL;
    scanf("%lf %d", &p1->coef, &p1->expn);
    while (p1->coef != 0)
    {
        n++;
        if (n == 1) head = p1;
        else p2->next = p1;
        p2 = p1;
        p1 = (Linklist *)malloc(sizeof(Linklist *));
        scanf("%lf %d", &p1->coef, &p1->expn);
    }
    p2->next = NULL;
    return head;
}

void visit(Linklist *temp)
{
    Linklist *ploy;
    int i = 0;
    ploy = temp;
    while (ploy)
    {
        if (i == 0)
        {
            printf("%3.2lf*X^%d", ploy->coef, ploy->expn);
            ploy = ploy->next;
            i = 1;
        }
        else if (ploy->coef<0)
        {
            printf("%3.2lf*X^%d", ploy->coef, ploy->expn);
            ploy = ploy->next;
        }
        else if (ploy->coef>0)
        {
            printf("+%3.2lf*X^%d", ploy->coef, ploy->expn);
            ploy = ploy->next;
        }
    }
}

Linklist *sum(Linklist *ploy1, Linklist *ploy2)
{
    Linklist *ptr1, *ptr2, *temp, *head;
    temp = (Linklist *)malloc(sizeof(Linklist *));
    head = ptr1 = ploy1;
    ptr2 = ploy2;
    while (ptr1 != NULL&&ptr2 !=NULL)
    {
        if (ptr1->expn == ptr2->expn)
        {
            ptr1->coef = ptr1->coef + ptr2->coef;
            ptr1 = ptr1->next;
            ptr2 = ptr2->next; 
        }
        else if (ptr1->expn < ptr2->expn)
        {
            ptr1 = ptr1->next;
        }
        else if (ptr1->expn > ptr2->expn)
        {
            temp->coef = ptr2->coef;
            temp->expn = ptr2->expn;
            temp->next = ptr1->next;
            ptr1->next = temp;
            ptr2 = ptr2->next;
        }
    }
    return head;
}
int main()
{
    Linklist *L, *H, *result;
    printf("输入多项式一:\n");
    L = creat();
    printf("输入多项式二:\n");
    H = creat();
    printf("输入的数据为:\n");
    visit(L); visit(H);
    result = sum (L, H);
    printf("结果:\n");
    visit(result);
    printf("\n");
    return 0;
}
搜索更多相关主题的帖子: 多项式 color 动态 
2016-10-18 22:06
word123
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:13
帖 子:333
专家分:1622
注 册:2014-4-5
收藏
得分:20 
int n = 0;这个你设置成全局变量干啥???
第一个多项式head指向链表头,第二个多项式,由于n是一个很大的值了,if(n==1)不可能成立,head为空,所以第二个多项式不会显示

int n=0;应该放在下面函数里面,局部变量
Linklist *creat()
{
2016-10-18 22:22
落雪luoxue
Rank: 2
等 级:论坛游民
帖 子:13
专家分:52
注 册:2016-9-29
收藏
得分:0 
回复 2楼 word123
嗯嗯,总算懂明白了
2016-10-18 22:32
快速回复:疑惑,可以帮我分析一下为什么会这样?
数据加载中...
 
   



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

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