一元多项式的各种运算实现(c++,c)

合集下载

数据结构课程设计-一元多项式的加法、减法、乘法的实现

数据结构课程设计-一元多项式的加法、减法、乘法的实现

一、设计题目一元多项式的加法、减法、乘法的实现。

二、主要内容设有一元多项式A m(x)和B n(x).A m(x)=A0+A1x1+A2x2+A3x3+… +A m x mB n(x)=B0+B1x1+B2x2+B3x3+… +B n x n请实现求M(x)= A m(x)+B n(x)、M(x)= A m(x)-B n(x)和M(x)= A m(x)×B n(x)。

要求:1) 首先判定多项式是否稀疏2) 采用动态存储结构实现;3) 结果M(x)中无重复阶项和无零系数项;4) 要求输出结果的升幂和降幂两种排列情况三、具体要求及应提交的材料1.每个同学以自己的学号和姓名建一个文件夹,如:“312009*********张三”。

里面应包括:学生按照课程设计的具体要求所开发的所有源程序(应该放到一个文件夹中)、任务书和课程设计说明书的电子文档。

2.打印的课程设计说明书(注意:在封面后夹入打印的“任务书”以后再装订)。

四、主要技术路线提示为把多个小功能结合成一个完整的小软件,需使用“菜单设计”技术(可以是控制台方式下的命令行形式,若能做成图形方式则更好)。

五、进度安排共计两周时间,建议进度安排如下:选题,应该在上机实验之前完成需求分析、概要设计可分配4学时完成详细设计可分配4学时调试和分析可分配10学时。

2学时的机动,可用于答辩及按教师要求修改课程设计说明书。

注:只用课内上机时间一般不能完成设计任务,所以需要学生自行安排时间做补充。

六、推荐参考资料(不少于3篇)[1]苏仕华等编著,数据结构课程设计,机械工业出版社,2007[2]严蔚敏等编著,数据结构(C语言版),清华大学出版社,2003[3]严蔚敏等编著,数据结构题集(C语言版),清华大学出版社,2003指导教师签名日期年月日系主任审核日期年月日摘要分析了matlab,mathmatic,maple等数学软件对一元多项式的计算过程,步骤后。

由于这些软件比较大功能齐全,但是实用性不强。

c语言一元多项式的加法,减法,乘法的实现

c语言一元多项式的加法,减法,乘法的实现

c语言一元多项式的加法,减法,乘法的实现一元多项式是代数学中的重要概念,它由各项式的系数和幂次构成。

在C语言中,我们可以通过定义结构体来表示一元多项式,并实现加法、减法和乘法运算。

我们定义一个结构体来表示一元多项式。

结构体中包含两个成员变量,一个是整数类型的系数coeff,另一个是整数类型的幂次exp。

```ctypedef struct{int coeff; // 系数int exp; // 幂次} Polynomial;```接下来,我们可以实现一元多项式的加法运算。

加法运算的规则是将两个多项式中幂次相同的项的系数相加,若幂次不同的项,则直接将其添加到结果多项式中。

具体实现如下:```cPolynomial addPolynomial(Polynomial poly1, Polynomial poly2){Polynomial result;result.coeff = poly1.coeff + poly2.coeff;result.exp = poly1.exp;return result;}```然后,我们可以实现一元多项式的减法运算。

减法运算的规则是将被减多项式的各项的系数取相反数,然后再与减数多项式相加。

具体实现如下:```cPolynomial subtractPolynomial(Polynomial poly1, Polynomial poly2){Polynomial result;result.coeff = poly1.coeff - poly2.coeff;result.exp = poly1.exp;return result;}```我们可以实现一元多项式的乘法运算。

乘法运算的规则是将两个多项式的每一项相乘,然后将结果相加。

具体实现如下:```cPolynomial multiplyPolynomial(Polynomial poly1, Polynomialpoly2){Polynomial result;result.coeff = poly1.coeff * poly2.coeff;result.exp = poly1.exp + poly2.exp;return result;}```通过上述的实现,我们可以对一元多项式进行加法、减法和乘法运算。

数据结构C语言实现之一元多项式的表示及相加(2)

数据结构C语言实现之一元多项式的表示及相加(2)
以单链表作为存储结构并且和多项式中的结点无需另生成则可看成是将多项式b加到多项式a中由此得到下列运算规则设pq分别指向多项式ab的一项比较结点的指数项若pexpqexp则结点p所指的结点应是和多项式中的一项令指针p后移
数据结构 C 语言实现之一元多项式的表示及相加(2)
一元多项式的表示及相加 对于符号多项式的各种操作,实际上都可以利用线性表来处理。比较典型的是关于一元多项式的处理。在
} } e>next; /*将 q 结点加入到和多项式中*/ q =q->next; } }
} if(p!=NULL)/*多项式 A 中还有剩余,则将剩余的结点加入到和多项式中*/
pre->next=p;
else /*否则,将 B 中的结点加入到和多项式中*/ pre->next=q; }
算法 2.24 多项式相加 假设 A 多项式有 M 项,B 多项式有 N 项,则上述算法的时间复杂度为 O(M+N) 图 2.20 所示为图 2.19 中两个多项式的和,其中孤立的结点代表被释放的结点。
通过对多项式加法的介绍,我们可以将其推广到实现两个多项式的相乘,因为乘法可以分解为一系列的加 法运算。
“中的结点无需另生成,则可看成是将多项式 B 加到多项式 A 中,由此得到下列运算规则(设 p、q 分别 指向多项式 A,B 的一项,比较结点的指数项)
若 p->exp< q->exp,则结点 p 所指的结点应 是“和多项式”中的一项,令指针 p 后移;若 p>exp>q->exp,则结点 q 所指的结点应是“和多项式”中的一项,将结点 q 插入在结点 p 之前, 且令指针 q 在原来的链表上后移;
(1)用单链表存储多项式的结点结构如下: struct Polynode { int coef; int exp; Polynode *next; } Polynode , * Polylist;

一元多项式的各种运算实现(c++,c)

