算术表达式的求解课程设计说明书.docx
- 文档编号:4606111
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:14
- 大小:76.80KB
算术表达式的求解课程设计说明书.docx
《算术表达式的求解课程设计说明书.docx》由会员分享,可在线阅读,更多相关《算术表达式的求解课程设计说明书.docx(14页珍藏版)》请在冰豆网上搜索。
算术表达式的求解课程设计说明书
一、设计题目
算术表达式的求解
二、设计内容
给定一个算术表达式,通过程序求出最后的结果。
具体内容如下:
(1)从键盘输入要求解的算术表达式;
(2)采用栈结构进行算术表达式的求解过程;
(3)能够判断算术表达式正确与否;
(4)对于错误表达式给出提示;
(5)对于正确的表达式给出最后的结果;
三、概要设计
设计的内容,可以确定所需的模块及模块间调用关系如流程图所示:
模块的关系图
四、算法描述
栈结构进行算术表达式的求解过程,其各个模块的流程图,如下图所示:
设计源代码
#include"iostream.h"
#include"stdlib.h"
#include"math.h"
#include"time.h"
#defineTRUE1
#defineFALSE0
#defineERROR-1
typedefintStatus;//用模板实现的链式结构堆栈类
template
classstack
{
private:
structlink
{
Tdata;//结点数据域
link*next;//下一结点指针
link(TData,link*Next)
{//结构体构造函数
data=Data;
next=Next;
}
}*head;//堆栈顶指针
public:
stack();//构造函数(初始化栈)
~stack();//析构函数(销毁栈)
voidpush(TData);//压栈操作
Tgettop()const;//取栈顶元素
Tpop();//出栈操作
Tgetvalue(intindex);//返回栈底开始第INDEX个栈中值
voidtraverse(intn);//遍历栈N个数换行
intempty();//判断栈是否为空,1是,0非
intsizeofstack();//返回栈的大小
voidclear();//清空栈
};
//类模板成员函数的实现
template
:
stack()//构造函数
{
head=0;
}
template
:
~stack()//析构函数
{
link*cursor=head;
while(head)
{
cursor=cursor->next;
deletehead;
head=cursor;
}
}
template
:
push(TData)//压栈操作
{
head=newlink(Data,head);
}
template
:
gettop()const//取栈顶元素
{
returnhead->data;
}
template
:
pop()//出栈操作
{
if(head==0)return0;
Tresult=head->data;
link*oldhead=head;
head=head->next;
deleteoldhead;
returnresult;
}
template
:
getvalue(intindex)//返回栈底开始第INDEX个栈中值
{
link*cursor=head;
inti=1;
intstacklen=sizeofstack();
if(index<=0||index>stacklen)return0;
while(i<=(stacklen-index))
{
cursor=cursor->next;
i++;
}
returncursor->data;
}
template
:
traverse(intn)//遍历栈
{
link*cursor=head;
intiEnterSign=1;//换行标识
while(cursor)
{
cout<
if(iEnterSign%n==0)cout< cursor=cursor->next; iEnterSign++; } if((iEnterSign-1)%n! =0)cout< } template : empty()//判断栈是否为空,1是,0非 { returnhead==0? 1: 0; } template : sizeofstack()//返回栈的大小 { intsize=0; link*cursor=head; while(cursor) { cursor=cursor->next; size++; } returnsize; } template : clear()//清空栈 { link*cursor=head; while(cursor&&cursor->next) { cursor=cursor->next; deletehead; head=cursor; } } intOperator(charch) { if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='('||ch==')'||ch=='#') return(TRUE); else return(FALSE); } charPrecede(charch1,charch2) { charch; switch(ch1) { case'+': case'-': { switch(ch2) { case'+': case'-': case')': case'#': ch='>';break; case'*': case'/': case'(': ch='<';break; } break; } case'*': case'/': { if(ch2=='(') ch='<'; else ch='>'; break; } case'(': { if(ch2==')') ch='='; else ch='<'; break; } case')': { ch='>'; break; } case'#': { if(ch2=='#') ch='='; else ch='<'; break; } } return(ch); } intcalc(intx,charch,inty) { intz; switch(ch) { case'+': z=x+y;break; case'-': z=x-y;break; case'*': z=x*y;break; case'/': if(y! =0) z=x/y; else //z=0; cout<<"分母不能仅为0! "< break; } return(z); } intmiddexpression(char*exp)//求解算式表达式 { stack stack charch=*exp; intx=0,y,z; intresult; optr->push('#'); while(ch! ='#'||optr->gettop()! ='#') { if(! Operator(ch)) { x=ch-48; opnd->push(x); ch=*++exp; if(ch! ='\0'&&! Operator(ch)) { cout<<"不符合要求,运算数必须是0~9之间的数"< exit(0); } } else { switch(Precede(optr->gettop(),ch)) { case'<': //栈顶元素优先权低 optr->push(ch); ch=*++exp; break; case'=': //脱括号并接收下一字符 optr->pop(); ch=*++exp; break; case'>': //退栈并将运算结果入栈 if(opnd->sizeofstack()<2) { cout<<"表达式不合法! "< exit(0); } x=opnd->pop(); y=opnd->pop(); z=calc(y,optr->pop(),x); opnd->push(z); x=0; break; } } if(ch=='\0') { cout<<"表达式应该以'#'结束! "< exit(0); } } result=opnd->pop(); if(opnd->empty()&&optr->pop()=='#') return(result); else { cout<<"输入不合法! "< exit(0); } } voidmain(void)//程序入口函数 { charexp[50]; cout<<"数据结构课程设计-请输入算术表达式(以#结束): "< cin>>exp; cout< } 五、测试结果及分析 运行程序,输入数据及所得结果如下表; 算式表达式 3+4/2# 3*(5-2)+6/3 3*(5-2)+6/3# 21*38/(3+6/0)# 21/7*3+(4/2-1) 结果 5 表达式应该以'#'结束! 11 分母不能仅为0! 2 通过实际的将程序输入软件中,执行后所列出的表中,并且通过记录的所得的上表可知,给定的一个算术表达式,通过程序所求出来的值是正确的,并且当输入数值出现错误或者是表达式输入错误时,也会给出相应的错误提示,所以程序达到了原先所要的设计的要求。 六、心得体会和参考资料 通过这次课程设计,学到了许多的知识,并且对以前没有掌握好的知识有了更进一步的理解,对现在所学的知识也有了一个新的认识。 在将所学到的知识应用在实践中,锻炼了自己的能力,但其中也认识到了自己许多的不足,现总结如下: 1、要真正的学好C++语言,首先要把外围的知识的学好,通过这次课程设计,我体会到了C++程序的强大了!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算术 表达式 求解 课程设计 说明书