| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2707 人关注过本帖
标题:一元多项式的C程序
只看楼主 加入收藏
jiang107
Rank: 1
来 自:西安
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-4-12
收藏
 问题点数:0 回复次数:8 
一元多项式的C程序
我现在学的是数据结构,老师留个作业是C语言完成一元多项式的相加,麻烦各位能给我一个具体点的思路,如果可以最好给下程序的大概过程,2项相加或3项相加都可以,请注明。
搜索更多相关主题的帖子: 多项式 数据结构 C语言 相加 
2008-05-03 10:20
aiy428
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2008-5-2
收藏
得分:0 
//发个c++的 简陋点
#include <iostream>
#include <list>
#include <cstdlib>
using namespace std;
class Node
{
    public:
        int exp;       //指数
        int coef;      //系数
    Node():exp(0),coef(0){}
};

class Polynomial
{
   
    private:
        list<Node>first_poly;        //第一个多项式
        list<Node>second_poly;       //第二个多项式
        list<Node>result_poly;       //储存结果
        list<Node> MpAdd(list<Node>& t_first_poly,\
                                     list<Node>& t_second_poly);
    public:
        void MultipPoly();           //多项式相乘
        void AddPoly();              //多项式相加
        void InPut();                //输入多项式
        void OutPut();               //输出多项式
};

void  Polynomial::InPut()
{
    Node temp;
    int n;
    cout<<"\t***********多项式的加法和乘法***********"<<endl;
    cout<<"请输入第一个多项式的项数"<<endl;
    cin>>n;
    cout<<"请按照降幂的顺序输入指数"<<endl;
    for(int i=1;i<=n;i++)
    {
        cout<<"输入第"<<i<<"项的系数和指数"<<endl;
        cin>>temp.coef>>temp.exp;
        first_poly.push_back(temp);
    }
    n=0;
    cout<<"请输入第二个多项式的项数"<<endl;
    cin>>n;
    cout<<"请按照降幂的顺序输入指数"<<endl;
    for(int i=1;i<=n;i++)
    {
        cout<<"输入第"<<i<<"项的系数和指数"<<endl;
        cin>>temp.coef>>temp.exp;
        second_poly.push_back(temp);
    }
}   

void Polynomial::OutPut()
{
    list<Node>::iterator iter=result_poly.begin();
    for(;iter!=result_poly.end();)
    {
        Node temp=*iter;
        cout<<temp.coef<<"x^"<<temp.exp;
        if(++iter!=result_poly.end())
        cout<<"+";
    }
}

void Polynomial::AddPoly()
{
    list<Node>::iterator fiter=first_poly.begin();
    list<Node>::iterator siter=second_poly.begin();
    while(fiter!=first_poly.end()&&siter!=second_poly.end())
    {
            Node temp;
            Node ftemp=(Node)*fiter;
            Node stemp=(Node)*siter;
            if(ftemp.exp>stemp.exp)
            {
              result_poly.push_back(ftemp);
              fiter++;      
             }
                  else if(ftemp.exp<stemp.exp)
                  {
                        result_poly.push_back(stemp);
                        siter++;
                    }
                    else {    temp.coef=ftemp.coef+stemp.coef;
                              temp.exp=ftemp.exp+stemp.exp;
                              result_poly.push_back(temp);
                              fiter++;
                              siter++;
                            }
      }
     for(;fiter!=first_poly.end();fiter++)
     {
            result_poly.push_back(*fiter);
      }
     for(;siter!=second_poly.end();siter++)
     {
            result_poly.push_back(*siter);
      }
}
     
void Polynomial::MultipPoly()
{
    list<Node>::iterator fiter=first_poly.begin();
    list<Node>temp_result_poly;
    for(;fiter!=first_poly.end();fiter++)
    {
            list<Node>stemp_result_poly;
            list<Node>::iterator siter=second_poly.begin();
            for(;siter!=second_poly.end();siter++)
            {
                Node temp;
                Node ftemp=(Node)*fiter;
                Node stemp=(Node)*siter;
                temp.coef=ftemp.coef*stemp.coef;
                temp.exp=ftemp.exp+stemp.exp;
                stemp_result_poly.push_back(temp);
            }
            temp_result_poly=MpAdd(stemp_result_poly,temp_result_poly);
            
    }
    result_poly=temp_result_poly;                           
}     

list<Node> Polynomial::MpAdd(list<Node>& t_first_poly,\
                             list<Node>& t_second_poly)
{
    list<Node>::iterator fiter=t_first_poly.begin();
    list<Node>::iterator siter=t_second_poly.begin();
    list<Node>temp_result_poly;
    while(fiter!=t_first_poly.end()&&siter!=t_second_poly.end())
    {
            Node temp;
            Node ftemp=(Node)*fiter;
            Node stemp=(Node)*siter;
            if(ftemp.exp>stemp.exp)
            {
              temp_result_poly.push_back(ftemp);
              fiter++;      
             }
                  else if(ftemp.exp<stemp.exp)
                  {
                        temp_result_poly.push_back(stemp);
                        siter++;
                    }
                    else {    temp.coef=ftemp.coef+stemp.coef;
                              temp.exp=ftemp.exp+stemp.exp;
                              temp_result_poly.push_back(temp);
                              fiter++;
                              siter++;
                            }
      }
     for(;fiter!=t_first_poly.end();fiter++)
     {
            temp_result_poly.push_back(*fiter);
      }
     for(;siter!=t_second_poly.end();siter++)
     {
            temp_result_poly.push_back(*fiter);
      }
      return temp_result_poly;
}
   
                    
int main()
{   
    Polynomial poly_a;
    poly_a.InPut();
    poly_a.AddPoly();
    cout<<"多项式加法的运算结果:"<<endl;
    poly_a.OutPut();
    cout<<endl;
    poly_a.MultipPoly();
    cout<<"多项式乘法的运算结果:"<<endl;
    poly_a.OutPut();
    system("pause");
    return 0;
}
2008-05-03 15:06
aiy428
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2008-5-2
收藏
得分:0 
俺写的, 高手可以 ignore it..
2008-05-03 15:07
jiang107
Rank: 1
来 自:西安
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-4-12
收藏
得分:0 
C++啊 我的C才刚刚入门,怎么会搞懂那个呢~~
2008-05-05 18:15
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
对于C++,建议:
1 接口和实现分离
2 HeadFile Only 类设计
3 重载必要操作符。避免重载副作用操作符。
Over~

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-06 10:58
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
对于stl掌握不错...呵呵..程序还是可以精练的...再进一步就更好了...比如可以随便输入两行无须的表达式..让它自己分析和排序...

学习需要安静。。海盗要重新来过。。
2008-05-06 11:06
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
其实这个很简单啦,广义表式的N元M次方程组的整理和求值才比较好玩呢~~

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-06 11:09
ll431
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2008-4-17
收藏
得分:0 
我那边有个,是用三元数组写的··
www. 编程区
2008-05-06 12:10
wangjie456258
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2008-6-20
收藏
得分:0 
楼主怎么不用C语言写啊,我不太懂C++呢,不过写的不错哦
2008-06-20 02:38
快速回复:一元多项式的C程序
数据加载中...
 
   



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

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