算术表达式的求解课程设计说明书文档格式.docx
《算术表达式的求解课程设计说明书文档格式.docx》由会员分享,可在线阅读,更多相关《算术表达式的求解课程设计说明书文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
typedefintStatus;
//用模板实现的链式结构堆栈类
template<
classT>
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<
T>
:
stack()//构造函数
head=0;
}
~stack()//析构函数
link*cursor=head;
while(head)
cursor=cursor->
next;
deletehead;
head=cursor;
}
voidstack<
push(TData)//压栈操作
head=newlink(Data,head);
Tstack<
gettop()const//取栈顶元素
returnhead->
data;
pop()//出栈操作
if(head==0)return0;
Tresult=head->
link*oldhead=head;
head=head->
deleteoldhead;
returnresult;
getvalue(intindex)//返回栈底开始第INDEX个栈中值
link*cursor=head;
inti=1;
intstacklen=sizeofstack();
if(index<
=0||index>
stacklen)return0;
while(i<
=(stacklen-index))
i++;
returncursor->
voidstack<
traverse(intn)//遍历栈
link*cursor=head;
intiEnterSign=1;
//换行标识
while(cursor)
cout<
<
cursor->
data<
"
"
;
if(iEnterSign%n==0)cout<
endl;
iEnterSign++;
if((iEnterSign-1)%n!
=0)cout<
intstack<
empty()//判断栈是否为空,1是,0非
returnhead==0?
1:
0;
sizeofstack()//返回栈的大小
intsize=0;
while(cursor)
size++;
returnsize;
clear()//清空栈
while(cursor&
&
next)
intOperator(charch)
if(ch=='
+'
||ch=='
-'
*'
/'
('
)'
#'
)
return(TRUE);
else
return(FALSE);
charPrecede(charch1,charch2)
charch;
switch(ch1)
{
case'
{
switch(ch2)
ch='
>
'
break;
break;
}
if(ch2=='
)
else
='
return(ch);
intcalc(intx,charch,inty)
intz;
switch(ch)
case'
z=x+y;
z=x-y;
z=x*y;
if(y!
=0)
z=x/y;
else
//z=0;
cout<
分母不能仅为0!
break;
return(z);
intmiddexpression(char*exp)//求解算式表达式
stack<
int>
*opnd=new(stack<
);
char>
*optr=new(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'
!
不符合要求,运算数必须是0~9之间的数"
exit(0);
}
switch(Precede(optr->
gettop(),ch))
case'
//栈顶元素优先权低
optr->
push(ch);
ch=*++exp;
case'
//脱括号并接收下一字符
optr->
pop();
//退栈并将运算结果入栈
if(opnd->
sizeofstack()<
2)
cout<
表达式不合法!
exit(0);
}
x=opnd->
y=opnd->
z=calc(y,optr->
pop(),x);
opnd->
push(z);
x=0;
break;
if(ch=='
表达式应该以'
结束!
exit(0);
result=opnd->
if(opnd->
empty()&
pop()=='
return(result);
else
输入不合法!
voidmain(void)//程序入口函数
charexp[50];
数据结构课程设计-请输入算术表达式(以#结束):
cin>
exp;
middexpression(exp)<
五、测试结果及分析
运行程序,输入数据及所得结果如下表;
算式表达式
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
2
通过实际的将程序输入软件中,执行后所列出的表中,并且通过记录的所得的上表可知,给定的一个算术表达式,通过程序所求出来的值是正确的,并且当输入数值出现错误或者是表达式输入错误时,也会给出相应的错误提示,所以程序达到了原先所要的设计的要求。
六、心得体会和参考资料
通过这次课程设计,学到了许多的知识,并且对以前没有掌握好的知识有了更进一步的理解,对现在所学的知识也有了一个新的认识。
在将所学到的知识应用在实践中,锻炼了自己的能力,但其中也认识到了自己许多的不足,现总结如下:
1、要真正的学好C++语言,首先要把外围的知识的学好,通过这次课程设计,我体会到了C++程序的强大了!