前言
一元多项式的加减计算(本文链接)
一元多项式的乘法计算(原文链接)
提示:以下是本篇文章正文内容,下面案例可供参考
一、问题描述
- 能够按照指数升序排列建立并输出多项式;
- 能够完成两个多项式的相加并将结果输入;
二、实验分析
- 实验的第一步应该建立所需的数据类型
typedef struct
{
double coef ; //系数
int expn ; //指数
}num;
typedef struct PNode
{
num data;
struct PNode *next;
}Pnode , *Polyn ;
- 第二步是一元多项式的具体操作实现
1)void Initpolyn( Polyn &Po ) //初始化一个空的一元多项式链表
2)void Printpolyn( Polyn Po ) //输出一元多项式链表
3)void Createpolyn( Polyn &Po ) // 创建一元多项式链表;
4)void Copypolyn( Polyn &Po, Polyn Poa ) //复制Poa一元多项式到Po,Po用于保存Poa中的元素,用于保证后面的Poa还是原本的Poa;
5)Polyn Addpolyn( Polyn Poa , Polyn Pob ) //加法 Poa=Poa+Pob
6)void Subpolyn( Polyn Poa , Polyn Pob ) //减法 Poa=Poa-Pob,先是将Pob中的元素置负,然后应用Polyn Addpolyn( Polyn Poa , Polyn Pob )函数来计算Poa=Poa+(-Pob);
7)void Maxexpn( Polyn Po ,int &n ) //一元多项式的次数(最高阶)
3、 第二步应该构思程序主界面。
1) 主界面:
******************一元多项式计算的操作**************
一元多项式a与b的加减运算 :1 求一元多项式a的次数 : 2
****************************************************
2) 子界面:
******************************************
加法 a+b : 1 减法 a-b : 2
******************************************
三、C++代码架构
#include<iostream>
//#include"danlianbiao.cpp"
#include<stdlib.h>
using namespace std;
typedef struct
{
double coef ; //系数
int expn ; //指数
}num;
typedef struct PNode
{
num data;
struct PNode *next;
}Pnode , *Polyn ;
void Initpolyn( Polyn &Po ) //初始化
{
Po=new Pnode;
Po->next=NULL;
}
void Printpolyn( Polyn Po ) //输出
{
//代码空缺
}
void Createpolyn( Polyn &Po ) // 创建一元多项式链表;
{
int i , s , n ;
Polyn p, r,rre;
cin>>n;
while( n<1 )
{
cout<<"输入数据太小了,再来:";
cin>>n;
} //while
cout<<"输入"<<n<<"对一元多项式的系数double coef和指数int expn:";
for( i=0 ; i<n ;i++ )
{
p=new Pnode;
cin>>p->data.coef;
cin>>p->data.expn;
//cout<<"0 "<<p->data.coef<<p->data.expn<<endl;
if( p->data.coef != 0 )
{
//cout<<"01 "<<p->data.coef<<p->data.expn<<endl;
rre=Po;
r=rre->next;
while( r && ( r->data.expn < p->data.expn )) //按指数由小到大排序
{
rre=r;
r=r->next;
} //while( r && ( r->data.expn < p->data.expn ))
if( r && r->data.expn == p->data.expn )
{
s = r->data.coef + p->data.coef;
//cout<<"1 "<<r->data.coef<<endl;
if( s != 0 )
{
r->data.coef=s;
}
else{ //coef为0,则删除r
rre->next=r->next;
delete r;
r=rre->next;
}
delete p; //系数coef被合并,没有用到p,所以delete
} //if( r && r->data.expn == p->data.expn )
else
{
p->next=rre->next;
rre->next=p;
//cout<<"2 "<<r->data.coef<<endl;
}
//cout<<"3 "<<r->data.coef<<endl;
} //if( p->data.coef != 0 )
else
delete p;
} //for( i=0 ; i<n ;i++ )
}
void Copypolyn( Polyn &Po, Polyn Poa ) //复制Poa一元多项式到Po
{
Polyn p , pa , r ;
Initpolyn( Po );
p=Po;
pa=Poa->next;
while( pa )
{
r=new Pnode;
r->data.coef=pa->data.coef;
r->data.expn=pa->data.expn;
p->next=r;
p=r;
pa=pa->next;
}
p->next=NULL;
}
void Addpolyn( Polyn &Poa , Polyn Pob ) //加法 Poa=Poa+Pob
{
Polyn pa , pb, p1 ,r ;
double s;
p1=Poa;
pa=p1->next;
pb=Pob->next;
while( pa && pb )
{
if( pa->data.expn == pb->data.expn )
{
s=pa->data.coef + pb->data.coef;
if( s != 0 )
{
pa->data.coef=s;
p1->next=pa;
p1=pa;
pa=pa->next;
pb=pb->next;
} //if1
else
{
pa=pa->next;
pb=pb->next;
}
} //if0
else
if( pa->data.expn > pb->data.expn )
{
p1->next=pb;
p1=pb;
pb=pb->next;
}//if2
else
{
p1->next=pa;
p1=pa;
pa=pa->next;
}
} //while
p1->next= pa ? pa:pb;
}
void Subpolyn( Polyn Poa , Polyn Pob ) //减法 Poa=Poa-Pob
{
Polyn pb;
pb=Pob->next;
while( pb )
{
pb->data.coef *= -1;
//cout<<pb->data.coef<<endl;
pb=pb->next;
}
//Printpolyn( Pob );
Addpolyn( Poa , Pob );
cout<<"输出一元多项式 a-b 的结果为: ";
Printpolyn( Poa );
}
void Maxexpn( Polyn Po ,int &n ) //一元多项式的次数(最高阶)
{
Polyn p;
p=Po->next;
n=p->data.expn;
while( p->next )
{
p=p->next;
if( p->data.expn > n )
n=p->data.expn;
}
}
/*
功能:
1.多项式的初始化和创建;
2.多项式的运算功能:+,-
3.一元多项式的查找,插入,删除;
*/
main( )
{
int i=2,n , ma , m;
Polyn Poa,Pob,Po;
cout<<"*****************************一元多项式计算的操作*******************************"<<endl;
cout<<" 一元多项式a与b的加减运算 :1 求一元多项式a的次数 : 2 "<<endl;
cout<<"********************************************************************************"<<endl;
cout<<"输入你中意的操作代号n= ";
cin>>n;
while( n<1 || n>2 )
{
cout<<"错了,错了,再来输一遍,n=";
cin>>n;
}
cout<<endl;
Initpolyn( Poa );
Initpolyn( Pob );
cout<<"输入一元多项式a的项数ma: ";
Createpolyn( Poa );
Copypolyn( Po, Poa );
cout<<"新建立的一元多项式a长这样:a=";
Printpolyn( Poa );
//Printpolyn( Po );
do
{
if( i>4 )
{
cout<<"********************************************************************************"<<endl;
cout<<" 一元多项式a与b的加减运算 :1 求一元多项式a的次数 : 2"<<endl;
cout<<"********************************************************************************"<<endl;
cout<<"输入你中意的操作代号n= ";
cin>>n;
while( n<1 || n>2 )
{
cout<<"错了,错了,再来输一遍,n=";
cin>>n;
} //while
} //if
if( !Pob->next && n==1 )
{
cout<<"输入一元多项式b的项数mb: ";
Createpolyn( Pob ); //1.多项式的初始化和创建;
cout<<"新建立的一元多项式b长这样:b=";
Printpolyn( Pob );
}
switch( n )
{
case 1:
cout<<"**********************************************"<<endl;
cout<<" 加法 a+b : 1 减法 a-b : 2 "<<endl;
cout<<"**********************************************"<<endl;
cout<<"再输入你中意的操作代号m= ";
cin>>m;
while( m<1 || m>2 )
{
cout<<"错了,错了,再来输一遍,m=";
cin>>m;
}
if( m==1 )
{
cout<<"**********************加法 a+b **********************"<<endl;
Copypolyn( Poa, Po );
//cout<<"新建立的一元多项式a长这样:a=";
//Printpolyn( Poa );
//cout<<"新建立的一元多项式b长这样:b=";
//Printpolyn( Pob );
Addpolyn( Poa , Pob );
cout<<"输出一元多项式 a+b 的结果为:a+b=";
Printpolyn( Poa );
} //if
else
{
cout<<"**********************减法 a-b **********************"<<endl;
Copypolyn( Poa, Po );
//cout<<"新建立的一元多项式a长这样:a=";
//Printpolyn( Poa );
//cout<<"新建立的一元多项式b长这样:b=";
//Printpolyn( Pob );
Subpolyn( Poa , Pob );
} //else
break;
case 2:
cout<<"********************求一元多项式a的次数****************"<<endl;
Copypolyn( Poa, Po );
Maxexpn( Poa , ma );
cout<<"一元多项式的次数(最高阶)为: "<<ma<<endl<<endl;
break;
} //switch0
cout<<"如果你还想进行其他操作,就输入一个大于4的数值给i,否则输入一个小于4的数值给i来结束操作吧!! i= ";
cin>>i;
cout<<endl<<endl;
}while( i>4 ); //do
cout<<"你可终于操作完了,拜拜!!!"<<endl<<endl;
}
五、结果及分析
结果如下:
结果分析
- 一元多项式计算是我第一个做的课程实验设计,想的比较多,运行到现在暂时未发现错误,有错误也会有相应的正当反应。