| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2896 人关注过本帖
标题:关于2个多项式相加的问题
只看楼主 加入收藏
清风拂晓
Rank: 8Rank: 8
来 自:火星
等 级:蝙蝠侠
威 望:1
帖 子:356
专家分:889
注 册:2010-8-13
结帖率:96.15%
收藏
已结贴  问题点数:40 回复次数:10 
关于2个多项式相加的问题
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<conio.h>
#define POLYLENTH sizeof(poly)
typedef struct poly
{
    int coeff;                     //多项式因子的系数
    int power;                      //多项式因子的幂
    poly *next;
}poly;
poly *creatpoly()                                           //创建多项式
{
    poly *p=NULL,*pre=NULL,*head=NULL;
    int i_coeff=0,i_power=0;
    char c_case='t';
    pre=(poly *)malloc(POLYLENTH);                     //创建链头
    if(!pre)
    {
       printf("cannot creat the poly");
       getch();
       exit(1);
    }
    head=pre;
    while(c_case!='q')                                         //输入多项式因子的内容
    {  
        printf("请输入多项式因子的系数:\n");
        scanf("%d\n",&i_coeff);
        printf("请输入多项式因子的幂:\n");
        scanf("%d\n",&i_power);
        p=(poly *)malloc(POLYLENTH);
        if(!p)
        {
          printf("cannot creat the poly");
          getch();
          exit(1);
        }
        p->coeff=i_coeff;
        p->power=i_power;
        pre->next=p;
        pre=p;
        printf("是否要继续输入该多项式:否按q,是按其他任意键。");
        scanf("%c\n",&c_case);
    }
    p->next=NULL;
    return head;
}
poly *del_poly(poly *p_a,poly *p_b,poly *factor_a,poly *pre_a)
{
    if(p_a==factor_a)
    {
        factor_a=p_a->next;
    }
    else
    {
        pre_a->next=p_a->next;
    }
    return factor_a;
}
void trail_insert(poly *p_a,poly *p_b)
{
    p_b=p_a->next;
    p_a->next=p_b;
}
void head_insert(poly *pre_a,poly *p_a,poly *p_b)
{
    p_b->next=p_a;
    pre_a->next=p_b;
}
poly *poly_add(poly *factor_a,poly *factor_b)                             //两个多项式相加//
{
    poly *p=NULL;
    poly *p_a=factor_a;
    poly *p_b=factor_b;
    poly *pre_a=NULL;                                         //用来存储当前操作点的前驱
    poly *t_b=NULL;                                      //用来在进行尾插法是暂时放下一个p_b的中间变量
    while(p_a)                                              //第一个多项式的各个因子没处理完时//
    {   
        if(p_a->power==p_b->power)
        {
            if(p_a->coeff=-p_b->coeff)
            {
                factor_a=del_poly(p_a,p_b,factor_a,pre_a);
                p_a=factor_a;
            }
            else
            {
                p_a->coeff+=p_b->coeff;
                p_a=p_a->next;
                if(p_a!=factor_a)                           
                {
                   pre_a=p_a;
                }
            }
            p_b=p_b->next;       
        }
        else if(p_a->power<p_b->power)
        {  
            t_b=p_b->next;
            trail_insert(p_a,p_b);                       //尾插法
            p_b=t_b;
            if(p_a!=factor_a)                           
            {
              pre_a=p_a;
            }
            p_a=p_b->next;
        }
        else
        {
            t_b=p_b->next;
            if(p_a!=factor_a)                           
            {
              pre_a=p_a;
            }
            head_insert(pre_a,p_a,p_b);                             //头插法
            p_b=t_b;
            if(p_a!=factor_a)                           
            {
              pre_a=p_a;
            }
            p_a=p_a->next;
        }
    }
    if(p_b)                                           //第一个多项式各个因子处理结束时且第二个多项式的各个因子没处理完时//
    {
        p_a->next=p_b;
    }
    return factor_a;
}
void output_poly(poly *p)
{
    printf("得到的多项式:\n");
    while(p)
    {
        printf("%dX^%d+",p->coeff,p->power);
        p=p->next;
    }
}           
int main()
{
    poly *factor_a=NULL,*factor_b=NULL;                        //定义两个多项式因子
    factor_a=creatpoly();                           //创建第一个多项式
    factor_b=creatpoly();                           //创建第二个多项式
    factor_a=poly_add(factor_a,factor_b);           //两个多项式进行相加
    output_poly(factor_a);                           //输出结果
    return 0;
}
运行是只能输入多项式第一个因子之后没等我输入他就直接要判断时候继续了 是怎么回事?
图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 清风拂晓 于 2010-11-23 23:23 编辑 ]
搜索更多相关主题的帖子: 多项式 
2010-11-22 17:48
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:30 
output_poly  前面的函数少了一个 }  结尾 本地函数定义非法 ,你定义时写错了地方
2010-11-22 17:51
xiaomarn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:348
专家分:2026
注 册:2009-3-18
收藏
得分:10 
        }
        if(p_b)                                           //第一个多项式各个因子处理结束时且第二个多项式的各个因子没处理完时//
        {
            p_a->next=p_b;
        }
    }            //在这加个}
    return factor_a;
}
函数poly_add中
楼上正解
2010-11-22 18:38
清风拂晓
Rank: 8Rank: 8
来 自:火星
等 级:蝙蝠侠
威 望:1
帖 子:356
专家分:889
注 册:2010-8-13
收藏
得分:0 
谢啦 太大意了

清风拂暮(木)
2010-11-22 19:01
freedgun
Rank: 5Rank: 5
等 级:职业侠客
帖 子:147
专家分:302
注 册:2010-11-11
收藏
得分:0 
很高深  学习下

有什么样的付出,就有什么样的收获!!
2010-11-22 19:21
fightingsss
Rank: 6Rank: 6
等 级:侠之大者
帖 子:97
专家分:471
注 册:2010-11-12
收藏
得分:0 
高手!
2010-11-23 09:08
清风拂晓
Rank: 8Rank: 8
来 自:火星
等 级:蝙蝠侠
威 望:1
帖 子:356
专家分:889
注 册:2010-8-13
收藏
得分:0 
有出现问题了求助

清风拂暮(木)
2010-11-23 23:25
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:0 
scanf("%c\n",&c_case);
前加个fflush(stdin);
你scanf里加个\n是什么意思?
2010-11-24 09:10
清风拂晓
Rank: 8Rank: 8
来 自:火星
等 级:蝙蝠侠
威 望:1
帖 子:356
专家分:889
注 册:2010-8-13
收藏
得分:0 
..对了那个换行符只能对输出有效 看来C语言要再去看下了

清风拂暮(木)
2010-11-24 09:40
喵一样的猫神
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2016-1-13
收藏
得分:0 
请问一下你的这个程序运行后怎么用
2016-01-13 13:23
快速回复:关于2个多项式相加的问题
数据加载中...
 
   



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

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