文档详情

一元多项式问题.doc

发布:2017-12-14约4.18千字共8页下载文档
文本预览下载声明
一元多项式相加问题 本实验的目的是进一步熟练掌握应用链表处理实际问题的能力。 问题描述: 一元多项式相加是通过键盘输入两个形如p0+p1*x^1+p2*x^2+pn*x^n的多项式,经过程序运算后在屏幕上输出它们的相加和。 数据结构设计: 分析任意一元多项式的描述方法可知,一个一元多项式的每一个子项都有“系数—指数”两部分组成,所以可以将它抽象成一个有“系数—指数对”构成的线性表,由于对多项式中系数为0的子项可以不记录它的指数值,对于这样的情况就不再付出存储空间来存放它了。基于这样的分析,可以采用一个带有头结点的单链表来表示一个一元多项式。具体数据类型定义为: typedef struct node{ float coef; int exp; int flag; struct node *next; }PolyNode; 功能(函数)设计: 输入并建立多项式的功能模块 PolyNode * create(){ float A; int B; PolyNode *a=NULL; PolyNode *b=NULL; PolyNode *c=NULL; scanf(%f,%d,A,B); while(A!=0||B!=0){ if(A!=0){ c=new PolyNode; c-coef=A; c-exp=B; c-flag=0; c-next=NULL; if(a==NULL){ a=c; b=a; } else{ b-next=c; b=c; } } scanf(%f,%d,A,B); } return a; } 多项式相加的功能模块 PolyNode *add(PolyNode *p,PolyNode *q){ PolyNode *x,*y; PolyNode *r=NULL; PolyNode *c=NULL; PolyNode *l=NULL; x=p; y=q; while(xy){ r=new PolyNode; if(x-exp==y-exp){ r-coef=x-coef+y-coef; r-exp=x-exp; r-flag=0; r-next=NULL; x-flag=1; y-flag=1; x=x-next; y=y-next; } else if(x-expy-exp){ r-coef=y-coef; r-exp=y-exp; r-flag=0; r-next=NULL; y-flag=1; y=y-next; } else{ r-coef=x-coef; r-exp=x-exp; r-flag=0; r-next=NULL; x-flag=1; x=x-next; } if(c==NULL){ c=r; l=c; } else{ l-next=r; l=r; } } if(x==NULL) x=y; while(x){ r=new PolyNode; r-coef=x-coef; r-exp=x-exp; r-flag=0; r-next=NULL; if(c==NULL){ c=r; l=c; } else{ l-next=r; l=r; } x-flag=1; x=x-next; } return c; } 多项式显示的功能模块 int print(PolyNode *w){ if(w==NULL){ cout0; return 0; } PolyNode *v; v=w; cout(; if(v-coef0)cout-; coutv-coefxv-exp; v=v-next; while(v){ if(v-coef=0)cout+; coutv-coefxv-exp; v=v-next; } cout); } 界面设计: 注意提示用户每一步操作输入的格式和限制,指导用户按照正确的格式输入数据。 如图: 编码实现: #includeiostream #includestdio.h using namespace std; typedef struct node{ float coef; int exp; int flag; struct node *next; }PolyNode; int print(PolyNode *w){ if(w==NU
显示全部
相似文档