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

一、设计题目一元多项式的加法、减法、乘法的实现。
二、主要内容设有一元多项式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语言中,我们可以通过定义结构体来表示一元多项式,并实现加法、减法和乘法运算。
我们定义一个结构体来表示一元多项式。
结构体中包含两个成员变量,一个是整数类型的系数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++,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;
一元多项式的表示及其运算的研究与实现

蒋浩钧一元多项式的表示及其运算的研究与实现第1页共27页一元多项式的表示及其运算的研究与实现学生姓名:蒋浩钧指导老师:乐晓波摘要一元多项式计算是用C语言设计一个一元多项式简单计算器。
它能够实现按指数降序排列建立并输出多项式,并且能够完成两个多项式的相加,想减的运算和将其结果输入的功能。
体会链式存存储结构的优缺点和适用性。
了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技提高综合运用所学的理论知识和方法独立分析和解决问题的能力;加深对常用数据结构的理解,强化学生的逻辑思维能力和动手能力,巩固良好的编程习惯,掌握工程软件设计的基本方法,为后续课程的学习打下坚实基础。
关键词C语言;一元多项式;链式存存储结构;指数降序排列目录1前言--------------------------------------------31.1课程设计目的-----------------------------------3 1.2需求分析----------------------------------------3 2概要设计----------------------------------------42.1一元多项式的数学模型------------------------------4 2.2一元多项式数据结构的构造 ----------------------------------4 2.3系统结构与功能模块流程图 ----------------------------------5 3详细设计----------------------------------------73.1一元多项式的建立-----------------------------73.2一元多项式的显示------------------------------83.3一元多项式的加法运算-------------------------93.4一元多项式的减法运算-------------------------125.5一元多项式的乘法运算-------------------------143.6帮助----------------------------------------16 4调试及运行结果-----------------------------------------17 5设计体会与总结------------------------------------------19 5.1设计体会------------------------------------------19 5.2总结--------------------------------------------20 参考文献-----------------------------------------20 附录:源程序---------------------------------------------211 前言一元多项式算法程序的数据结构是选择用带头结点的单链表存储多项式。
c++一元多项式相加减 链表

C++一元多项式相加减链表一、介绍1. 什么是一元多项式一元多项式是指只含有一个变量的多项式,例如3x^3 + 2x^2 - 5x + 7。
2. 链表的概念链表是一种数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。
3. 本文内容本文将介绍如何使用C++实现一元多项式的相加和相减运算,同时利用链表来存储和操作多项式的数据。
二、实现思路1. 链表的设计我们可以设计一个节点类来表示多项式的每一项,节点包括系数和指数两个成员变量,同时包括一个指针指向下一个节点。
2. 多项式的输入和输出用户可以逐项输入多项式的系数和指数,也可以将多项式输出至屏幕或文件。
3. 多项式的相加和相减我们需要同时遍历两个多项式的链表,根据指数的大小进行相应的相加或相减操作,并将结果存储到一个新的链表中。
三、代码实现1. 定义节点类```class Node {public:int coefficient; // 系数int exponent; // 指数Node* next; // 指向下一个节点的指针};```2. 多项式的输入```void inputPolynomial(Node* &head) {// 逐项输入多项式的系数和指数,并将其存储为一个链表 }```3. 多项式的输出```void outputPolynomial(Node* head) {// 遍历链表,并将多项式的每一项输出至屏幕或文件}```4. 多项式的相加```Node* addPolynomial(Node* head1, Node* head2) {// 遍历两个链表,根据指数的大小进行相应的相加操作,并将结果存储到一个新的链表中}```5. 多项式的相减```Node* subtractPolynomial(Node* head1, Node* head2) {// 遍历两个链表,根据指数的大小进行相应的相减操作,并将结果存储到一个新的链表中}```四、示例代码1. 主函数```int main() {Node* head1 = nullptr;Node* head2 = nullptr;Node* result = nullptr;// 输入第一个多项式inputPolynomial(head1);// 输入第二个多项式inputPolynomial(head2);// 输出两个多项式cout << "First polynomial: ";outputPolynomial(head1);cout << "Second polynomial: ";outputPolynomial(head2);// 计算两个多项式的和result = addPolynomial(head1, head2);cout << "Sum of two polynomials: ";outputPolynomial(result);// 计算两个多项式的差result = subtractPolynomial(head1, head2); cout << "Difference of two polynomials: "; outputPolynomial(result);return 0;}```五、总结本文介绍了如何使用C++实现一元多项式的相加和相减运算,并利用链表来存储和操作多项式的数据。
数据结构链式表实现一元多项式加减乘运算课程方案实验报告

