1、顺序链式一元多项式加法减法乘法运算的实现1.1设计内容及要求1)设计内容(1)使用顺序存储结构实现多项式加、减、乘运算。例如:,求和结果: (2)使用链式存储结构实现多项式加、减、乘运算, 求和结果: 2)设计要求(1)用C语言编程实现上述实验内容中的结构定义和算法。(2)要有main()函数,并且在main()函数中使用检测数据调用上述算法。(3)用switch语句设计如下选择式菜单。 *数据结构综合性实验* *一、多项式的加法、减法、乘法运算* * 1.多项式创建 * * 2.多项式相加 * * 3.多项式相减 * 4.多项式相乘 * 5.清空多项式 * 0.退出系统 * 请选择(05)
2、*请选择(0-5):1.2数据结构设计根据下面给出的存储结构定义:#define MAXSIZE 20 /定义线性表最大容量 /定义多项式项数据类型typedef struct float coef; /系数 int expn; /指数 term,elemType;typedef struct term termsMAXSIZE; /线性表中数组元素 int last; /指向线性表中最后一个元素位置 SeqList;typedef SeqList polynomial;1.3基本操作函数说明 polynomial*Init_Polynomial();/初始化空的多项式int PloynSta
3、tus(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项系数和指数,建立表示一元多项式的有序表pchar compare(term term1,term term2)/比较指数项term1和指数项term2polynomial*addPloyn(polynomial*p1,p
4、olynomial*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 20ty
5、pedef struct float coef; int expn;term,elemType;typedef struct term termsMAXSIZE; 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
6、 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(ilast & p-termsi.expn!=x.expn) i+; if(ip-last) return 0; else return 1; int Ins
7、ert_ElementByOrder(polynomial*p,term x) int j; if(PloynStatus(p)=-1) return 0; if(p-last=MAXSIZE-1) coutThe polym is full!last;while(p-termsj.expn=0) p-termsj+1=p-termsj; j-; p-termsj+1=x; p-last+; return 1;int CreatePolyn(polynomial*P,int m) float coef; int expn; term x; if(PloynStatus(P)=-1) retur
8、n 0; if(mMAXSIZE) printf(顺序表溢出n); return 0; else printf(请依次输入%d对系数和指数.n,m); for(int i=0;iterm2.expn) return; else if(term1.expnterm2.expn) return; else 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; polynom
9、ial*p3=Init_Polynomial(); while(ilast & jlast) switch(compare(p1-termsi,p2-termsj) case: p3-termsk+=p1-termsi+; p3-last+; break; casetermsk+=p2-termsj+; p3-last+; break; case=: if(p1-termsi.coef+p2-termsj.coef!=0) p3-termsk.coef=p1-termsi.coef+p2-termsj.coef; p3-termsk.expn=p1-termsi.expn; k+; p3-la
10、st+; i+; j+; while(ilast) p3-termsk+=p1-termsi+; 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;ilast;i+) p3-termsi.coef=-p2-termsi.coef; p3-term
11、si.expn=p2-termsi.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;ilast;i+) for(k=0;klast;k+) pk=I
12、nit_Polynomial(); pk-last=p1-last; for(j=0;jlast;j+) pk-termsj.coef=p1-termsj.coef*p2-termsk.coef; pk-termsj.expn=p1-termsj.expn+p2-termsk.expn; p3=addPloyn(p3,pk); return p3;void printPloyn(polynomial*p) int i; for(i=0;ilast;i+) if(p-termsi.coef0 & i0) cout+termsi.coef; else couttermsi.coef; coutxt
13、ermsi.expn; coutendl;void menu() couttt*数据结构综合性实验*endl; couttt*一、多项式的加、减、乘法运算*endl; couttt* 1.多项式创建 *endl; couttt* 2.多项式相加 *endl; couttt* 3.多项式相减 *endl; couttt* 4.多项式相乘 *endl; couttt* 5.清空多项式 *endl; couttt* 0.退出系统 *endl; couttt* 请选择(0-5) *endl; couttt*endl;void main() int sel; polynomial*p1=NULL; po
14、lynomial*p2=NULL; polynomial*p3=NULL; while(1) menu(); coutsel; 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(第二个多
15、项式的表达式为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程序执行结果
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1