一元多项式的各种运算实现(c++,c)
{
float a=1.0;
for(int i=1;i<=k;i++)
a=a*1e-1;
return a;
}
//赋值,参数是指向头结点的指针
void fuzhi(node *&toup)
{
float fumi(int k);
void init(node *&toup);
if(!toup) init(toup);
if(toup) destory(toup);//假如有头结点或元素节点,销毁结点
toup=(node*)malloc(sizeof(node));
if(!toup){cout<<"溢出错误"<<endl;exit(0ext=NULL;
}
//销毁全部,包括头结点
cout<<"*******************************************************************************"<<endl;
cout<<"举例:3 x3 9.3x-3 -x....."<<endl;
}
//求未知数指数是-k时的值
float fumi(int k)
while(p)
{
if(p->data ==0)
{
if(!pr)
{
tem=p;
toup->next =p->next ;
p=p->next ;
toup->length--;
free(tem);
tem=NULL;

一元符号多项式的四则运算讲解

一元符号多项式的四则运算讲解

C++开放项目实验报告题目:一元符号多项式四则运算姓名:指导老师:学号:班级:一、内容总结1.功能要求用所学C++知识编程实现两个一元符号多项式的加法,减法和乘法运算。

2.算法概要设计①结点插入函数void Insert (PNode *temp);②多项式的创建函数void CreatPoly();③赋值运算符的重载Polynomail& operator = (const Polynomail &p1);④一元符号多项式的加法Polynomail& operator + (const Polynomail &p);⑤一元符号多项式的减法Polynomail& operator - (Polynomail &p);⑥一元符号多项式的乘法Polynomail& operator * (const Polynomail &p);3.应用技巧①利用Insert()插入函数规范多项式的输入问题,进行同类项的合并和不同类项间的排序问题,使得到有序的链表,方便后续的运算②对赋值、加、减和乘运算符进行重载,赋予其新的意义,进行多项式间的四则运算。

③发现函数间联系,可以减少代码的长度。

巧妙利用Insert()函数和加运算符重载函数,方便乘法和减法等代码编写。

二、实验成果1.输入要求按提示一次输入多项式各项的系数和指数,建立多项式。

如下所示: 系数,指数:1,2系数,指数:3,4系数,指数:0 4(以输入系数为零的项结束创建)创建结果为:1x^2+3x^4进行加法运算2根据自己的需要选择输入功能序号进行运算,如选择数字2.输出样例总体上各项是按照输入的方法进行输出,如果指数为零只输出系数,如果系数为零,那么该项不输出,如果系数为负数,那么两项间“+”变“-”。

以上述输入为例创建的结果为:1x^2+3x^4。

如果另一个多项式为:-1-2x^6,那么加法运算后的结果为:-1+1x^2+3x^4-2x^6:主要代码展示 3.//**** c++开放实验项目****//一元符号多项式的四则运算#include <iostream>using namespace std;struct PNode{PNode(double c=0,int e=-1){ coef=c; expn=e; next=NULL;}double coef;int expn;PNode *next;};class Polynomial{public:Polynomial(){poly=new PNode;}Polynomial(Polynomial &p);void Print();~Polynomial();void Insert (PNode *temp);void CreatPoly();Polynomial& operator = (const Polynomial &p);Polynomial& operator + (const Polynomial &p);Polynomial& operator - (Polynomial &p);Polynomial& operator * (const Polynomial &p);private:PNode *poly;};//析构函数Polynomial::~Polynomial(){PNode *pt=poly->next;while (pt){poly->next=pt->next;delete pt;pt=poly->next;}delete poly;poly=NULL;}//赋值运算符的重载Polynomial& Polynomial::operator = (const Polynomial &p){ this->~Polynomial();poly=new PNode;PNode *pt=poly,*qt=p.poly->next;while(qt){PNode *s=new PNode(qt->coef,qt->expn);pt->next=s;pt=s;qt=qt->next;}return *this;}//复制构造函数Polynomial::Polynomial(Polynomial &p){poly=new PNode;*this=p;}//遍历void Polynomial::Print(){if(poly->next==NULL){cout<<empty!\n;return;}PNode *pt=poly->next;if(pt){if(pt->expn==0){cout<<pt->coef;}else {潣瑵?瑰?潣晥?硜属?瑰?硥湰※}pt=pt->next;}while (pt){if(pt->expn==0){cout<<pt->coef;}else {if(pt->coef<0){潣瑵?瑰?潣晥?硜属?瑰?硥湰※}else {潣瑵???瀼?挾敯?尼幸?瀼?放灸?}}pt=pt->next;}cout<<endl;}//结点插入函数void Polynomial::Insert (PNode *temp){ if(poly->next==NULL){poly->next=temp;return;}PNode *pt=poly;PNode *qt=pt->next;while(qt&&qt->expn<temp->expn){ pt=qt;qt=pt->next;}if(qt==NULL||qt->expn>temp->expn){ temp->next=qt;pt->next=temp;}else {qt->coef+=temp->coef;if(qt->coef==0){pt->next=qt->next;delete qt;}}}//多项式的构建函数void Polynomial::CreatPoly(){double c;int e;潣瑵?系数,指数:;cin>>c>>e;while (c){PNode *p=new PNode(c,e);Insert(p);潣瑵?系数,指数:;cin>>c>>e;}}//多项式的加法Polynomial& Polynomial::operator + (const Polynomial &q){ Polynomial *PC=new Polynomial;PNode *ta=poly->next,*tb=q.poly->next, *tc=PC->poly; while(ta&&tb){int a=ta->expn;int b=tb->expn;int t=a>b?1:(b>a?-1:0);switch(t){case -1:{PNode *s=new PNode(ta->coef,ta->expn);tc->next=s;tc=s;ta=ta->next;break;}case 0:{double sum=ta->coef+tb->coef;if(sum==0){ta=ta->next;tb=tb->next;}else {PNode *s=new PNode(sum,ta->expn);tc->next=s;tc=s;ta=ta->next;tb=tb->next;}break;}case 1:{PNode *s=new PNode(tb->coef,tb->expn);tc->next=s;tc=tc->next;tb=tb->next;break;}} //switch} //whilewhile (ta){PNode *s=new PNode(ta->coef,ta->expn);tc->next=s;tc=s;ta=ta->next;}while (tb){PNode *s=new PNode(tb->coef,tb->expn);tc->next=s;tc=s;tb=tb->next;}return *PC;}//多项式的减法Polynomial& Polynomial::operator - (Polynomial &p){//复制取反相加Polynomial P(p),*PC=new Polynomial;PNode *pt=P.poly->next;while(pt){pt->coef=-pt->coef;pt=pt->next;}*PC=*this+P;return *PC;}//多项式的乘法Polynomial& Polynomial:: operator * (const Polynomial &p){ Polynomial *PC=new Polynomial;PNode *pt=poly->next,*qt;for(;pt;pt=pt->next){for(qt=p.poly->next;qt;qt=qt->next){PNode *s=new PNode(pt->coef*qt->coef,pt->expn+qt->expn);PC->Insert(s);}}return *PC;}//主函数int main(){Polynomial PA,PB,PC;int index;cout<< //------一元符号多项式的表示及运算------// <<endl;潣瑵?本函数的功能列表:<<endl;cout<<.多项式的加法:<<endl;cout<<.多项式的减法:<<endl;cout<<.多项式的乘法:<<endl;cout<<.选择重建多项式:<<endl;cout<<_x0005_.结束运算\n<<endl;潣瑵?依次输入PA各项系数和指数(以输入系数0项结束),建立多项式:<<endl;PA.CreatPoly();PA.Print();潣瑵?依次输入PB各项系数和指数(以输入系数0项结束),建立多项式:<<endl;PB.CreatPoly();PB.Print();cout<<\请输入功能序号进行多项式的运算:;cin>>index;while(index){switch(index){case 1:{PC=PA+PB;cout<<PC=PA+PB:;PC.Print();break;}case 2:{PC=PA-PB;cout<<PC=PA-PB:;PC.Print();break;}case 3:{PC=PA*PB;cout<<PC=PA*PB:;PC.Print();break;}case 4:{int flag;潣瑵?输入0修改多项式PA,其他数字保留多项式PA:;cin>>flag;if(!flag){PA.CreatPoly();PA.Print();}潣瑵?输入0修改多项式PB,其他数字保留多项式PB:;cin>>flag;if(!flag){PB.CreatPoly();PB.Print();}break;}case 5:{潣瑵?运算结束<<endl;return 0;}}//switchcout<<\是否需要继续,请再次输入选择:;cin>>index;}//whilereturn 0;}4.项目结果展示实践体会三、在此次的C++开放项目试验中,我承担了用C++实现一元符号多项式的四则运算,将所学C++知识运用实战编程中去,并及时进行知识的查缺补漏,帮助我更好的掌握了C++这门语言。

数据结构课程设计--一元多项式计算问题(C语言)

数据结构课程设计--一元多项式计算问题(C语言)

长沙学院课程设计说明书题目一元多项式计算问题系(部)计算机科学与技术系专业(班级)12软件4班姓名谢仲蛟学号2012022411指导教师邱建雄起止日期2013.12.9~2013.12.20课程设计任务书课程名称:数据结构与算法设计题目:一元多项式计算问题已知技术参数和设计要求:问题描述:设计一个稀疏多项式简单计算器基本要求:(1)输入并分别建立多项式A和B(2)输入输出多项式,输出形式为整数序列:n,c1,e1,c2,e2……,其中n是多项式的项数,ci和ei 是第i项的系数和指数,序列按指数降序排列(3)完成两个多项式的相加、相减,并将结果输出;测试数据:(1) A+B A= 3x14-8x8+6x2+2 B=2x10+4x8+-6x2(2) A-B A=11x14+3x10+2x8+10x6+5 B=2x14+3x8+5x6+7(3) A+B A=x3+x1 B=-x3-x1(4) A+B A=0 B=x7+x5+x3+x1(5) A-B A=100x100+50x50+20x20+x B=10x100+10x50+10x20+x选作内容:(1).多项式在x=1时的运算结果(2)求多项式A和B的乘积设计工作量:40课时工作计划:指导教师签名:日期:教研室主任签名:日期:系主任签名:日期:长沙学院课程设计鉴定表摘要本次课程设计是在《数据结构》基础上设计以C语言来实现的,它的目的是帮助同学更深入的了解《数据结构》这门课程并熟练运用C语言,使同学达到熟练掌握的程度。

课程设计一个稀疏多项式简单计算器。

其基本要求有六:其一,输入建立两个多项式;其二,输出多项式,输出形式为整数序列:n,c1,e1,c2,e2……,其中n是多项式的项数,ci和ei是第i项的系数和指数,序列按指数的降序序列排列;其三,多项式排序,多项式按指数的降序序列排列;其四,多项式相加,指数相同系数相加,指数不同则把此项加进去;其五,多项式相减,指数相同系数相加,指数不同则把此项取反再加进去;其六,返回多项式的项数。

顺序链式一元多项式加法、减法、乘法运算的实现

顺序链式一元多项式加法、减法、乘法运算的实现

1.1设计内容及要求1)设计内容(1)使用顺序存储结构实现多项式加、减、乘运算。

例如:10321058)(2456+-+-+=x x x x x x f ,x x x x x x g +--+=23451020107)(求和结果:102220128)()(2356++-+=+x x x x x g x f(2)使用链式存储结构实现多项式加、减、乘运算,10305100)(1050100+-+=x x x x f ,x x x x x x g 320405150)(10205090+++-=求和结果:1031040150100)()(102090100++-++=+x x x x x x g x f2)设计要求(1)用C 语言编程实现上述实验内容中的结构定义和算法。

(2)要有main()函数,并且在main()函数中使用检测数据调用上述算法。

(3)用switch 语句设计如下选择式菜单。

***************数据结构综合性实验***********************一、多项式的加法、减法、乘法运算***************** 1.多项式创建 ***************** 2.多项式相加 ***************** 3.多项式相减 ***************** 4.多项式相乘 ***************** 5.清空多项式 ***************** 0.退出系统 ***************** 请选择(0—5) ************************************************************请选择(0-5):1.2数据结构设计根据下面给出的存储结构定义:#define MAXSIZE 20 //定义线性表最大容量//定义多项式项数据类型typedef struct{float coef; //系数int expn; //指数}term,elemType;typedef struct{term terms[MAXSIZE]; //线性表中数组元素int last; //指向线性表中最后一个元素位置}SeqList;typedef SeqList polynomial;1.3基本操作函数说明polynomial*Init_Polynomial();//初始化空的多项式int PloynStatus(polynomial*p)//判断多项式的状态int Location_Element(polynomial*p,term x)在多项式p中查找与x项指数相同的项是否存在int Insert_ElementByOrder(polynomial*p,term x)//在多项式p中插入一个指数项xint CreatePolyn(polynomial*P,int m)//输入m项系数和指数,建立表示一元多项式的有序表p char compare(term term1,term term2)//比较指数项term1和指数项term2polynomial*addPloyn(polynomial*p1,polynomial*p2)//将多项式p1和多项式p2相加,生成一个新的多项式polynomial*subStractPloyn(polynomial*p1,polynomial*p2) //多项式p1和多项式p2相减,生成一个新的多项式polynomial*mulitPloyn(polynomial*p1,polynomial*p2)//多项式p1和多项式p2相乘,生成一个新的多项式void printPloyn(polynomial*p)//输出在顺序存储结构的多项式p1.4程序源代码#include<stdlib.h>#include<stdio.h>#include<iostream.h>#define NULL 0#define MAXSIZE 20typedef struct{float coef;int expn;}term,elemType;typedef struct{term terms[MAXSIZE];int last;}SeqList;typedef SeqList polynomial; void printPloyn(polynomial*p);int PloynStatus(polynomial*p) {if(p==NULL){return -1;}else if(p->last==-1){return 0;}else{return 1;}}polynomial*Init_Polynomial() {polynomial*P;P=new polynomial;if(P!=NULL){P->last=-1;return P;}else{return NULL;}}void Reset_Polynomial(polynomial*p){if(PloynStatus(p)==1){p->last=-1;}}int Location_Element(polynomial*p,term x){int i=0;if(PloynStatus(p)==-1)return 0;while(i<=p->last && p->terms[i].expn!=x.expn) {i++;}if(i>p->last){return 0;}else{return 1;}}int Insert_ElementByOrder(polynomial*p,term x) {int j;if(PloynStatus(p)==-1)return 0;if(p->last==MAXSIZE-1){cout<<"The polym is full!"<<endl;return 0;}j=p->last;while(p->terms[j].expn<x.expn && j>=0){p->terms[j+1]=p->terms[j];j--;}p->terms[j+1]=x;p->last++;return 1;}int CreatePolyn(polynomial*P,int m){float coef;int expn;term x;if(PloynStatus(P)==-1)return 0;if(m>MAXSIZE){printf("顺序表溢出\n");return 0;}else{printf("请依次输入%d对系数和指数...\n",m);for(int i=0;i<m;i++)scanf("%f%d",&coef,&expn);x.coef=coef;x.expn=expn;if(!Location_Element(P,x)){Insert_ElementByOrder(P,x);}}}return 1;}char compare(term term1,term term2){if(term1.expn>term2.expn){return'>';}else if(term1.expn<term2.expn){return'<';}{return'=';}}polynomial*addPloyn(polynomial*p1,polynomial*p2) {int i,j,k;i=0;j=0;k=0;if((PloynStatus(p1)==-1)||(PloynStatus(p2)==-1)) {return NULL;}polynomial*p3=Init_Polynomial();while(i<=p1->last && j<=p2->last){switch(compare(p1->terms[i],p2->terms[j])){case'>':p3->terms[k++]=p1->terms[i++];p3->last++;break;case'<':p3->terms[k++]=p2->terms[j++];p3->last++;break;case'=':if(p1->terms[i].coef+p2->terms[j].coef!=0){p3->terms[k].coef=p1->terms[i].coef+p2->terms[j].coef;p3->terms[k].expn=p1->terms[i].expn;k++;p3->last++;}i++;j++;}}while(i<=p1->last){p3->terms[k++]=p1->terms[i++];p3->last++;}return p3;}polynomial*subStractPloyn(polynomial*p1,polynomial*p2) {int i;i=0;if((PloynStatus(p1)!=1)||(PloynStatus(p2)!=1)){return NULL;}polynomial*p3=Init_Polynomial();p3->last=p2->last;for(i=0;i<=p2->last;i++){p3->terms[i].coef=-p2->terms[i].coef;p3->terms[i].expn=p2->terms[i].expn;}p3=addPloyn(p1,p3);return p3;}polynomial*mulitPloyn(polynomial*p1,polynomial*p2){int i;int j;int k;i=0;if((PloynStatus(p1)!=1)||(PloynStatus(p2)!=1)){return NULL;}polynomial*p3=Init_Polynomial();polynomial**p=new polynomial*[p2->last+1];for(i=0;i<=p2->last;i++){for(k=0;k<=p2->last;k++){p[k]=Init_Polynomial();p[k]->last=p1->last;for(j=0;j<=p1->last;j++){p[k]->terms[j].coef=p1->terms[j].coef*p2->terms[k].coef;p[k]->terms[j].expn=p1->terms[j].expn+p2->terms[k].expn;}p3=addPloyn(p3,p[k]);}}return p3;}void printPloyn(polynomial*p){int i;for(i=0;i<=p->last;i++){if(p->terms[i].coef>0 && i>0)cout<<"+"<<p->terms[i].coef;elsecout<<p->terms[i].coef;cout<<"x^"<<p->terms[i].expn;}cout<<endl;}void menu(){cout<<"\t\t*******数据结构综合性实验*********"<<endl;cout<<"\t\t***一、多项式的加、减、乘法运算***"<<endl;cout<<"\t\t******* 1.多项式创建 *********"<<endl;cout<<"\t\t******* 2.多项式相加 *********"<<endl;cout<<"\t\t******* 3.多项式相减 *********"<<endl;cout<<"\t\t******* 4.多项式相乘 *********"<<endl;cout<<"\t\t******* 5.清空多项式 *********"<<endl;cout<<"\t\t******* 0.退出系统 *********"<<endl;cout<<"\t\t****** 请选择(0-5) ********"<<endl;cout<<"\t\t***********************************"<<endl; }void main(){int sel;polynomial*p1=NULL;polynomial*p2=NULL;polynomial*p3=NULL;while(1){menu();cout<<"\t\t*请选择(0-5):";cin>>sel;switch(sel){case 1:p1=Init_Polynomial();p2=Init_Polynomial();int m;printf("请输入第一个多项式的项数:\n"); scanf("%d",&m);CreatePolyn(p1,m);printf("第一个多项式的表达式为p1="); printPloyn(p1);printf("请输入第二个多项式的项数:\n"); scanf("%d",&m);CreatePolyn(p2,m);printf("第二个多项式的表达式为p2="); printPloyn(p2);break;case 2:printf("p1+p2=");if((p3=subStractPloyn(p1,p2))!=NULL) printPloyn(p3);break;case 3:printf("\np1-p2=");if((p3=subStractPloyn(p1,p2))!=NULL)printPloyn(p3);break;case 4:printf("\np1*p2=");if((p3=mulitPloyn(p1,p2))!=NULL)printPloyn(p3);case 5:Reset_Polynomial(p1);Reset_Polynomial(p2);Reset_Polynomial(p3);break;case 0:return;}}return;}1.5程序执行结果。

数据结构一元多项式的运算

数据结构一元多项式的运算

数据结构一元多项式的运算数据结构一元多项式的运算1、引言1.1 研究背景1.2 研究目的2、一元多项式的定义2.1 一元多项式的概念2.2 一元多项式的表示方法2.3 一元多项式的次数和系数2.4 一元多项式的零多项式和常数项2.5 一元多项式的加法运算2.6 一元多项式的减法运算2.7 一元多项式的乘法运算3、一元多项式的特殊运算3.1 一元多项式的乘方运算3.2 一元多项式的取余运算3.3 一元多项式的求导运算3.4 一元多项式的积分运算3.5 一元多项式的复合运算4、一元多项式的应用4.1 一元多项式在数学中的应用4.2 一元多项式在计算机科学中的应用4.3 一元多项式在工程领域中的应用5、实例分析5.1 实例一:一元多项式的相加减5.2 实例二:一元多项式的乘法运算5.3 实例三:一元多项式的特殊运算应用6、结论附件:附件一:一元多项式的代码实现示例法律名词及注释:1.一元多项式: 指仅有一个未知数的多项式。

2.多项式的次数: 多项式中各项最高次幂的次数。

3.多项式的系数: 多项式中各项中未知数的系数。

4.零多项式: 所有系数均为0的多项式。

5.常数项: 多项式中次数为0的项,即常数项。

6.多项式的加法运算: 将两个多项式相同次项的系数相加。

7.多项式的减法运算: 将两个多项式相同次项的系数相减。

8.多项式的乘法运算: 将两个多项式的各项相乘,并根据指数相加合并同类项。

9.多项式的乘方运算: 将一个多项式自乘n次。

10.多项式的取余运算: 两个多项式相除后的余数部分。

11.多项式的求导运算: 对多项式中的每一项进行求导操作。

12.多项式的积分运算: 对多项式中的每一项进行积分操作。

13.多项式的复合运算: 将一个多项式代入另一个多项式中进行运算。

用C语言实现一元多项式的加减法计算课程设计

用C语言实现一元多项式的加减法计算课程设计

用C语言实现一元多项式的加减法计算课程设计武汉理工大学华夏学院课程设计报告书课程名称: 数据结构与算法分析题目: 用C语言实现一元多项式的加减法计算系名: 信息工程系专业班级:姓名:学号:指导教师:7>2014年 1 月 3 日武汉理工大学华夏学院信息工程系课程设计任务书课程名称: 数据结构与算法分析指导教师班级名称: 开课系、教研室:一、课程设计目的与任务《数据结构》课程设计是为训练学生的数据组织能力和提高程序设计能力而设置的增强实践能力的课程。

目的:学习数据结构课程,旨在使学生学会分析研究数据对象的特性,学会数据的组织方法,以便选择合适的数据的逻辑结构和存储结构以及相应操作,把现实世界中的问题转换为计算机内部的表示和处理,这就是一个良好的程序设计技能训练的过程。

提高学生的程序设计能力、掌握基本知识、基本技能,提高算法设计质量与程序设计素质的培养就是本门课程的课程设计的目的。

任务:根据题目要求,完成算法设计与程序实现,并按规定写出课程设计报告。

二、课程设计的内容与基本要求设计题目:用C语言实现一元多项式的加减法计算〔问题描述〕输入并建立两个多项式并输出多项式设计一个程序:对两个多项式进行加、减法运算,建立一个新多项式并输出。

〔实现提示〕:选择单链表存储多项式具体要完成的任务是:A. 编制完成上述问题的C语言程序、进行程序调试并能得出正确的运行结果。

B. 写出规范的课程设计报告书;三、课程设计步骤及时间进度和场地安排时间:本课程设计安排在第18周地点:现代教育中心具体时间安排如下:第一天:布置题目,确定任务、查找相关资料第二天~第四天:功能分析,编写程序,调试程序、运行系统;第五天上午:撰写设计报告;第五天下午:程序验收、答辩。

四、课程设计考核及评分标准课程设计考核将综合考虑学生的系统设计方案、运行结果、课程设计报告书的质量、态度、考勤、答辩情况等各因素。

具体评分标准如下:(1)设计方案正确,具有可行性、创新性; 30分(2)系统开发效果较好;20分(3)设计报告规范、课程设计报告质量高; 20分(4)课程设计答辩时,问题回答正确;20分(5)态度认真、刻苦钻研、遵守纪律;10分按上述五项分别记分后求和,总分按五级制记载最后成绩。

(完整word版)一元多项式计算器报告(C语言编程)

(完整word版)一元多项式计算器报告(C语言编程)

题目:编制一个一元多项式基本运算的程序姓名: 学号:PB110130一、需求分析1.在通常的应用中,多项式的次数可能很高且变化很大,使得顺序存储结构的最大长度很难确定。

由稀疏多项式的特点,故采用链式存储结构,可以不会带来浪费存储空间。

2.程序中单链表存储,根据链表的指数域,对链表进行升序排序,可给运算带来方便。

3.程序设计是在VC6.0环境下设计的的。

4.程序执行的命令为(程序主界面):二、概要设计抽象数据类型一元多项式的定义如下:1.LNode *MakeNode(double coef, int exp) 通过传入指数和系数创建一个节点,返回该节点的地址。

2.void InitList(LinkList &L)初始化,带头节点3.void PrintPolyn (LinkList L) 传入链表的指针,打印该链表4.LinkList CreatPolyn(void)//输入m项的系数和指数,建立表示一元多项式的有序链表L5.double SumPolyn(LinkList L,double x) 传入链表的指针及x值,求多项式的值。

6.void DestroyPolyn (LinkList &L) 销毁多项式,去掉头节点7.void ClearPolyn (LinkList &L) 清空多项式,保留节点实验报告8.void CopyPolyn (LinkList La,LinkList &Lb) 将La位置的多项式复制到Lb位置9.void AddPolyn(LinkList L,LinkList J ,LinkList &K) 将a和b多项式相加存到c10.void MultiplyPolyn(LinkList L,LinkList J,LinkList &K)将a和b相减存到c11. void MultiplyPolyn(LinkList L,LinkList J,LinkList &K)将a和b多项式相乘存到c12。

一元多项式加法、减法、乘法实现源代码

一元多项式加法、减法、乘法实现源代码

⼀元多项式加法、减法、乘法实现源代码////链接程序:#include#include#include//using namespace std;#define N 1000//#define INF 65535void link();void shunxu();void Menu();typedef struct{int a[N];//记录多项式int len;//记录多项式的长度}Ploy;typedef struct //项的表⽰{ float coef; //系数int expn; //指数}term;typedef struct LNode{ term data; //term多项式值struct LNode *next;}LNode,*LinkList; //两个类型名typedef LinkList polynomail; //⽤带头结点的有序链表表⽰多项式/*⽐较指数*/int cmp(term a,term b){ if(a.expn>b.expn) return 1;if(a.expn==b.expn) return 0;if(a.expnelse exit(-2);}/*⼜⼩到⼤排列*/void arrange1(polynomail pa){ polynomail h=pa,p,q,r;if(pa==NULL) exit(-2);for(p=pa;p->next!=NULL;p=p->next); r=p;for(h=pa;h->next!=r;)//⼤的沉底{ for(p=h;p->next!=r&&p!=r;p=p->next)if(cmp(p->next->data,p->next->next->data)==1){ q=p->next->next;p->next->next=q->next;q->next=p->next;p->next=q;}r=p;//r指向参与⽐较的最后⼀个,不断向前移动} }/*由⼤到⼩排序*/void arrange2(polynomail pa){ polynomail h=pa,p,q,r;if(pa==NULL) exit(-2);for(p=pa;p->next!=NULL;p=p->next); r=p;for(h=pa;h->next!=r;)//⼩的沉底{ for(p=h;p->next!=r&&p!=r;p=p->next)if(cmp(p->next->next->data,p->next->data)==1){ q=p->next->next;p->next->next=q->next;q->next=p->next;p->next=q;}r=p;//r指向参与⽐较的最后⼀个,不断向前移动} }/*打印多项式,求项数*/int printpolyn(polynomail P){ int i;polynomail q;if(P==NULL) printf("⽆项!\n");else if(P->next==NULL) printf("Y=0\n");else{ printf("该多项式为Y=");q=P->next;i=1;if(q->data.coef!=0&&q->data.expn!=0){ printf("%.2fX^%d",q->data.coef,q->data.expn); i++; }if(q->data.expn==0&&q->data.coef!=0)printf("%.2f",q->data.coef);//打印第⼀项q=q->next;if(q==NULL){printf("\n");return 1;}while(1)//while中,打印剩下项中系数⾮零的项,{ if(q->data.coef!=0&&q->data.expn!=0){ if(q->data.coef>0) printf("+");printf("%.2fX^%d",q->data.coef,q->data.expn); i++;}if(q->data.expn==0&&q->data.coef!=0){ if(q->data.coef>0) printf("+");printf("%f",q->data.coef);}q=q->next;if(q==NULL){ printf("\n"); break; }}}return 1;}/*1、创建并初始化多项式链表*/polynomail creatpolyn(polynomail P,int m){//输⼊m项的系数和指数,建⽴表⽰⼀元多项式的有序链表P polynomail r,q,p,s,Q;int i;P=(LNode*)malloc(sizeof(LNode));r=P;for(i=0;i{s=(LNode*)malloc(sizeof(LNode));printf("请输⼊第%d项的系数和指数:",i+1);scanf("%f%d",&s->data.coef,&s->data.expn);r->next=s;r=s;}r->next=NULL;if(P->next->next!=NULL){for(q=P->next;q!=NULL/*&&q->next!=NULL*/;q=q->next)//合并同类项for(p=q->next,r=q;p!=NULL;)if(q->data.expn==p->data.expn){q->data.coef=q->data.coef+p->data.coef;r->next=p->next;Q=p;p=p->next;free(Q);}else{r=r->next;p=p->next;}}return P;}/*2、两多项式相加*/polynomail addpolyn(polynomail pa,polynomail pb) {//完成多项式相加运算,即:Pa=Pa+Pb polynomail s,newp,q,p,r;int j;p=pa->next;q=pb->next;newp=(LNode*)malloc(sizeof(LNode));r=newp;while(p&&q)//p&&q都不为空{s=(LNode*)malloc(sizeof(LNode));switch(cmp(p->data,q->data)){case -1: s->data.coef=p->data.coef;s->data.expn=p->data.expn;r->next=s;r=s;p=p->next;break;case 0: s->data.coef=p->data.coef+q->data.coef;if(s->data.coef!=0.0){s->data.expn=p->data.expn;r->next=s;r=s;}p=p->next;q=q->next;break;case 1: s->data.coef=q->data.coef;s->data.expn=q->data.expn;r->next=s;r=s;q=q->next;break;}//switch}//while p||q有⼀个跑完就跳出该循环while(p)//p没跑完{s=(LNode*)malloc(sizeof(LNode));s->data.coef=p->data.coef;s->data.expn=p->data.expn;r->next=s;r=s;p=p->next;}//p跑完跳出循环while(q)//q没跑完{s=(LNode*)malloc(sizeof(LNode));s->data.coef=q->data.coef;s->data.expn=q->data.expn;r=s;q=q->next;}//q跑完跳出循环//p&&q都跑完r->next=NULL;for(q=newp->next;q->next!=NULL;q=q->next)//合并同类项{for(p=q;p!=NULL&&p->next!=NULL;p=p->next)if(q->data.expn==p->next->data.expn){q->data.coef=q->data.coef+p->next->data.coef;r=p->next;p->next=p->next->next;free(r);}}printf("升序 1 , 降序 2\n");printf("选择排序⽅式:");scanf("%d",&j);if(j==1)arrange1(newp);elsearrange2(newp);return newp;}/*3、两多项式相减*/polynomail subpolyn(polynomail pa,polynomail pb){//完成多项式相减运算,即:Pa=Pa-Pbpolynomail s,newp,q,p,r,Q; int j;p=pa->next;q=pb->next;newp=(LNode*)malloc(sizeof(LNode));r=newp;while(p&&q){s=(LNode*)malloc(sizeof(LNode));switch(cmp(p->data,q->data)){case -1: s->data.coef=p->data.coef;s->data.expn=p->data.expn;r->next=s;r=s;p=p->next;break;case 0: s->data.coef=p->data.coef-q->data.coef;if(s->data.coef!=0.0){s->data.expn=p->data.expn;r->next=s;r=s;}p=p->next;q=q->next;break;case 1: s->data.coef=-q->data.coef;s->data.expn=q->data.expn;r->next=s;r=s;}//switch}//whilewhile(p){s=(LNode*)malloc(sizeof(LNode));s->data.coef=p->data.coef;s->data.expn=p->data.expn;r->next=s;r=s;p=p->next;}while(q){s=(LNode*)malloc(sizeof(LNode));s->data.coef=-q->data.coef;s->data.expn=q->data.expn;r->next=s;r=s;q=q->next;}r->next=NULL;if(newp->next!=NULL&&newp->next->next!=NULL)//合并同类项{for(q=newp->next;q!=NULL;q=q->next)for(p=q->next,r=q;p!=NULL;)if(q->data.expn==p->data.expn){q->data.coef=q->data.coef+p->data.coef;r->next=p->next;Q=p;p=p->next;free(Q);}else{r=r->next;p=p->next;}}printf("升序 1 , 降序 2\n");printf("选择:");scanf("%d",&j);if(j==1)arrange1(newp);elsearrange2(newp);return newp;}/*4两多项式相乘*/polynomail mulpolyn(polynomail pa,polynomail pb){//完成多项式相乘运算,即:Pa=Pa*Pbpolynomail s,newp,q,p,r;int i=20,j;newp=(LNode*)malloc(sizeof(LNode));r=newp;for(p=pa->next;p!=NULL;p=p->next)for(q=pb->next;q!=NULL;q=q->next){s=(LNode*)malloc(sizeof(LNode));s->data.coef=p->data.coef*q->data.coef;s->data.expn=p->data.expn+q->data.expn;r->next=s;r=s;}r->next=NULL;printf("升序 1 , 降序 2\n");printf("选择:");scanf("%d",&j);if(j==1)arrange1(newp);elsearrange2(newp);for(;i!=0;i--){for(q=newp->next;q->next!=NULL;q=q->next)//合并同类项for(p=q;p!=NULL&&p->next!=NULL;p=p->next)if(q->data.expn==p->next->data.expn){q->data.coef=q->data.coef+p->next->data.coef;r=p->next;p->next=p->next->next;free(r);}}return newp;}/*5、销毁已建⽴的两个多项式*/void delpolyn(polynomail pa,polynomail pb){polynomail p,q;p=pa;while(p!=NULL){q=p;p=p->next;free(q);}p=pb;while(p!=NULL){q=p;p=p->next;free(q);}printf("两个多项式已经销毁\n");}void Menulink(){printf("\n");printf(" ********⼀元多项式链式存储的基本运算********\n"); printf(" 1、创建两个⼀元多项式请按1\n");printf(" 2、两多项式相加得⼀新多项式请按2\n");printf(" 3、两多项式相减得⼀新多项式请按3\n");printf(" 4、两多项式相乘得⼀新多项式请按4\n");printf(" 5、销毁已建⽴的两个多项式请按5\n");printf(" 6、退出该⼦系统返回主菜单请按6\n");printf(" 7、退出该系统请按7\n");printf(" ********************************************\n");printf("\n");}void link() //⼀元多项式链式存储的实现{polynomail pa=NULL,pb=NULL;polynomail p,q;polynomail addp=NULL,subp=NULL,mulp=NULL; int n,m;printf("已进⼊链式存储⼀元多项式运算的⼦系统\n"); Menulink();while(1){printf("请选择你想进⾏的链式存储运算操作:\n"); scanf("%d",&n);switch(n){case 1:if(pa!=NULL){printf("已建⽴两个⼀元多项式,请选择其他操作!"); break;}printf("请输⼊第⼀个多项式:\n");printf("要输⼊⼏项:");scanf("%d",&m);while(m==0){printf("m不能为0,请重新输⼊m:");scanf("%d",&m);}pa=creatpolyn(pa,m);printpolyn(pa);printf("请输⼊第⼆个多项式:\n");printf("要输⼊⼏项:");scanf("%d",&m);while(m==0){printf("m不能为0,请重新输⼊m:");scanf("%d",&m);}pb=creatpolyn(pb,m);printpolyn(pb);break;case 2:if(pa==NULL){printf("请先创建两个⼀元多项式!\n");break;}addp=addpolyn(pa,pb);printpolyn(addp);break;case 3:if(pa==NULL){printf("请先创建两个⼀元多项式!\n");break;}subp=subpolyn(pa,pb);printpolyn(subp);break;case 4:if(pa==NULL){printf("请先创建两个⼀元多项式!\n"); break;}mulp=mulpolyn(pa,pb);printpolyn(mulp);break;case 5:if(pa==NULL){printf("请先创建两个⼀元多项式!\n"); break;}delpolyn(pa,pb);pa=pb=NULL;printf("两个⼀元多项式的销毁成功!\n"); break;case 6:if(addp!=NULL){p=addp;while(p!=NULL){q=p;p=p->next;free(q);}}if(subp!=NULL){p=subp;while(p!=NULL){q=p;p=p->next;free(q);}}printf("返回主菜单\n");Menu();break;case 7:if(addp!=NULL){p=addp;while(p!=NULL){q=p;p=p->next;free(q);}}if(subp!=NULL){p=subp;while(p!=NULL){q=p;p=p->next;free(q);}}printf("已成功退出该系统,谢谢你的使⽤!\n");exit(-2);break;}//switch}//while}//2、顺序程序:void ADD(Ploy A,Ploy B,Ploy *M)/*多项式A与多项式B相加,得到多项式M*/{int la=A.len,lb=B.len,i;M->len=la>lb?la:lb;for(i=0;i<=la&&i<=lb;i++){M->a[i]=A.a[i]+B.a[i];}while(i<=la){M->a[i]=A.a[i];i++;}while(i<=lb){M->a[i]=B.a[i];i++;}return;}void SUB(Ploy A,Ploy B,Ploy *M)/*多项式A与多项式B相减(A-B),得到多项式M*/{int la=A.len,lb=B.len,i;M->len=la>lb?la:lb;for(i=0;i<=la&&i<=lb;i++){M->a[i]=A.a[i]-B.a[i];}while(i<=la) {M->a[i]=A.a[i];i++;}while(i<=lb) {M->a[i]=0-B.a[i];i++;}return ;}void MUL(Ploy A,Ploy B,Ploy *M)/*多项式A与多项式B相乘,得到多项式M*/{int i,j;for(i=0;i<=A.len+B.len+1;i++) M->a[i]=0;for(i=0;i<=A.len;i++)for(j=0;j<=B.len;j++){M->a[i+j]+=A.a[i]*B.a[j];}M->len=A.len+B.len;return ;}void GetPloy(Ploy *A){int i,coef,ex,maxe=0;//ex指指数,maxe指最⼤指数char ch;printf("请输⼊每个项的系数及对应的指数,指数为负数时标志输⼊结束!\n");for(i=0;iA->a[i]=0;scanf("%d%d",&coef,&ex);while(ex>=0){if(ex>maxe)maxe=ex;if(A->a[ex]!=0){printf("你输⼊的项已经存在,是否更新原数据?(Y/N)"); cin>>ch;if(ch=='Y'||ch=='y'){A->a[ex]=coef;printf("更新成功,请继续输⼊!\n");}elseprintf("请继续输⼊!\n");;}elseA->a[ex]=coef;scanf("%d%d",&coef,&ex);}A->len=maxe;return ;}void PrintPloy1(Ploy A)//降序输出顺序⼀元多项式{int i;printf(" %dx^%d ",A.a[A.len],A.len);for(i=A.len-1;i>=1;i--){if(A.a[i]==0) ;else if(A.a[i]==1) printf(" + x^%d ",i);else if(A.a[i]==-1) printf(" - x^%d ",i);else{if(A.a[i]>0)printf("+ %dx^%d ",A.a[i],i);elseprintf("- %dx^%d ",-A.a[i],i);}}if(A.a[0]==0) ;else if(A.a[0]>0)printf(" + %d",A.a[0]);//打印x的0次项elseprintf(" - %d",-A.a[0]);printf("\n");return ;}void PrintPloy2(Ploy A)//升序输出顺序⼀元多项式{int i=0;while(A.a[i]==0)++i;if(i==0)printf("%d",A.a[i]);else{if(A.a[i]==1)printf("x^%d",i);else if(A.a[i]==-1)printf("-x^%d",i);elseprintf("%dx^%d",A.a[i],i);}for(++i;i<=A.len;i++){if(A.a[i]==0) ;else if(A.a[i]==1)printf(" + x^%d",i);else if(A.a[i]==-1)printf(" - x^%d",i);else if(A.a[i]>1)printf(" + %dx^%d",A.a[i],i);else if(A.a[i]<-1)printf(" - %dx^%d",-A.a[i],i);}}void Menushunxu(){printf("\n");printf(" ********⼀元多项式顺序存储的基本运算********\n");printf(" 1、更新两个多项式⼀元多项式请按1\n");printf(" 2、两多项式相加得⼀新多项式请按2\n");printf("3、两多项式相减得⼀新多项式请按3\n");printf(" 4、两多项式相乘得⼀新多项式请按4\n");printf(" 5、退出该⼦系统,返回主菜单请按5\n");printf(" 6、退出该系统请按6\n");printf(" ********************************************\n");printf("\n");return ;}void shunxu() //⼀元多项式顺序存储的实现{Ploy A,B,M;int n,m;printf("进⼊顺序存储⼀元多项式运算⼦系统\n");printf("请输⼊多项式A:\n");GetPloy(&A);printf("请输⼊多项式B:\n");GetPloy(&B);printf("输出两个⼀元多项式A、B,降幂输出请按1,升幂输出请按2!\n"); cin>>m;while(m<1&&m>m){printf("你输⼊的输出新创⼀元多项式的操作号不合法,请重新输⼊\n"); cin>>m;}switch(m){case 1:if(m==1){printf("A降=");PrintPloy1(A);printf("\n");printf("B降=");PrintPloy1(B);break;case 2:if(m==2){printf("A升=");PrintPloy1(A);printf("\n");printf("B升=");PrintPloy1(B);}break;}Menushunxu();while(1){printf("请选择你想进⾏的顺序存储运算操作:\n");cin>>n;while(n<1&&n>6){printf("输⼊的顺序操作号不对,请重新输⼊\n");cin>>n;}switch(n){case 1:if(n==1)printf("更新两个多项式:\n");printf("请输⼊多项式A:\n");GetPloy(&A);printf("请输⼊多项式B:\n");GetPloy(&B);printf("输出两个更新的⼀元多项式A、B,降幂输出请按1,升幂输出请按2!\n"); cin>>m;while(m<1&&m>2){printf("你输⼊的输出排序操作号不合法,请重新输⼊\n");cin>>m;}switch(m){case 1:if(m==1){printf("A降=");PrintPloy1(A);printf("\n");printf("B降=");PrintPloy1(B);}break;case 2:if(m==2){printf("A升=");PrintPloy1(A);printf("\n");printf("B升=");PrintPloy1(B);}break;break;case 2:if(n==2)ADD(A,B,&M);printf("降幂输出请按1,升幂输出请按2!\n");cin>>m;while(m<1&&m>2){printf("你输⼊的输出排序操作号不合法,请重新输⼊\n"); cin>>m;}switch(m){case 1:if(m==1){printf("ADD降=");PrintPloy1(M);printf("\n");}break;case 2:if(m==2){printf("ADD升=");PrintPloy2(M);printf("\n");}break;}break;case 3:if(n==3)SUB(A,B,&M);printf("降幂输出请按1,升幂输出请2!\n");cin>>m;while(m<1&&m>2){printf("你输⼊的输出排序操作号不合法,请重新输⼊\n"); cin>>m;}switch(m){case 1:if(m==1){printf("SUB降=");PrintPloy1(M);printf("\n");}break;case 2:if(m==2){printf("SUB升=");PrintPloy2(M);printf("\n");}break;}break;case 4:if(n==4)MUL(A,B,&M);printf("降幂输出请按1,升幂输出请2!\n");cin>>m;while(m<1&&m>3){printf("你输⼊输出排序操作号不合法,请重新输⼊\n"); cin>>m;}switch(m){case 1:if(m==1){printf("MUL降=");PrintPloy1(M);printf("\n");}break;case 2:if(m==2){printf("MUL升=");PrintPloy2(M);printf("\n");}break;}break;case 5:if(n==5)printf("返回主菜单\n");Menu();break;case 6:if(n==6)printf("已成功退出该系统,谢谢你的使⽤!\n");exit(-2);break;}}}void Menu(){printf("\n");printf(" ************⼀元多项式的基本运算系统************\n"); printf(" 1、⼀元多项式顺序存储的⼦系统请按1\n");printf(" 2、⼀元多项式链式存储的基本运算请按2\n"); printf(" 3、退出系统请按3\n");printf(" ************************************************\n"); printf("\n");printf("请输⼊你想进⾏的操作号:\n");int n;scanf("%d",&n);while(n!=1 && n!=2 && n!=3){printf("对不起,你的输⼊不正确,请重新输⼊!\n"); scanf("%d",&n);}switch(n){case 1:if(n==1)shunxu();break;case 2:if(n==2)link();break;case 3:if(n==3)printf("已成功退出该系统,谢谢你的使⽤!\n"); exit(-2);}}void main(){Menu();}。

c语言数据结构实现——一元多项式的基本运算

c语言数据结构实现——一元多项式的基本运算

c语言数据结构实现——一元多项式的基本运算在C语言中,一元多项式的表示与运算是常见的数据结构操作之一。

一元多项式由一系列具有相同变量的单项式组成,每个单项式由系数和指数组成。

本文将介绍如何使用C语言实现一元多项式的基本运算,包括多项式的创建、求和、差、乘积等操作。

首先,我们需要定义一个结构体来表示单项式。

每个单项式由一个系数和一个指数组成,我们可以将其定义如下:```cstruct term{float coefficient; // 系数int exponent; // 指数};typedef struct term Term;```接下来,我们可以定义一个结构体来表示一元多项式。

一元多项式由一系列单项式组成,可以使用一个动态数组来存储这些单项式。

```cstruct polynomial{Term* terms; // 单项式数组int num_terms; // 单项式数量};typedef struct polynomial Polynomial;```现在,我们可以开始实现一元多项式的基本运算了。

1. 创建一元多项式要创建一元多项式,我们需要输入每个单项式的系数和指数。

我们可以使用动态内存分配来创建一个适应输入的单项式数组。

```cPolynomial create_polynomial(){Polynomial poly;printf("请输入多项式的项数:");scanf("%d", &poly.num_terms);poly.terms = (Term*)malloc(poly.num_terms * sizeof(Term));for(int i = 0; i < poly.num_terms; i++){printf("请输入第%d个单项式的系数和指数:", i+1);scanf("%f %d", &poly.terms[i].coefficient, &poly.terms[i].exponent);}return poly;}```2. 求两个一元多项式的和两个一元多项式的和等于对应指数相同的单项式系数相加的结果。

一元多项式相加减c语言

一元多项式相加减c语言

一元多项式相加减c语言一元多项式相加减是一个基础的多项式操作,其基本形式是用数组存储系数和指数(对于非零项来说),然后进行相应的加减操作。

以下是一个简单的C语言实现:```c#include <stdio.h>struct term {int coeff; // 系数int exp; // 指数};struct poly {int len; // 多项式的长度struct term *arr; // 存储多项式每一项的数组};// 创建多项式struct poly create_poly(int coeff[], int exp[]) {struct poly p;p.len = sizeof(coeff) / sizeof(coeff[0]);p.arr = (struct term*)malloc(p.len * sizeof(struct term));for (int i = 0; i < p.len; i++) {p.arr[i].coeff = coeff[i];p.arr[i].exp = exp[i];}return p;}// 多项式相加struct poly poly_add(struct poly p1, struct poly p2) {struct poly result = {0, NULL};int len = p1.len > p2.len ? p1.len : p2.len;result.arr = (struct term*)malloc(len * sizeof(struct term));for (int i = 0; i < len; i++) {if (i < p1.len && i < p2.len && p1.arr[i].exp == p2.arr[i].exp) {result.arr[i].coeff = p1.arr[i].coeff + p2.arr[i].coeff; } else if (i < p1.len) {result.arr[i].coeff = p1.arr[i].coeff;result.arr[i].exp = p1.arr[i].exp;} else { // i < p2.lenresult.arr[i].coeff = p2.arr[i].coeff;result.arr[i].exp = p2.arr[i].exp;}}result.len = len;return result;}// 多项式相减struct poly poly_sub(struct poly p1, struct poly p2) {struct poly result = {0, NULL};int len = p1.len > p2.len ? p1.len : p2.len;result.arr = (struct term*)malloc(len * sizeof(struct term));for (int i = 0; i < len; i++) {if (i < p1.len && i < p2.len && p1.arr[i].exp == p2.arr[i].exp) {result.arr[i].coeff = p1.arr[i].coeff - p2.arr[i].coeff; } else if (i < p1.len) { // 如果p1有该项,而p2没有,则直接复制p1的项到结果中。

数据结构课程设计-一元多项式的四则运算

数据结构课程设计-一元多项式的四则运算

一元多项式的四则运算学生姓名:指导老师:摘要本课程设计主要解决一元多项式的运算问题,通过链表的使用,实现对一元多项式的构建、录入、存储、打印、以及之间的运算。

在本课程设计中,程序设计语言为C++语言,程序运行平台为Windows/98/2000/XP,程序采用了链表存储方法以及结构化和模块化的设计方法,通过调试运行,可以进行多项式的加、减、乘运算,勉强实现了设计目标,并且经过适当完善后,将可应用到实际中解决某些问题。

关键词程序设计; C++ ;一元多项式;运算1 引言一般来说,我们只知道数学上的一元多项式的运算,这一般都是用笔来进行运算的,然而此课程设计将一元多项式的运算用电脑来进行,只需要将多项式输入,然后就可以出结果,速度快,省去了认为计算的环节,在现实中带来不少方便。

1.1 课题背景一元多项式的运算,虽然无法直接在除数学外的其他领域作出贡献,但是在数学上,它可以为人们解决一些自己动笔动手很难解决的问题,比如说那些很长很长的多项式,用笔算可能要算半天,但是用该程序,只需短短的几秒钟,所以它给人们带来了不少方便,同时相信它也能间接地为其他领域做出贡献。

1.2 课程设计目的个人觉得,该数据结构课程设计一方面可以让自己更加熟悉那些些常用的数据结构,掌握数据结构内在的逻辑关系,以及它们在计算机中的存储表示,和对它们实行的各种运算;另一方面,可以让自己对于整体和局部,以及结构化和模块化编程有一个更深层次的了解。

作为网络工程的学生,虽然之前有过一次C语言课程设计,但是深知自己编程能力尚为欠缺,所以这一次数据结构课程设计是对我的编程能力和组织能力的又一次考验。

1.3课程设计内容本课程设计是用链表实现一元多项式的存储及运算,其中包括多项式系数及指数的录入(即一元多项式的录入),以及储存、一元多项式的显示、一元多项式之间的加、减、乘法运算。

2 设计思路与方案2.1设计思路该系统使用C++语言进行开发和实现,程序中的各个功能分别由不同的的函数实现,然后在main函数中调用实现。

一元多项式的加法、乘法运算的实现

一元多项式的加法、乘法运算的实现

数据结构课题设计报告设计题目:一元多项式的加、乘法的实现姓名:班级:学号:指导老师:目录一、实验题目 (4)二、设计内容 (4)三、设计实现 (4)四、概要设计 (5)1,按要求输入一元多项式的系数 (5)2,计算一元多项式的加法 (5)3,输出计算结果 (5)4,按要求输入一元多项式的系数 (5)5,计算一元多项式的乘法 (5)6,输出计算结果 (5)7,退出 (5)五、程序流程图 (6)1,加法运算 (6)2,乘法运算 (7)六、源程序 (8)七、程序运行界面图 (20)1,加法运行输入项数 (20)2,输入每一项的系数及指数 (20)3,算出加法运算结果及乘法运行输入项数 (21)4,入乘法运算每一项的系数及指数 (21)5,算出乘法运算的结果 (22)八、心得体会................................................. - 23 -课程设计评分表 (24)一、实验题目一元多项式加法、乘法运算的实现二、设计内容该程序的功能是实现一个一元多项式运算。

能够完成两个多项式的相加、相乘的运算并且输出正确的答案。

三、设计实现一元多项式加法,乘法运算的实现1.根据输入创建一元多项式,采用顺序和链表存储结构实现顺序存储结构:在计算机内部可以采用不同方式存储一个线性表,其中最简单的方式就是用一组地址连续的存储单元来依次存储线性表中的数据元素。

对一元多项式存储结构的选择,输入多项式采用头插法的方式,输入多项式中一个项的系数和指数,就产生一个新的节点,建立起它的右指针,并用头节点指向它;一元多项式可以用顺序和链表两种存储结构表示,顺序结构的最大长度很难确定。

单链表的结构体可以用来存储多项式的系数,指数,便于实现任意多项式的运算。

2.创建的的第个一元多项式用于实现加法的运算,第二个一元多项式用于实现乘法的运算。

3.运算完毕后,退出运行程序四、概要设计1,按要求输入一元多项式的系数2,计算一元多项式的加法3,输出计算结果4,按要求输入一元多项式的系数5,计算一元多项式的乘法6,输出计算结果7,退出五、程序流程图 1,加法运算2,乘法运算六、源程序#include <stdio.h>#include <stdlib.h>#include <string.h>#define NULL 0typedef struct Node{ //定义结构体类型float coef; //系数int expn; //指数struct Node *next; //结构体指针}Node,*Linklist;struct polynode{int c;int e;struct polynode *next;};struct polynode * creat(void){int c,e;struct polynode *head=NULL;struct polynode *p1,*p2,*l,*r;while(scanf("%d,%d%*c",&c,&e),c||e){p2=(struct polynode *)malloc(sizeof(struct polynode)); p2->c=c;p2->e=e;p2->next=NULL;if(head==NULL){head=p2;continue;}for(l=r=head;l!=NULL&&(l->e)<e;l=l->next) r=l;if(l==head&&l->e>e) head=p2;else r->next=p2;p2->next=l;}return head;}void output(struct polynode* head){struct polynode *p1;p1=head;if(p1==NULL){printf("\n multinomial is zero\n");return;}printf("\n");while(p1!=NULL){printf(p1!=head&&(p1->c)>0? "+%d":"%d",p1->c);printf(p1->e? "x^%d":"",p1->e);p1=p1->next;}printf("\n");}struct polynode * add(struct polynode *head1,struct polynode *head2) {struct polynode *p1,*p2,*r,*l,*h;h=r=p1=head1;p2=head2;if(head1==NULL){h=head2;return h;}while (p1!=NULL&&p2!=NULL) {if(p1->e==p2->e){p1->c+=p2->c;p2=p2->next;r=p1;p1=p1->next;continue;}if(p1->e<p2->e){r=p1;p1=p1->next;continue;}if(p1->e>p2->e){l=p2;p2=p2->next;if(p1==h) h=l;else r->next=l;l->next=p1;r=l;continue;}}if (p1==NULL) r->next=p2;return h;}struct polynode * mul(struct polynode *head1,struct polynode *head2) {struct polynode *p,*p1,*p2,*r,*t,*head;head=NULL;if(head1==NULL||head2==NULL) return head;for(p2=head2;p2!=NULL;p2=p2->next){for(p1=head1;p1!=NULL;p1=p1->next){p=(struct polynode *)malloc(sizeof(struct polynode));p->c=p1->c*p2->c;p->e=p1->e+p2->e;p->next=NULL;if(p1==head1) t=p;else r->next=p;r=p;}head=add(head,t);}// output(head);return head;}Linklist creatpolyn(Linklist L,int n){ //构造新的一元多项式int i;Linklist head,p;head=(Linklist)malloc(sizeof(Node)); //创建头结点head->next=NULL;L=head;for(i=n;i>0;i--){p=(Linklist)malloc(sizeof(Node));printf("请输入一元多项式的第%d项的系数和指数:",i);scanf("%f%d",&(*p).coef,&(*p).expn); //输入系数和指数p->next=L->next;L->next=p;}return(head); //返回头结点}//creatpolynint cmp(int a,int b){ //比较a,b的大小if(a>b)return(1);elseif(a==b)return(0);elsereturn(-1);}void print(Linklist L){ //显示一元多项式Linklist p;p=L->next;while(p->next!=NULL){printf("%f*x^%d+",(*p).coef,(*p).expn); //输出多项式的项p=p->next;}printf("%f*x^%d\n",(*p).coef,(*p).expn); //输出多项式最后一项}//PrintLinklist Addpolyn(Linklist pa,Linklist pb){ //多项式相加int a,b;float sum;Linklist ha,hb,qa,qb,p1,p2;ha=pa; //ha,hb分别指向pa和pb中当前结点hb=pb;qa=ha->next; //qa和qb分别指向pa和pb中当前结点qb=hb->next;while(qa!=NULL&&qb!=NULL){ //qa和qb均非空a=(*qa).expn;b=(*qb).expn;switch(cmp(a,b)){ //比较指数case -1:{ //a<bha->next=qa;ha=ha->next;qa=qa->next; break;}case 0:{ //a=b sum=(*qa).coef+(*qb).coef;if(sum!=0.0){(*qa).coef=sum;ha->next=qa;ha=ha->next;}else{p1=qa;free(p1);}p2=qb;qa=qa->next;qb=qb->next;free(p2);break;}case 1:{ //a>b ha->next=qb;ha=ha->next;qb=qb->next;break;}}//switch}//whilewhile(qa!=NULL){ //如果qb不为空ha->next=qa;ha=ha->next;qa=qa->next;}while(qb!=NULL){ //如果qb不为空ha->next=qb;ha=ha->next;qb=qb->next;}return(pa);}//Addpolynvoid main(){int m,n,i;char t;Linklist pa,pb;pa=(Linklist)malloc(sizeof(Node));pb=(Linklist)malloc(sizeof(Node));printf("请输入一元多项式pa的项数:\n"); //构造一元多项式pascanf("%d",&m);pa=creatpolyn(pa,m);printf("请输入一元多项式pb的项数:\n"); //构造一元多项式pbscanf("%d",&n);pb=creatpolyn(pb,n);printf("多项式pa为:"); //输出paprint(pa);printf("多项式pb为:"); //输出pbprint(pb);printf("多项式pa与pb的和为:"); //输出多项式pa和pb的和print(Addpolyn(pa,pb));struct polynode *head1=NULL,*head2=NULL,*head=NULL;logn: printf("请输入需要相乘的多项式个数,至少2个: ");scanf("%d%c",&n);printf("\n 输入一个多项式的方式为:系数,指数; 例如: 3,4;5,6;7,8;as0,0;结束\n");printf("\n 请输入第1个多项式的系数和指数: ");head1=creat();printf("\n 第1个多项式的为: ");output(head1);for(i=1;i<n;i++){printf("\n 请输入第%d个多项式的系数和指数 : ",i+1);head2=creat();printf("\n 第%d个多项式为: ",i+1);output(head2);if(i==1)head=mul(head1,head2);else head=mul(head,head2);}printf("\n 多项式相乘结果为 : ");output(head);printf("\n 是否继续(y/n)? ");scanf("%*c%c",&t);if(t=='y') goto logn;}七、程序运行界面图1,加法运行输入项数2,输入每一项的系数及指数3,算出加法运算结果及乘法运行输入项数4,入乘法运算每一项的系数及指数5,算出乘法运算的结果八、心得体会通过这次的课程设计,是我又温习了数组、循环结构以及嵌套以及分块模块等C语言知识。

一元多项式的乘法与加法运算c 语言

一元多项式的乘法与加法运算c 语言

一元多项式的乘法与加法运算c 语言一元多项式是高中数学中一个重要的概念,具有广泛的应用。

在c 语言中,我们可以通过数组和循环来实现一元多项式的乘法和加法运算。

一、一元多项式的表示方式在c语言中,一元多项式通常使用数组来表示。

数组的下标表示该项的指数,数组元素表示该项的系数。

例如,一个一元三次多项式5x^3-3x^2+7x-9在c语言中表示为:int poly[4] = { -9, 7, -3, 5 };其中poly[0]表示常数项系数-9,poly[1]表示x的系数7,以此类推。

二、一元多项式的乘法运算对于两个多项式P(x)和Q(x),它们的乘积为:(PQ)(x) = ∑(i+j=k) Pi × Qj × xk其中i、j、k分别表示P、Q、PQ中每一项的指数,Pi、Qj表示对应项的系数,xk表示PQ中对应指数的项。

通过这个公式,我们可以使用数组实现一元多项式的乘法运算。

具体实现如下:void poly_mul(int *p, int *q, int *s, int m, int n) {int i, j;memset(s, 0, sizeof(int) * (m + n)); // 将结果数组s初始化为0for (i = 0; i <= m; i++) {for (j = 0; j <= n; j++) {s[i + j] += p[i] * q[j]; // 对应项相乘并累加到结果数组}}}该函数参数分别为两个乘数的数组p、q,结果数组s,以及每个乘数的项数m、n。

在函数内部,我们首先将结果数组s初始化为0,然后使用两个循环遍历乘数数组,对应项相乘并累加到结果数组中。

最后得到的结果数组就是乘积多项式。

三、一元多项式的加法运算对于两个多项式P(x)和Q(x),它们的和为:(P+Q)(x) = ∑Pi × xi + ∑Qj × xj其中Pi、Qj分别表示对应项的系数,xi、xj表示对应项的指数。

一元多项式相加C语言代码

一元多项式相加C语言代码

数据结构作业一元多项式相加C语言代码#include<stdio.h>#include<malloc.h>typedef struct node{int exp,coef;struct node *link;}PolyNode,*Polylinklist;Polylinklist Creat(int n){Polylinklist p,r=NULL,list=NULL;int coef,exp,i;for(i=1;i<=n;i++){scanf("%d %d",&coef,&exp);p=(Polylinklist)malloc(sizeof(PolyNode));p->coef=coef;p->exp=exp;p->link=NULL;if(list==NULL)list=p;elser->link=p;r=p;}return(list);}Polylinklist ATTACH(int coef,int exp,Polylinklist r){Polylinklist w;w=(Polylinklist)malloc(sizeof(PolyNode));w->exp=exp;w->coef=coef;r->link=w;return w;}Polylinklist PADD(Polylinklist a,Polylinklist b){Polylinklist c;Polylinklist r,p=a,q=b;int x;c=(Polylinklist)malloc(sizeof(PolyNode));r=c;while(p!=NULL&&q!=NULL)if(p->exp==q->exp){x=p->coef+q->coef;if(x!=0)r=ATTACH(x,q->exp,r);p=p->link;q=q->link;}else if(p->exp<q->exp){r=ATTACH(q->coef,q->exp,r);q=q->link;}else {r=ATTACH(p->coef,p->exp,r);p=p->link;}while(p!=NULL){r=ATTACH(p->coef,p->exp,r);p=p->link;}while(q!=NULL){r=ATTACH(q->coef,q->exp,r);q=q->link;}r->link=NULL;p=c;c=c->link;free(p);return c;}void Result(Polylinklist w){Polylinklist m;m=w;while(w==NULL){printf("0");break;}while(w!=NULL){if(w->exp==0)printf("%d",w->coef);elseprintf("%d*x^%d",w->coef,w->exp);w=w->link;while(w!=NULL){if(w->coef>0){if(w->exp==0)printf("+%d",w->coef);elseprintf("+%d*x^%d",w->coef,w->exp);}else{if(w->exp!=0)printf("%d*x^%d",w->coef,w->exp);elseprintf("%d",w->coef);}w=w->link;}}}void main(){Polylinklist c=NULL;PolyNode *Lengtha;PolyNode *Lengthb;int a1,b1;printf("Please input a's Length:");scanf("%d",&a1);Lengtha=Creat(a1);printf(" a=");Result(Lengtha);printf("\n");printf("Please input b's Length:");scanf("%d",&b1);Lengthb=Creat(b1);printf(" b=");Result(Lengthb);printf("\n");c=PADD(Lengtha,Lengthb);printf("\n");printf(" c=");Result(c);printf("\n");}。

一元多项式相加(C语言实现)

一元多项式相加(C语言实现)

//一元多项式相加//#define ERROR 0#include<stdio.h>#include<malloc.h>//#include<stdlib.h>typedef struct poly{ float coef;int expn;struct poly *next;}poly,*Linkpoly;void main(){Linkpoly creatpoly();Linkpoly addpoly(Linkpoly La,Linkpoly Lb);void printpoly(Linkpoly L);Linkpoly La,Lb;La=creatpoly();Lb=creatpoly();printf("多项式1:\n");printpoly(La);printf("\n");printf("多项式2:\n");printpoly(Lb);printf("\n");addpoly(La,Lb);printf("相加后的多项式:\n");printpoly(La);}Linkpoly creatpoly()//创建链表,输入多项式{int i,n;Linkpoly p,L;printf("请输入多项式项数:\n");scanf("%d",&n);printf("逆序输入多项式: <系数,指数>\n");L=(Linkpoly)malloc(sizeof(poly));//头结点L->next=NULL;for(i=n;i>0;--i){p=(Linkpoly)malloc(sizeof(poly));scanf("%f,%d",&p->coef,&p->expn);p->next=L->next; L->next=p;}return L;}Linkpoly addpoly(Linkpoly La,Linkpoly Lb)//多项式相加{Linkpoly p,r,q,s,s1,s2;r=La;//r指向p的前驱p=La->next;q=Lb->next;while(p&&q){if(p->expn<q->expn) { r=p;p=p->next;continue;}if(p->expn>q->expn) {s=q->next;q->next=r->next;r->next=q;q=s;r=r->next;continue;}if(p->expn==q->expn&&(p->coef+q->coef)!=0) { p->coef=p->coef+q->coef;r=p;p=p->next;q=q->next;continue;} if(p->expn==q->expn&&(p->coef+q->coef)==0) { s1=p;s2=q;p=r;p->next=p->next->next;p=p->next;q=q->next;continue;free(s1);free(s2);}}if(q){p=r;p->next=q;p=p->next;// free(p);}// return La;}void printpoly(Linkpoly L){Linkpoly p;p=L->next;while(p){printf("<%0.2f,%d> ",p->coef,p->expn);p=p->next;}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
list *temp=pre->next;
pre->next=pre->next->next;
free(temp);
toup->length--;
}//if
else p=p->next;
}//while,合并幂相等的项
p=toup->next;
list* pr=NULL;
list* tem=NULL;
{
if(!toup) {cout<<"初始化失败"<<endl;exit(0);}
list *a=toup->next;
int i=1;
while(i<toup->length)
{
list* temp=a;
list* p=a;
list* t=p->next;
while(t)
{
if(abs(p->zhi)>abs(t->zhi))
if(toup) destory(toup);//假如有头结点或元素节点,销毁结点
toup=(node*)malloc(sizeof(node));
if(!toup){cout<<"溢出错误"<<endl;exit(0);}
toup->length=0;
toup->next=NULL;
}
//销毁全部,包括头结点
ch=c;
switch(c)
{case '-':
k1=-1;
k2=0;
k3=0;
break;
case '+':
k1=1;
k2=0;
k3=0;
break;
case 'x':if(k2==0)
p->data=k1*1;
else
p->data=k1*dat;
dat=0.0;
k1=1;
k2=0;
k3=0;
kx=1;
void shuoming()
{
cout<<"*******************************************************************************"<<endl;
cout<<"*各项可以用平时书写习惯输入,若有未知数,必须用x表示,且各项之间必须用空格分隔,支*"<<endl;
int i=0;
while(c!='\n')
{
if(!p)
{ p=(list*)malloc(sizeof(list)); if(!p) {cout<<"溢出错误"<<endl;exit(0);}
if(i==0) {toup->next=p;toup->length++;i++;p->next=NULL;t=p;}
结构体类型定义:
typedef struct list
{
type data;
int zhi;
struct list* next;
}list;
typedef struct node
{
int length;
list* next;
}node;
用到的函数:
注:各函数参数如是结构体指针,则此指针传入函数之前必将其赋值为NULL否则可能出现错误。
i++;
}//while
}
//把指数相等的项合并,也可实现多项式加法
void neat(node *&toup)
{
paixu(toup);//先排序
list* p=toup->next;
list* pre;
while(p)
{
if(equalmi(p,p->zhi,pre))
{
p->data=pre->next->data+p->data;
}
//将toup2原样赋给toup1
void copy(node*& toup1,node*& toup2)
{
if(!toup2) {cout<<"初始化未成功"<<endl;exit(0);}
init(toup1);
list* t2=toup2->next,*t1=toup1->next ;
while(t2)
status equalmi(list *&element,int m,list *&prep)
{
prep=element;
list *t=element->next;
while(t&&t->zhi!=m)
{
prep=t;
t=t->next;
}//while
if(t) return 1;//找到了
else return 0;
{
if(!atoup||!btoup) {cout<<"链初始化失败";exit(0);}
void init(node *&toup);
init(newtoup);
list* ap=atoup->next;list* bp=btoup->next;list* temp=NULL;
int i=1;
while(ap)
if(0==kx) {p->data =k1*dat;p->zhi=0;}
else {if(k2==0) p->zhi=k1*1;else p->zhi=k1*(int)dat;}
}
//初始化,生成单链表表头,参数是指向头结点的指针
void init(node *&toup)
{
status destory(node *&toup);
p=p->next;
free(tem);
tem=NULL;
}
}//if
else
{
pr=p;
p=p->next ;
}//else
}//while,将数据为0的项删除
pr=NULL;
}
//得到第i个元素的指数
/*status get(node *&toup,int i)
{if(!toup) {cout<<"错误:没有头结点"<<endl;exit(-1);}
#include<sys/timeb.h>
#include<stdarg.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
typedef int status;
typedef floattype;
typedef int fuhaosign;
status destory(node *&toup)
{
if(toup)
{
list* p=toup->next;list* t;
while(p)
{
t=p->next;
free(p);
p=t;
}//while
free(toup);
toup=NULL;
}//if
return OK;
}
//找到指数与m相等的元素,返回前一元素的指针,参数是元素指针
{ list* t=(list*)malloc(sizeof(list));
if(i==1) {newtoup->next=t;newtoup->length++;t->data=ap->data;t->zhi=ap->zhi;ap=ap->next;temp=t;i++;}
else {temp->next=t;newtoup->length++;t->data=ap->data;t->zhi=ap->zhi;temp=t;ap=ap->next;}
#include<iostream.h>
#include<iomanip.h>
#include<ctype.h>
#include<malloc.h>
#include<limits.h>
#include<stdio.h>
#include<stdlib.h>
#include<io.h>
#include<math.h>
int k2=0;//k2标志着+-号前面是否有数值,0时没有,1为有
fuhaosign k1=1;//k1是符号位正负的标志,0为负,1为正
int k3=0;//小数点的个数
int kx=0;//标志前面是否有x
list* p=toup->next,* t;
type dat=0.0;
//输入
c=getchar();
{
list* temp=(list*)malloc(sizeof(list));
if(!t1)
{
toup1->next =temp;toup1->length++;temp->data =t2->data ;temp->zhi =t2->zhi ;t2=t2->next ;t1=temp;
相关文档
最新文档