数据结构课程设计设计题目:基于链式表实现一元多项式的加减乘运算目录问题分析11.1 问题描述设计一个n元多项式程序,并完成多项式的乘法运算。
从实际的角度出发,这里设计的程序是基于一元n次多项式的数学模型。
1.2 问题的数学模型在数学上,一个一元多项式Pn(x>可按升幂写成:Pn(x>=a 0+a1 x+a2 x^2 +…+a n x^n-1.它由n+1个系数惟一确定,因此,在计算机里,它可用一个线性表P来表示:Pn=(a0,a1,a2,…,an>每一项的指数i隐含在其系数ai的序号里。
多项式的乘法规则:多次运用单项式与多项式相乘的法则得到的.计算时(a+b>(m+n>,先把(m+n>看成一个单项式,(a+b>是一个多项式,运用单项式与多项式相乘的法则,得到(a+b>(m+n>=a(m+n>+b(m+n>,然后再次运用单项式与多项式相乘的法则。
1.3 构造数据结构通过分析多项式的特征,不难看出多项式是由单项式构成的,而每个单项式都具有系数和指数,当系数为0时,该项就失去了意义,在计算机内要表示一个多项式,至少以下数据信息:系数信息、指数信息和指向下一个单项式的指针。
通过指针,我们就可以把多个单项式连接起来,形式一个多项式,需要说明的是从广义的角度讲,单项式也是一个多项式。
基于以上的分析,我们定义多项式的数据结构为如下结构体形式:typedef struct Polynomial{float coef。
//系数int expn。
//指数struct Polynomial *next。
//指向下一个结点}*Polyn,Polynomial。
//Polyn为结点指针类型2 系统分析2.1 可行性研究该程序主要从技术的角度来分析可行性。
技术上的可行性研究主要分析技术条件能否顺利完成开发工作,硬、软件能否满足开发者的需要等。
该系统采用了Windows XP操作系统结合Visual C++ 6.0,TC 2.0等软件开发平台已成熟可行。
链表线性结构(多项式的加减乘除)

哈尔滨工业大学计算机科学与技术学院实验报告课程名称:数据结构与算法课程类型:必修实验项目:线性结构及其应用实验题目:多项式的加减乘除和特定值带入实验日期:2017/11/5班级:1603001学号:**********姓名:***一、实验目的设计线性表的链式存储结构,并实现一元多项式的代数运算。
二、实验要求及实验环境(1)实验要求:以链表存储一元多项式,在此基础上完成对多项式的代数操作。
1.能够输入多项式(可以按各项的任意输入顺序,建立按指数降幂排列的多项式)和输出多项式(按指数降幂排列),以文件形式输入和输出,并显示。
2.能够计算多项式在某一点 x=x0 的值,其中 x0 是一个浮点型常量,返回结果为浮点数。
3.能够给出计算两个多项式加法、减法、乘法和除法运算的结果多项式,除法运算的结果包括商多项式和余数多项式。
4.要求尽量减少乘法和除法运算中间结果的空间占用和结点频繁的分配与回收操作。
(提示:利用循环链表结构和可用空间表的思想,把循环链表表示的多项式返还给可用空间表,从而解决上述问题)。
(2)实验环境:windows下的CB;三、设计思想(本程序中的用到的所有数据类型的定义,主程序的流程图及各程序模块之间的调用关系)1.逻辑设计:struct polynode{int coef;int exp;struct polynode * link;};//建立链表typedef struct polynode poly;poly* Attch(int c,int e,poly *d);//多项式插入poly *newPoly();//新链表poly *padd(poly *p1,poly *p2);//多项式加法poly *pmul(poly *p1,poly *p2);//乘法poly *inputPoly();//输入多项式poly *psub(poly *p1,poly *p2);//减poly *pdiv(poly *p1,poly *p2);//除poly *inputPoly1();double caculate(double x,poly *p);//计算多项式void sortPoly(poly *p);//多项式排序void outputPoly(poly*p);//输出多项式void delPoly(poly*p);//清空多项式2.物理设计:四、测试结果五、经验体会与不足不能连续输入多个多项式函数设计不够简洁算法过于直接简单加注释后修改代码方便六、附录:源代码(带注释)#include <stdio.h>#include <stdlib.h>struct polynode{int coef;int exp;struct polynode * link;};//建立新链表typedef struct polynode poly;poly* Attch(int c,int e,poly *d);//插入链表poly *newPoly();//建立新链表poly *padd(poly *p1,poly *p2);//加法poly *pmul(poly *p1,poly *p2);//乘法poly *inputPoly();//输入多项式poly *psub(poly *p1,poly *p2);//减法poly *pdiv(poly *p1,poly *p2);//除法poly *inputPoly1();//输入double caculate(double x,poly *p);//计算void sortPoly(poly *p);//排序void outputPoly(poly*p);//输出多项式void delPoly(poly*p);//除法void Insert(poly *p,poly *h){if(p->coef==0)free(p);else{poly *q1,*q2;q1=h;q2=h->link;while(q2&&p->exp<q2->exp){q1=q2;q2=q2->link;}/*判断两个指数是否相等*/if(q2&&p->exp==q2->exp){q2->coef+=p->coef;free(p);if(!q2->coef){q1->link=q2->link;free(q2);}}/*相等就加系数*/else{p->link=q2;q1->link=p;}}/*不等就插在后面*/}int main(){poly *p1,*p2,*padd1,*psub1,*pmul1; p1=newPoly();printf("第一个多项式\n");p1->link=inputPoly();outputPoly(p1);p2=newPoly();printf("第二个多项式\n");p2->link=inputPoly1();outputPoly(p2);padd1=newPoly();pmul1=newPoly();psub1=newPoly();padd1->link=padd(p1,p2);printf("padd\n");outputPoly(padd1);psub1->link=psub(p1,p2);printf("psub\n");outputPoly(psub1);pmul1->link=pmul(p1,p2);printf("pmul\n");outputPoly(pmul1);printf("输入x的值!");int x;scanf("%d",&x);x=caculate(x,p1);printf("%d\n",x);pdiv(p1,p2);return 0;}poly *newPoly(){poly *x;x=(poly*)malloc(sizeof(poly)); x->link=NULL;x->coef=0;x->exp=0;return x;}poly* Attch(int c,int e,poly *d) {poly *x;x=newPoly();x->coef=c;x->exp=e;d->link=x;return x;}poly *padd(poly *p1,poly *p2){poly *a, *b,*c,*d,*p;c=newPoly();d=c;p=c;a=p1->link;b=p2->link;while(a!=NULL&&b!=NULL){if(a->exp>b->exp)//如果a的系数大于b把a先输入 {c=Attch(a->coef,a->exp,c);a=a->link;}else if(a->exp<b->exp)//小于相反{c=Attch(b->coef,b->exp,c);b=b->link;}else//相等{c=Attch(b->coef+a->coef,a->exp,c);a=a->link;b=b->link;}}/*a b比较完成开始遍历剩下的未插入的*/while(a!=NULL){c=Attch(a->coef,a->exp,c);a=a->link;}while(b!=NULL){c=Attch(b->coef,b->exp,c);b=b->link;}c->link=NULL;d=d->link;p->link=NULL;delPoly(p);return d;}poly *psub(poly*p1,poly*p2)//加和减思路相同,b的系数得输入相反值{poly *a, *b,*c,*d,*p;c=newPoly();d=c;p=c;a=p1->link;b=p2->link;while(a!=NULL&&b!=NULL){if(a->exp>b->exp){c=Attch(a->coef,a->exp,c);a=a->link;}else if(a->exp<b->exp){c=Attch(b->coef*(-1),b->exp,c);b=b->link;}else{if((a->coef-b->coef)>0){c=Attch(a->coef-b->coef,a->exp,c); a=a->link;b=b->link;}else{a=a->link;b=b->link;}}}while(a!=NULL){c=Attch(a->coef,a->exp,c);a=a->link;}while(b!=NULL){c=Attch(b->coef*(-1),b->exp,c);b=b->link;}c->link=NULL;d=d->link;p->link=NULL;delPoly(p);return d;}/*乘法,先用第一个链表的第一个数据乘以第二个链表里的所有值,储存在新的链表中,之后遍历一中所有的值,最后把这些多项式加在一起。
顺序链式一元多项式加法,减法,乘法运算的实现

顺序链式一元多项式加法,减法,乘法运算的实现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 f 2)设计要求(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#include#include#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;< p=""> return 0;}j=p->last;while(p->terms[j].expn=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++)< p="">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)< p=""> {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<<"+"<terms[i].coef;elsecout<terms[i].coef;cout<<"x^"<terms[i].expn;}cout<<endl;< p="">}void menu(){cout<<"\t\t*******数据结构综合性实验*********"<<endl;< p="">cout<<"\t\t***一、多项式的加、减、乘法运算***"<<endl;< p="">cout<<"\t\t******* 1.多项式创建*********"<<endl;< p="">cout<<"\t\t******* 2.多项式相加*********"<<endl;< p="">cout<<"\t\t******* 3.多项式相减*********"<<endl;< p="">cout<<"\t\t******* 4.多项式相乘*********"<<endl;< p="">cout<<"\t\t******* 5.清空多项式*********"<<endl;< p="">cout<<"\t\t******* 0.退出系统*********"<<endl;< p="">cout<<"\t\t****** 请选择(0-5) ********"<<endl;< p="">cout<<"\t\t***********************************"<<="">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程序执行结果</endl;<></endl;<></endl;<></endl;<></endl;<></endl;<></endl;<></endl;<></endl;<></endl;<></term2.expn)<> </m;i++)<></endl;<>。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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 f
2)设计要求
(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中插入一个指数项x
int CreatePolyn(polynomial*P,int m)
//输入m项系数和指数,建立表示一元多项式的有序表p
char compare(term term1,term term2)
//比较指数项term1和指数项term2
polynomial*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)
//输出在顺序存储结构的多项式p
1.4程序源代码
#include<stdlib.h>
#include<stdio.h>
#include<iostream.h>
#define NULL 0
#define MAXSIZE 20
typedef 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)。