一元多项式运算Word格式文档下载.docx
- 文档编号:22521760
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:27
- 大小:217.28KB
一元多项式运算Word格式文档下载.docx
《一元多项式运算Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《一元多项式运算Word格式文档下载.docx(27页珍藏版)》请在冰豆网上搜索。
式系数是否为0删除该项
Y判断输入的两个多项
运算时系数相加式指数是否相等
判断输入的多项式1,输入的第一个多
2指数e1>
e2项式为A
输入的第2个多项式为B
进行运算
图3-2一元多项式相加
3.3一元多项式相乘
根据多项式的乘法运算规律,在进行多项式相乘时将两个多相识的洗漱相成指数相加,操作流程图如图3-3所示:
给出运算的两个多项式
按系数相乘指数相加进行运算
将运算结果相加并输出
图3-3一元多项式相乘
3.4一元多项式求导
根据一元多项式求导法则,在进行多项式求导时将多项式各项转换成:
系数为原系数与原指数的乘积,指数转换成圆指数减1,操作流程图如图3-4:
将原系数与指数相
乘作为新的系数,指数
减1作为新的指数
求导成功
4课程设计的源程序代码
#include<
iostream>
//标准输入输出流
conio.h>
//使程序中可用键盘输入函数
stdlib.h>
//使程序中可用系统标准输出函数
usingnamespacestd;
//命名空间std内定义的所有标识符均有效
structNode
{
floatcoef;
//结点类型,系数
intexp;
//指数
};
typedefNodepolynomial;
structLNode
polynomialdata;
//链表类型
LNode*next;
typedefLNode*Link;
/*申明各功能函数*/
voidCreateLink(Link&
L,intn);
intJudgeIfExpSame(Linkpa,Linke);
voidPrintList(LinkL);
voidCopyLink(Link&
pc,Linkpa);
voidPolyAdd(Link&
pc,Linkpa,Linkpb);
voidPolyMultiply(Link&
voidDestroyLink(Link&
L);
intCompareIfNum(inti);
/*创建含有n个链表类型结点的项,即创建一个n项多项式*/
L,intn)
if(L!
=NULL)
DestroyLink(L);
}
Linkp,newp;
L=newLNode;
L->
next=NULL;
(L->
data).exp=-1;
//创建头结点
p=L;
for(inti=1;
i<
=n;
i++)
newp=newLNode;
cout<
<
"
请输入第"
项的系数和指数:
endl;
系数:
;
cin>
>
(newp->
data).coef;
指数:
data).exp;
if(newp->
data.exp<
0)
{
endl<
您输入有误,指数不允许为负值!
deletenewp;
i--;
continue;
}
newp->
p=L;
data.coef==0)
系数为零,重新输入!
while((p->
next!
=NULL)&
&
((p->
next->
data).exp<
data).exp))
p=p->
next;
//p指向指数最小的那一个
if(!
JudgeIfExpSame(L,newp))
next=p->
p->
next=newp;
else
输入的该项指数与多项式中已存在的某项相同,请重新创建一个正确的多项式"
CreateLink(L,n);
//创建多项式没有成功,递归调用重新创建
break;
/*判断指数是否与多项式中已存在的某项相同*/
intJudgeIfExpSame(LinkL,Linke)
Linkp;
p=L->
while(p!
=NULL&
(e->
data.exp!
=p->
data.exp))
if(p==NULL)
return0;
elsereturn1;
/*输出链表*/
voidPrintList(LinkL)
if(L==NULL||L->
next==NULL)
该一元多项式为空!
else
p=L->
//项的系数大于0的5种情况
if((p->
data).coef>
{
data).exp==0)
(p->
//如果指数为0则直接输出系数
elseif((p->
data).coef==1&
data).exp==1)
x"
//如果系数和指数均为1,则输出x
data).exp!
=1)
x^"
//如果系数为1,指数不为1,则输出x的指数次方
data).exp==1&
data).coef!
data).coef<
//如果系数不为1,指数为1,则输出系数倍x
elsecout<
//如果系数和指数都不为1,则输出系数乘以x的指数次方
//项的系数小于0的5种情况
//如果指数为0,则直接输出系数
elseif(p->
data.coef==-1&
p->
data.exp==1)
-x"
//如果系数为-1,指数为1,则输出-x
-x^"
data.exp;
//如果系数为-1,指数不为1,则输出x的指数次方的相反数
data.coef<
//如果指数为1,则输出系数倍x
//如果指数不为1,系数不为-1,则输出系数倍x的指数次方
while(p!
0)//系数大于0时输出情况
data).exp==0)
+"
=1)
data).coef==1)
0)//系数小于0时输出情况
cout<
/*把一个链表的内容复制给另一个链表*/
pc,Linkpa)
Linkp,q,r;
pc=newLNode;
pc->
r=pc;
p=pa;
while(p->
q=newLNode;
q->
data.coef=p->
data.coef;
data.exp=p->
r->
next=q;
r=q;
/*将两个一元多项式相加*/
pc,Linkpa,Linkpb)
{
Linkp1,p2,p,pd;
CopyLink(p1,pa);
CopyLink(p2,pb);
p=pc;
p1=p1->
p2=p2->
while(p1!
p2!
if(p1->
p2->
data.exp)
next=p1;
p1=p1->
elseif(p1->
data.exp>
next=p2;
p2=p2->
else
p1->
data.coef=p1->
data.coef+p2->
//如果指数相同,运算时系数想加
data.coef!
=0)
pd=p1;
deletepd;
//如果系数为0,则删除该项
if(p1!
if(p2!
//清屏函数
voidClear()
system("
pause"
);
cls"
}//让用户重新选择
/*将两个一元多项式相乘*/
Linkp1,p2,p,pd,newp,t;
p1=pa->
p2=pb->
pd=newLNode;
pd->
p=newLNode;
t=p;
while(p2)
data.coef*p2->
//系数相乘
data.exp=p1->
data.exp+p2->
//指数相加
t->
t=t->
PolyAdd(pd,pc,p);
CopyLink(pc,pd);
p2=pb->
DestroyLink(p);
DestroyLink(pd);
/*销毁链表类型结点*/
L)
while(p)
L->
deletep;
deleteL;
L=NULL;
//菜单函数
voidMenu()
================================一元多项式的四则运算============================"
\t\t\t\t\t\t\t\t"
[1]创建要运算的两个一元多项式\t\t"
[2]将两个一元多项式相加\t\t\t"
[3]将两个一元多项式相乘\t\t\t"
[4]显示两个一元多项式\t\t\t"
[5]销毁所创建的二个多项式\t\t"
[6]退出\t\t\t\t\t"
请选择:
//判断输入的整数是不是为1到7的数字
intCompareIfNum(inti)
if(i>
0&
7)
return0;
//返回1时出错,因为菜单中只有1~7
voidmain()
intn;
LinkL,La=NULL,Lb=NULL;
//La,Lb分别为创建的两个多项式
intchoose;
while
(1)
Menu();
//调用菜单函数
choose;
switch(choose)
case1:
请输入你要运算的第一个一元多项式的项数:
n;
if(CompareIfNum(n)==1)
您的输入有误,请重新输入……"
Clear();
CreateLink(La,n);
请输入你要运算的第二个一元多项式的项数:
CreateLink(Lb,n);
case2:
if(La==NULL||Lb==NULL)
您的多项式创建有误,请重新选择……"
PolyAdd(L,La,Lb);
设相加的两个一元多项式为A和B则:
A的多项式为:
PrintList(La);
B的多项式为:
PrintList(Lb);
相加后的结果为:
PrintList(L);
case3:
PolyMultiply(L,La,Lb);
设相乘的两个一元多项式为A和B则:
相乘后的结果为:
PrintList(L);
DestroyLink(L);
case4:
一元多项式A为:
一元多项式B为:
case5:
if(La&
Lb)
DestroyLink(La);
DestroyLink(Lb);
多项式销毁成功!
多项式不存在,请重新选择^^^"
case6:
exit(0);
//exit(0)强制终止程序,返回状态码0表示正常结束
default:
您的输入有误,请重新选择操作……"
5运行结果
5.1程序运行开始界面
在程序开始运行时,会出现一个编号1-6的菜单并提示选择,如下图5-1所示:
图5-1最初运行界面
5.2多项式创建界面
选择1,创建两个一元多项式,按顺序操作,录入两个一元多项式,结果如图5-2所示:
图5-2多项式创建界面
5.3两个多项式相加界面
选择2,将两个一元多项式相加,操作后结果如图5-3所示:
图5-3两个多项式相加界面
5.4两个多项式相乘界面
选择3将两个一元多项式相乘,操作后结果如图5-4所示:
图5-4两个多项式相乘界面
5.5两个多项式显示界面
选择4显示两个一元多项式,操作后结果如下图所示:
图5-5两个多项式显示
5.6多项式销毁界面
选择5,销毁所创建的两个多项式,操作后结果如图5-6所示:
图5-6多项式销毁界面
5.7输入报错界面
选择7,超出了范围显示错误报告,操作后结果如图5-7所示:
图5-7输入报错界面
5.8退出程序界面
选择6,退出程序,操作后结果如图5-8所示:
图5-8程序退出界面
6课程设计总结
尽管说课程设计题目老师给的比较早,但是由于一学位课程实在太紧,加之考试有较多,自己编程能力有限,所以这个简单的多项式运算就让我大伤脑筋。
虽然我到处查资料,试图能够完成一元多项式的求导,但是还是很不尽人意,最终只完成了多项式的加法、乘法和输出,求导没有完成。
从这次课程设计中我也学到了很多,深刻认识到编程中结构化和模块化的重要性。
当然也注意到很多细节问题是平时编小程序时经常疏忽的,如局部变量,外部变量等的定义与使用。
虽然这次课程设计并非做的好,但我知道这也只不过是另一次尝试,一次考验。
而且通过这次课程设计,我深知在做一件比较专业的事情的时候,没有其专业知识是绝对不可能把它做好的,也许并非这个一元多项式运算难及求导本身难,而是自己的编程知识缺乏了点,所以一直在想我该先做什么,后来,我就去查阅了一些资料,就把目标锁定在要实现的功能上,从简单到容易,所以就构思了一下整体结构,然后开始找资料,写程序。
但不管怎样,我受益还是颇多的,起码让我认识到自身编程知识还是有些欠缺的,所以我以后会踏踏实实的走好每一步。
7参考书目
[1]杨秀锦,张红梅.《数据结构》.西安电子科技大学出版社
[2]谭浩强.《C++程序设计》.清华大学出版社
[3]数据结构课程设计一元多项式的四则运算.豆丁,
htt
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一元 多项式 运算
![提示](https://static.bdocx.com/images/bang_tan.gif)