当前位置:文档之家› 一元多项式计算

一元多项式计算


} if(!JudgeIfExpSame( L, newp)) { newp->next=p->next; p->next=newp; } else { cout<<"输入的该项指数与多项式中已存在的某项相同,请 重新创建一个正确的多项式"<<endl; delete newp; DestroyLink(L); CreateLink(L,n); //创建多项式没有成功,递归调用重新 创建 break; } } } /*判D断指数是否与多项式中已存在的某项相同/ int JudgeIfExpSame(Link L,Link e) { Link p; 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<<"该一元多项式为空"<<endl; else {
6、参考文献
[1] 严蔚敏,吴伟民 编著. 数据结构(C 语言 版)--北京: 清华大学出版社,2007.2 [2]严蔚敏,吴伟民 米 宁 编著. 数据结构题集 (C 语言版)--北京: 清华大学出版社, 2007.3 [3]网上搜索相关程序作为参考
附录:
#include<iostream> #include<conio.h> #include<stdlib.h> using namespace std;
1.课程设计的目的
(1) 熟练使用 C ++语言编写程序,解决实际问 题; (2) 了解并掌握数据结构与算法的设计方法,具备 初步的独立分析和设计能力; (3) 初步掌握软件开发过程的问题分析、系统设 计、程序编码、测试等基本方法和技能; (4) 提高综合运用所学的理论知识和方法独立分析 和解决问题的能力;
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; } //创建个项项式 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<<"请输入第"<<i<<"项的系数和指数:"<<endl; cout<<"系数:"; cin>>(newp->data).coef; cout<<"指数:"; cin>>(newp->data).exp; if(newp->data.exp<0) { cout<<"您输入有误,指数不允许为负值!"<<endl; delete newp; i--; continue; } newp->next=NULL; p=L; if(newp->data.coef==0) { cout<<"系数为0,重新输入!"<<endl; delete newp; i--; continue; } while((p->next!=NULL)&&((p->next->data).exp>(newp>data).exp)) { p=p->next; //p指向指数y最大的那一个?
2.需求分析
1. 能够按照指数降序排列建立并输出多项式; 2.能够完成两个多项式的相加、相减,并将结果 输入。
3.一元多项式问题的设计
多项式的加法
1.功能:将要进行运算的多项式输入输出。 2.数据流入:要输入的多项式的系数与指数。 3.数据流出:合并同类项后的多项式。 4.程序流程图:多项式输入流程图如图3.2.1所 示。 5.测试要点:输入的多项式是否正确,若输入错 误则重新输入
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^"<<p->data.exp; else if(p->data.exp==1) cout<<p->data.coef<<"x"; else cout<<(p->data).coef<<"x^"<<(p->data).exp; } p=p->next; } } cout<<endl; } /*把一个链表的内容复制给另一个链表*/ void CopyLink(Link &pc,Link pa) { Link p,q,r; pc=new LNode; pc->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;
p=p->next; p1=p1->next; p2=p2->next; } else { pd=p1; p1=p1->next; p2=p2->next; delete pd; } } } if(p1!=NULL) { p->next=p1; } if(p2!=NULL) { p->next=p2; } } /*将两个多项式相减*/ void PolySubstract(Link &pc,Link pa,Link pb) { Link p,pt; CopyLink(pt,pb); p=pt; while(p!=NULL) { (p->data).coef=(-(p->data).coef); p=p->next; } PolyAdd(pc,pa,pt); DestroyLink(pt); }
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.exp<p2->data.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;
相关主题