一元多项式运算课程设计.docx
《一元多项式运算课程设计.docx》由会员分享,可在线阅读,更多相关《一元多项式运算课程设计.docx(20页珍藏版)》请在冰豆网上搜索。
![一元多项式运算课程设计.docx](https://file1.bdocx.com/fileroot1/2023-2/9/2e3f354f-92ea-4776-9cc7-bd54290d0029/2e3f354f-92ea-4776-9cc7-bd54290d00291.gif)
一元多项式运算课程设计
每组人数1实验机械编号
日期2009年6月22日实验室名称WM2301机房
一、课程设计题目:
一元多项式运算
二、设计内容:
用C++语言编写一段程序,该程序的功能相当于一个一元多项式计算器。
它能够实现依照指数降序排列成立并输出多项式,而且能够完成两个多项式的相加、相减的运算和将其结果输入的功能。
三、设计实现:
1.依照输入创建一元多项式,并用链表实现存储。
2.对已创建的的两个一元多项式进行运算,该题目要实现的运算有,一元多项式加法、减法、乘法运算。
3.一次运算完成实现链表清空操作,可同意用户从头输入。
三、要紧模块:
1.一元多项式的成立。
2.显示一元多项式。
3.一元多项式加法运算。
4.一元多项式减法运算。
5.一元多项式乘法运算。
6.一元多项式清空。
四、程序设计思想:
要紧内容是对一元多项式存储结构的选择,输入多项式采纳头插法的方式,输入多项式中一个项的系数和指数,就产生一个新的节点,成立起它的右指针,并用头节点指向它;尽管一元多项式能够用顺序和链式两种存储结构表示,但顺序结构的最大长度很难确信。
比如当多项式的系数较大时,现在就会浪费了庞大的存储空间,因此应该选择用链式存储结构来存储一元多项式。
单链表的结构体能够用来存储多项式的系数,指数,如此便于实现任意多项式的运算。
五、主程序流程图:
六、程序主界面:
七、程序运行结果:
一元多项式输入界面
加法运算
减法运算
乘法运算
输出
八、体会和总结:
课程设计终于做完了,尽管有些疲劳和困倦,但带给我很多的收成。
数绝结构已经学了一个学期,可能三个多月了,有许多知识都存在似懂非懂的现象,这种现象通过实际的上机操作,实际应用,已经减少了许多。
对这些知识也有了更深的明白得和专门好的把握。
许多困惑,有许多已经通过实际操作解决了,并能够深刻熟悉,但也有很多没有明白。
通过课程设计,明白到了原先开发一个小小的有效系统,是需要考虑到很多方面的问题的,这些都是要在实践中试探的,这与平常做练习是不同的,但也因为平常有许多的练习基础,会使你做启程序来,加倍驾轻就熟。
另外确实是要把错误总结,有许多错误或陷阱是平常自己陷进去的,因此很深刻,但也有些错误或陷阱是自己尚未接触或犯过的,这就应该看多些他人的总结,使自己不犯这些错误。
不让自己掉进这些陷阱。
如此长期总结,会对自己有专门大的帮忙。
附录:
程序源代码#include
#include<>
#include<>
usingnamespacestd;
structNode
{floatcoef;xp=-1;oef;
cout<<"指数:
";
cin>>(newp->data).exp;
if(newp-><0)
{
cout<<"您输入有误,指数不许诺为负值!
"<deletenewp;
i--;
continue;
}
newp->next=NULL;
p=L;
if(newp->==0)
{
cout<<"系数为零,从头输入!
"<deletenewp;
i--;
continue;
}
while((p->next!
=NULL)&&((p->next->data).exp<(newp->data).exp))
{
p=p->next;oef>0)
{
if((p->data).exp==0)
cout<<(p->data).coef;
elseif((p->data).coef==1&&(p->data).exp==1)
cout<<"x";
elseif((p->data).coef==1&&(p->data).exp!
=1)
cout<<"x^"<<(p->data).exp;
elseif((p->data).exp==1&&(p->data).coef!
=1)
cout<<(p->data).coef<<"x";
elsecout<<(p->data).coef<<"x^"<<(p->data).exp;
}
oef<0)
{
if((p->data).exp==0)
cout<<(p->data).coef;
elseif(p->==-1&&p->==1)
cout<<"-x";
elseif(p->==-1&&p->!
=1)
cout<<"-x^"<;
elseif(p->==1)
cout<<<"x";
elsecout<<(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;
elseif((p->data).exp==1&&(p->data).coef!
=1)
cout<<"+"<<(p->data).coef<<"x";
elseif((p->data).exp==1&&(p->data).coef==1)
cout<<"+"<<"x";
elseif((p->data).coef==1&&(p->data).exp!
=1)
cout<<"+"<<"x^"<<(p->data).exp;
elsecout<<"+"<<(p->data).coef<<"x^"<<(p->data).exp;
}
if((p->data).coef<0)
{
if((p->data).exp==0)
cout<<(p->data).coef;
elseif(p->==-1&&p->==1)
cout<<"-x";
elseif(p->==-1&&p->!
=1)
cout<<"-x^"<;
elseif(p->==1)
cout<<<"x";
elsecout<<(p->data).coef<<"x^"<<(p->data).exp;
}
p=p->next;
}
}
cout<}
/*把一个链表的内容复制给另一个链表*/
voidCopyLink(Link&pc,Linkpa)
{
Linkp,q,r;
pc=newLNode;
pc->next=NULL;
r=pc;
p=pa;
while(p->next!
=NULL)
{
q=newLNode;
q->=p->next->;
q->=p->next->;
r->next=q;
q->next=NULL;
r=q;
p=p->next;
}
}
/*将两个一元多项式相加*/
voidPolyAdd(Link&pc,Linkpa,Linkpb)
{
Linkp1,p2,p,pd;
CopyLink(p1,pa);
CopyLink(p2,pb);
pc=newLNode;
pc->next=NULL;
p=pc;
p1=p1->next;
p2=p2->next;
while(p1!
=NULL&&p2!
=NULL)
{
if(p1->
{
p->next=p1;
p=p->next;
p1=p1->next;
}
elseif(p1->>p2->
{
p->next=p2;
p=p->next;
p2=p2->next;
}
else
{
p1->=p1->+p2->;
if(p1->!
=0)
{
p->next=p1;
p=p->next;
p1=p1->next;
p2=p2->next;
}
else
{
pd=p1;
p1=p1->next;
p2=p2->next;
deletepd;
}
}
}
if(p1!
=NULL)
{
p->next=p1;
}
if(p2!
=NULL)
{
p->next=p2;
}
}
/*将两个多项式相减*/
voidPolySubstract(Link&pc,Linkpa,Linkpb)
{
Linkp,pt;
CopyLink(pt,pb);
p=pt;
while(p!
=NULL)
{
(p->data).coef=(-(p->data).coef);
p=p->next;
}
PolyAdd(pc,pa,pt);
DestroyLink(pt);
}
//清屏函数
voidClear()
{
system("pause");
system("cls");
}
/*将两个一元多项式相乘*/
voidPolyMultiply(Link&pc,Linkpa,Linkpb)
{
Linkp1,p2,p,pd,newp,t;
pc=newLNode;
pc->next=NULL;
p1=pa->next;
p2=pb->next;
while(p1!
=NULL)
{
pd=newLNode;
pd->next=NULL;
p=newLNode;
p->next=NULL;
t=p;
while(p2)
{
newp=newLNode;
newp->next=NULL;
newp->=p1->*p2->;
newp->=p1->+p2->;
t->next=newp;
t=t->next;
p2=p2->next;
}
PolyAdd(pd,pc,p);
CopyLink(pc,pd);
p1=p1->next;
p2=pb->next;
DestroyLink(p);
DestroyLink(pd);
}
}
//菜单函数
voidMenu()
{
cout<<""<cout<cout<<"\t╔════════════一元多项式的运算══════════╗"<cout<<"\t║\t\t\t\t\t\t\t║"<cout<<"\t║\t\t\t①新建\t\t\t║"<cout<<"\t║\t\t\t②加法运算\t\t\t║"<cout<<"\t║\t\t\t③减法运算\t\t\t║"<cout<<"\t║\t\t\t④相乘运算\t\t\t║"<cout<<"\t║\t\t\t⑤输出\t\t\t║"<cout<<"\t║\t\t\t⑥清空\t\t\t║"<cout<<"\t║\t\t\t⑦退出\t\t\t║"<cout<<"\t║\t\t\t\t\t\t\t║"<cout<<"\t╚══════════════════════════════╝"<cout<<"\t\t\t\t请选择:
";
}
//判定输入的整数是不是为1到7的数字
intCompareIfNum(inti)
{
if(i>0&&i<8)
return0;
elsereturn1;
}
voidmain()
{
{
system("color4");
//system("pause");
system("colorE");
//system("pause");
}
intn;
LinkL,La=NULL,Lb=NULL;//La,Lb别离为创建的两个多项式
intchoose;
while
(1)
{
Menu();//挪用菜单函数
cin>>choose;
switch(choose)
{
case1:
cout<<"请输入需要运算的第一个一元多项式的项数:
"<cin>>n;
if(CompareIfNum(n)==1)
{
cout<<"输入有误,请从头输入……"<Clear();
break;
}
CreateLink(La,n);
cout<<"请输入需要运算的第二个一元多项式的项数:
"<cin>>n;
if(CompareIfNum(n)==1)
{
cout<<"输入有误,请从头输入……"<Clear();
break;
}
CreateLink(Lb,n);
Clear();
break;
case2:
if(La==NULL||Lb==NULL)
{
cout<<"多项式创建错误,请从头选择……"<Clear();
break;
}
PolyAdd(L,La,Lb);
cout<<""<cout<<"待相加的两个一元多项式为:
"<cout<<""<cout<<"A的多项式为:
";
PrintList(La);
cout<<""<cout<<"B的多项式为:
";
PrintList(Lb);
cout<<""<cout<<"相加后的结果为:
";
PrintList(L);
cout<<""<Clear();
DestroyLink(L);
break;
case3:
if(La==NULL||Lb==NULL)
{
cout<<"多项式创建错误,请从头选择……"<Clear();
break;
}
PolySubstract(L,La,Lb);
cout<<"相减的两个一元多项式为:
"<cout<<""<cout<<"A的多项式为:
";
PrintList(La);
cout<<""<cout<<"B的多项式为:
";
PrintList(Lb);
cout<<""<cout<<"相减后的结果为:
";
PrintList(L);
cout<<""<Clear();
DestroyLink(L);
break;
case4:
if(La==NULL||Lb==NULL)
{
cout<<"多项式创建错误,请从头选择……"<Clear();
break;
}
PolyMultiply(L,La,Lb);
cout<<"相乘的两个一元多项式为:
"<cout<<""<cout<<"A的多项式为:
";
PrintList(La);
cout<<""<cout<<"B的多项式为:
";
PrintList(Lb);
cout<<""<cout<<"相乘后的结果为:
";
PrintList(L);
DestroyLink(L);
cout<<""<Clear();
break;
case5:
if(La==NULL||Lb==NULL)
{
cout<<"多项式创建错误,请从头选择……"<Clear();
break;
}
cout<<"一元多项式A为:
"<PrintList(La);
cout<<""<cout<<"一元多项式B为:
"<PrintList(Lb);
cout<<""<Clear();
break;
case6:
if(La&&Lb)
{
DestroyLink(La);
DestroyLink(Lb);
cout<<"多项式销毁成功!
"<Clear();
}
else
{
cout<<"多项式不存在,请从头选择^^^"<Clear();
}
break;
case7:
exit(0);//exit(0)强制终止程序,返回状态码0表示正常终止
default:
cout<<"输入错误,请从头选择操作……"<Clear();
break;
}
}
}