一元多项式简单计算课程设计.docx
《一元多项式简单计算课程设计.docx》由会员分享,可在线阅读,更多相关《一元多项式简单计算课程设计.docx(20页珍藏版)》请在冰豆网上搜索。
一元多项式简单计算课程设计
怀化学院计算机系
《数据结构》课程设计报告书
一元多项式简单计算
学生姓名:
**
学号:
**
年级专业及班级:
**
指导老师及职称:
**老师
专业:
计算机科学与技术专业
**·**
提交日期:
**年**月
目录
摘要-------------------------------------------------------------------------------------------2
关键词----------------------------------------------------------------------------------------2
1前言----------------------------------------------------------------------------------------3
2设计分析--------------------------------------------------------------------------------3
2.1一元多项式的建立------------------------------------------------------------------3
2.2显示一元多项式---------------------------------------------------------------------3
2.3一元多项式加法运算---------------------------------------------------------------3
2.4一元多项式相减---------------------------------------------------------------------4
3实现方法--------------------------------------------------------------------------------4
3.1函数功能介绍------------------------------------------------------------------------4
3.1.1结构体定义---------------------------------------------------------------------4
3.1.2函数功能描述------------------------------------------------------------------4
3.2函数功能实现------------------------------------------------------------------------4
3.2.1源码分析------------------------------------------------------------------------5
3.2.2主函数---------------------------------------------------------------------------5
3.2.3被调用函数----------------------------------------------------------------------5
3.3程序演示-------------------------------------------------------------------------------19
3.4程序调试-------------------------------------------------------------------------------20
4参考文献--------------------------------------------------------------------------------21
5结论--------------------------------------------------------------------------------------21
6致谢--------------------------------------------------------------------------------------21
7附录--------------------------------------------------------------------------------------22
一元多项式简单计算
学生:
**
指导老师:
**
(**系,****)
摘要:
本次设计的目的是设计一个简单的一元多项式的简单计算器,达到输入显示一元多项式和两个一元多项式相加相减的功能。
这个程序主要采用的语言工具是C语言,编程的环境是VC6.0.系统有若干个功能函数组成,用到了结构体、指针、函数调用、带链表和常见的循环等手法,经过一次又一次的调式最终圆满完成任务。
在这次的动手过程中,我发现要很好地完成一个程序除了对专业知识的了解和熟练应用以外,还需要编程者有很好的耐性以及细心的良好习惯。
关键词:
结构体;链表;指针;循环;C;
1前言
本次课程设计的目的是设计一个一元多项式的简单计算器,能够实现以下简单的功能:
(1)输入并建立多项式;
(2)输出多项式;
(3)两个多项式想加,建立并输出和多项式;
(4)两个多项式相减,建立并输出差多项式。
2设计分析
2.1一元多项式的建立
输入多项式采用头插法的方式,输入多项式中的一个系数和指数,就产生一个新的节点,建立起它的右指针,并用头节点指向它,为了判断一个多项式是否输入结束,定义一个结束标志,当tail指向非空时就继续,当tail指向为空时,就结束一元多项式的输入。
2.2显示一元多项式
如果系数是大于0的话就输出+系数x^指数的形式,如果系数是小于0的话就输出系数x^指数的形式,如果大于0的话就直接输出系数,如果系数是1的话就直接输出1,如果系数-1的话就直接输出-1
2.3一元多项式加法运算
它从两个多项式的头部开始,两个多项式的每一项都不为空时,如果指数相等的话,系数就应该相加,相加的和不为0的话,用头插建立一个新的节点。
P的指数小于q的指数的话,就应该复制q节点到多项式中。
P的指数大于q的指数的话,就应该复制p节点到多项式中。
当第二个多项式空,第一个多项式不为空时,将第一个多项式用新的节点产生。
当第一个多项式空,第二个多项式不为空时,将第二个多项式用新的节点产生。
2.4一元多项式相减
它从两个多项式的头部开始,两个多项式的每一项都不为空时,如果指数相等的话,系数就应该相减,相减的差不为0的话,用头插建立一个新的节点。
P的指数小于q的指数的话,就应该复制q节点到多项式中。
P的指数大于q的指数的话,就应该复制p节点到多项式中,并,并且建立的节点的系数为原来的相反数。
当第二个多项式空,第一个多项式不为空时,将第一个多项式用新的节点产生。
当第一个多项式空,第二个多项式不为空时,将第二个多项式用新的节点产生,并且建立的节点的系数为原来的相反数。
3实现方法
本程序通过c语言来实现,在vc6.0下运行通过。
3.1函数功能介绍
3.1.1结构体定义
typedefstructnode
{
floatxi;
intzhi;
node*next;
}Node;
3.1.2函数功能描述
1voidCreatNode()一元多项式的输入
2voidOut()一元多项式的输出
3voidAddNode()一元多项式相加
4voidDecNode()一元多项式相减
3.2函数功能实现
3.2.1源码分析
程序预处理:
#include标准库头文件
#include标准库头文件
usingnamespacestd;
3.2.2主函数
intmain()
{
Head1=(Node*)malloc(sizeof(Node));//开辟空间
Head2=(Node*)malloc(sizeof(Node));
Head3=(Node*)malloc(sizeof(Node));
Head1->zhi=0;//赋初值为0
Head2->zhi=0;
Head3->zhi=0;
for(;;)
{
switch(menu())//菜单选择
{
case1:
CreatNode();break;
case2:
Out();break;
case3:
AddNode();break;
case4:
DecNode();break;
default:
return1;
}
}
}
3.2.3被调用函数
(1)voidCreatNode()
voidCreatNode()
{
intn;
inti;
intname;
Node*p,*tail;
system("cls");//清屏,清除的是上一个回车的内容,
cout<<"请输入要参加运算的第一个多项式的代号(用!
0一个整数表示):
";
cin>>name;
Head1=(Node*)malloc(sizeof(Node));
Head1->daihao=name;
cout<<"请输入项数:
";
cin>>n;
tail=Head1;
cout<<"请按照指数递减序输入多项式\n";
for(i=0;i{
p=(Node*)malloc(sizeof(Node));
cout<<"请输入第"<
";
cin>>p->xi>>p->zhi;
tail->next=p;
tail=p;
}
tail->next=NULL;
cout<<"第一个多项式创建完毕!
\n"<cout<<"请输入要参加运算的第二个多项式的代号(!
0用一个整数表示):
";
cin>>name;
Head2=(Node*)malloc(sizeof(Node));
Head2->daihao=name;
cout<<"请输入项数:
";
cin>>n;
tail=Head2;
cout<<"请按照指数递减序输入多项式\n";
for(i=0;i{
p=(Node*)malloc(sizeof(Node));
cout<<"请输入第"<
";
cin>>p->xi>>p->zhi;
tail->next=p;
tail=p;
}
tail->next=NULL;
cout<<"第二个多项式创建完毕!
\n";
getchar();getchar();
system("cls");
}
(2).voidOut()
voidOut()
{
intname;
Node*q;
system("cls");
cout<<"请输入要输出的多项式的代号:
";
cin>>name;
if(name!
=Head1->daihao&&name!
=Head2->daihao&&Head3->daihao==name)cout<<"此多项式不存在!
";
else
{
if(name==Head1->daihao)
{
q=Head1->next;
if(q)
{
if(q->zhi)
{
if(q->xi==1)
cout<<"x";
else
cout<xi<<"x";
if(q->zhi>1)
cout<zhi;
}
else
{
cout<<1<}
}
q=q->next;
while(q)
{
if(q->zhi)
{
if(q->xi==1)
cout<<"+x";
elseif(q->xi==-1)
cout<<"-x";
elseif(q->xi>0)
cout<<"+"<xi<<"x";
elseif(q->xi<0)
cout<xi<<"x";
elseif(q->xi==0)
cout<<0;
if(q->xi&&q->zhi>1)
cout<zhi;
}
else
{
cout<<"+1"<}
q=q->next;
}
if(Head1->next==NULL)cout<<"0"<}
else
{
if(name==Head2->daihao)
{
q=Head2->next;
if(q)
{
if(q->zhi)
{
if(q->xi==1)
cout<<"x";
else
cout<xi<<"x";
if(q->zhi>1)
cout<zhi;
}
else
{
cout<<1<}
}
q=q->next;
while(q)
{
if(q->zhi)
{
if(q->xi==1)
cout<<"+x";
elseif(q->xi==-1)
cout<<"-x";
elseif(q->xi>0)
cout<<"+"<xi<<"x";
elseif(q->xi<0)
cout<xi<<"x";
elseif(q->xi==0)
cout<<0;
if(q->xi&&q->zhi>1)
cout<zhi;
}
else
{
cout<<"+1"<}
q=q->next;
}
if(Head2->next==NULL)cout<<"0"<}
else
{
q=Head3->next;
if(q)
{
if(q->zhi)
{
if(q->xi==1)
cout<<"x";
elseif(q->xi==-1)
cout<<"-x";
else
cout<xi<<"x";
if(q->zhi!
=1)
cout<zhi;
}
else
{
cout<<1<}
q=q->next;
}
while(q)
{
if(q->zhi)
{
if(q->xi==1)
cout<<"+x";
elseif(q->xi==-1)
cout<<"-x";
elseif(q->xi>0)
cout<<"+"<xi<<"x";
elseif(q->xi<0)
cout<xi<<"x";
elseif(q->xi==0)
cout<<0;
if(q->xi&&q->zhi>1)
cout<zhi;
}
else
{
cout<<"+1"<}
q=q->next;
}
if(Head3->next==NULL)cout<<"0"<}
}
}
getchar();
getchar();
system("cls");
}
(3).voidAddNode()
voidAddNode()
{
intname1,name2,name;
Node*p1,*p2,*p,*tail;
p1=Head1->next;
p2=Head2->next;
system("cls");
cout<<"请输入加式一的代号:
";
cin>>name1;
if(name1!
=Head1->daihao&&name1!
=Head2->daihao)
{
cout<<"此多项式不存在!
";
getchar();
getchar();
system("cls");
return;
}
cout<<"请输入加式二的代号:
";
cin>>name2;
if(name2!
=Head1->daihao&&name2!
=Head2->daihao)
{
cout<<"此多项式不存在!
";
getchar();
getchar();
system("cls");
return;
}
cout<<"请输入要创建的和式代号:
";
cin>>name;
Head3=(Node*)malloc(sizeof(Node));
Head3->zhi=name;
tail=Head3;
while(p1&&p2)
{
inte1,e2;
e1=p1->zhi;
e2=p2->zhi;
if(e1>e2)
{
p=(Node*)malloc(sizeof(Node));
tail->next=p;
p->xi=p1->xi;
p->zhi=p1->zhi;
tail=p;
p1=p1->next;
}
elseif(e1==e2)
{
floatsum=p1->xi+p2->xi;
if(sum!
=0.0)
{
p=(Node*)malloc(sizeof(Node));
tail->next=p;
tail=p;
p->xi=sum;
p->zhi=p1->zhi;
}
p1=p1->next;
p2=p2->next;
}
elseif(e1{
p=(Node*)malloc(sizeof(Node));
tail->next=p;
p->xi=p2->xi;
p->zhi=p2->zhi;
tail=p;
p2=p2->next;
}
}
while(p1)
{
p=(Node*)malloc(sizeof(Node));
p->xi=p1->xi;
p->zhi=p1->zhi;
tail->next=p;
tail=p;
p1=p1->next;
}
while(p2)
{
p=(Node*)malloc(sizeof(Node));
p->xi=p2->xi;
p->zhi=p2->zhi;
tail->next=p;
tail=p;
p2=p2->next;
}
tail->next=NULL;
getchar();
getchar();
system("cls");
}
4.voidDecNode()
voidDecNode()
{
Node*p1,*p2,*p,*tail;
p1=Head1->next;
p2=Head2->next;
system("cls");
intname1,name2,name;
cout<<"请输入被减式子的代号:
";
cin>>name1;
if(name1!
=Head1->daihao&&name1!
=Head2->daihao)
{
cout<<"此多项式不存在!
";
getchar();
getchar();
system("cls");
return;
}
cout<<"请输入减式的代号:
";
cin>>name2;
if(name2!
=Head1->daihao&&name2!
=Head2->daihao)
{
cout<<"此多项式不存在!
";
getchar();
getchar();
system("cls");
return;
}
cout<<"请输入要结果式子的代号:
";
cin>>name;
Head3=(Node*)malloc(sizeof(Node));
Head3->zhi=name;
tail=Head3;
while(p1&&p2)
{
inte1,e2;
e1=p1->zhi;
e2=p2->zhi;
if(e1>e2)
{
p=(Node*)malloc(sizeof(Node));
tail->next=p;
tail=p;
p->xi=p1->xi;
p->zhi=p1->zhi;
p1=p1->next;
}
elseif(e1==e2)
{
floatdif=p1->xi-p2->xi;
if(dif!
=0.0)
{
p=(Node*)malloc(sizeof(Node));
tail->next=p;
tail=p;
p->xi=dif;
p->zhi=p1->zhi;
}
p1