logo资料库

一元多项式报告.doc

第1页 / 共14页
第2页 / 共14页
第3页 / 共14页
第4页 / 共14页
第5页 / 共14页
第6页 / 共14页
第7页 / 共14页
第8页 / 共14页
资料共14页,剩余部分请下载后查看
一元多项式计算: 程序要求: 1)、能够按照指数降序排列建立并输出多项式; 2)、能够完成两个多项式的相加、相减,并将结果输入。 概要设计: 1. 功能:将要进行运算的多项式输入输出。 2. 数据流入:要输入的多项式的系数与指数。 3. 数据流出:合并同类项后的多项式。 4. 程序流程图:多项式输入流程图如图 3.2.1 所示。 5. 测试要点:输入的多项式是否正确,若输入错误则重新输入 开始 申请结点空间 输入多项式的项数 输入多项式各项的系数 x, 指数 y 输出已输入的多项式 否 是否输入正确 是 合并同类项 结束 2、多项式的加法 (1)功能:将两多项式相加。 (2)数据流入:输入函数。 (3)数据流出:多项式相加后的结果。 (4)程序流程图:多项式的加法流程图如图 3.2.2 所示。 (5)测试要点:两多项式是否为空,为空则提示重新输入,否则,进行运算。
开始 定义存储结果的空链 r 存储多项式 1 的空 链 P 是否为空 否 存储多项式 2 的空 链 Q 是否为空 是 是 否 同指数 项系数相 加后存入 r 直 接 把 q 中 各项存入 r 直 接 把 p 中 各 项 存 入 r 输出存储多项式的和的链 r 合并同类项 结束 3、多项式的减法 (1)功能:将两多项式相减。 (2)数据流入:调用输入函数。 (3)数据流出:多项式相减后的结果。 (4)程序流程图:多项式的减法流程图如图 3.2.3 所示。 (5)测试要点:两多项式是否为空,为空则提示重新输入,否则,进行运算。
开始 定义存储结果的空链 r 存储多项式 1 的空 链 P 是否为空 否 存储多项式 2 的空 链 Q 是否为空 是 是 否 同指数 项系数相 加后存入 r 直 接 把 q 中 各项存入 r 把 p 中 各项 系数 改变符号后存入 r 输出存储多项式的和的链 r 合并同类项 结束 详细代码: #include #include #include using namespace std; struct Node { float coef;//结点类型 int exp; }; typedef Node polynomial;
struct LNode { polynomial data;//链表类型 LNode *next; }; typedef LNode* Link; void CreateLink(Link &L,int n); void PrintList(Link L); void PolyAdd(Link &pc,Link pa,Link pb); void PolySubstract(Link &pc,Link pa,Link pb); void CopyLink(Link &pc,Link pa); void PolyMultiply(Link &pc,Link pa,Link pb); int JudgeIfExpSame(Link pa,Link e); void DestroyLink(Link &L); int CompareIfNum(int i); void DestroyLink(Link &L) { Link p; p=L->next; while(p) { L->next=p->next; delete p; p=L->next; } delete L; L=NULL; } //创建含有n个链表类型结点的项,即创建一个n项多项式 void CreateLink(Link &L,int n) { if(L!=NULL) { DestroyLink(L); } Link p,newp; L=new LNode; L->next=NULL; (L->data).exp=-1;//创建头结点 p=L; for(int i=1;i<=n;i++) { newp=new LNode; cout<<"请输入第"<
cout<<"系数:"; cin>>(newp->data).coef; cout<<"指数:"; cin>>(newp->data).exp; if(newp->data.exp<0) { cout<<"您输入有误,指数不允许为负值!"<next=NULL; p=L; if(newp->data.coef==0) { cout<<"系数为零,重新输入!"<next!=NULL)&&((p->next->data).exp<(newp->data).exp)) { p=p->next; //p指向指数最小的那一个 } if(!JudgeIfExpSame( L, newp)) { newp->next=p->next; p->next=newp; } else { cout<<"输入的该项指数与多项式中已存在的某项相同,请重新创建一个正确的多项式 "<
p=L->next; while(p!=NULL&&(e->data.exp!=p->data.exp)) p=p->next; if(p==NULL)return 0; else return 1; } /*输出链表*/ void PrintList(Link L) { Link p; if(L==NULL||L->next==NULL) cout<<"该一元多项式为空!"<next; //项的系数大于的种情况 if((p->data).coef>0) { if((p->data).exp==0) cout<<(p->data).coef; else if((p->data).coef==1&&(p->data).exp==1) cout<<"x"; else if((p->data).coef==1&&(p->data).exp!=1) cout<<"x^"<<(p->data).exp; else if((p->data).exp==1&&(p->data).coef!=1) cout<<(p->data).coef<<"x"; else cout<<(p->data).coef<<"x^"<<(p->data).exp; } //项的系数小于的种情况 if((p->data).coef<0) { if((p->data).exp==0) cout<<(p->data).coef; else if(p->data.coef==-1&&p->data.exp==1) cout<<"-x"; else if(p->data.coef==-1&&p->data.exp!=1) cout<<"-x^"<data.exp; else if(p->data.exp==1) cout<data.coef<<"x"; else cout<<(p->data).coef<<"x^"<<(p->data).exp; } p=p->next; while(p!=NULL)
{ if((p->data).coef>0) { if((p->data).exp==0) cout<<"+"<<(p->data).coef; else if((p->data).exp==1&&(p->data).coef!=1) cout<<"+"<<(p->data).coef<<"x"; else if((p->data).exp==1&&(p->data).coef==1) cout<<"+"<<"x"; else if((p->data).coef==1&&(p->data).exp!=1) cout<<"+"<<"x^"<<(p->data).exp; else cout<<"+"<<(p->data).coef<<"x^"<<(p->data).exp; } if((p->data).coef<0) { if((p->data).exp==0) cout<<(p->data).coef; else if(p->data.coef==-1&&p->data.exp==1) cout<<"-x"; else if(p->data.coef==-1&&p->data.exp!=1) cout<<"-x^"<data.exp; else if(p->data.exp==1) cout<data.coef<<"x"; else cout<<(p->data).coef<<"x^"<<(p->data).exp; } p=p->next; } } cout<next=NULL; r=pc; p=pa; while(p->next!=NULL) { q=new LNode; q->data.coef=p->next->data.coef; q->data.exp=p->next->data.exp;
r->next=q; q->next=NULL; r=q; p=p->next; } } /*将两个一元多项式相加*/ void PolyAdd(Link &pc,Link pa,Link pb) { Link p1,p2,p,pd; CopyLink(p1,pa); CopyLink(p2,pb); pc=new LNode; pc->next=NULL; p=pc; p1=p1->next; p2=p2->next; while(p1!=NULL&&p2!=NULL) { if(p1->data.expdata.exp) { p->next=p1; p=p->next; p1=p1->next; } else if(p1->data.exp>p2->data.exp) { p->next=p2; p=p->next; p2=p2->next; } else { p1->data.coef=p1->data.coef+p2->data.coef; if(p1->data.coef!=0) { p->next=p1; p=p->next; p1=p1->next; p2=p2->next; } else { pd=p1;
分享到:
收藏