下载此文档

算术表达式的求解数据结构课程设计说明书.doc


文档分类:IT计算机 | 页数:约18页 举报非法文档有奖
1/18
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/18 下载此文档
文档列表 文档介绍
中北大学
数据结构
课程设计说明书
 
 
 
学生姓名:
 张蓓
学号:
 
学院:
软件学院
专业:
软件工程 
题目:
算术表达式的求解
指导教师
何志英
 
 
 
 2011年12月20日
设计任务概述(包括系统总体框图及功能描述)
利用栈结构,求解用户正确输入的算术表达式,并实现保存、读取、清除功能,且对用户输入的错误信息进行提示,重新输入.
按下”Q”键
表达式错误
表达式正确
按下”S”键
按下”R”键
按下”E”键
求解算术表达式系统
输入算术表达式
判断表达式
是否正确
求解运算,得到结果
提示错误,重新输入
按下“N”键
按下“Y”键
退出?(Y/N)
退出运算系统
读取刚才保存的得数
保存得数
按下“Q”键
本设计所采用的数据结构(如:链表、栈、树、图等)
本设计采用了栈结构,创建了两个栈,一个压入数字,另一个压入符号。
功能模块详细设计
详细设计思想
求解表达式的主要思想是创建两个栈,一个是符号栈,另一个是数字栈。符号栈关键是运算优先顺序,数字栈关键是多位数与小数的计算。
本程序设计了四个模块,第一个模块double result(double num1,char op,double num2),主要目的是进行加减乘除运算的操作方法,num1与num2的关系;pute(char str[]),主要目的是对用户输入的算术表达式进行求解,其中对多位数与小数进行了定义与数值计算,以及带括号的表达式运算的优先顺序;第三个模块void face(),主要目的是设计用户主界面;第四个模块是主函数,主要目的是将上述模块集中运用,进行求解。至此完成利用栈结构求解表达式运算。
核心代码
调用的库函数:
#include <>
#include <>
#include <>
#include <>
#include <>
自己定义的函数:
double result(double num1,char op,double num2) 进行加减乘除运算
pute(char str[]) 对用户输入的算术表达式进行求解
void face() 用户主界面
main() 主函数
核心定义函数设计:
pute(char str[])
{
double num=0;
int i=0,j=1,k=1;
int Flag=0;
numTop=opTop=0;
while(str[i]!='\0'||opTop>0)
{
if(str[i]>='0'&&str[i]<='9')
if(Flag==0)
num=num*10+str[i]-'0';
else
{
num+=(str[i]-'0')/(j*);
j*=10;
}
else
if(str[i]=='.')
Flag=1;
else
if( k==1&&str[i]=='-'&&(i==0||op(str[i-1])) )
k=-1;
else
{
if(i>0&&!op(str[i-1])&&str[i]!='('&&str[i-1]!=')')
{
numStack[numTop++]=num*k;
num=0; j=1; Flag=0; k=1;
}
if(opTop==0||str[i]=='(')
opStack[opTop++]=str[i];
else
if(str[i]==')')
{
while(opTop>0&&opStack[--opTop]!='(')
{
numStack[numTop-2]=result(numStack[numTop-2],opStack[opTop],numStack[numTop-1]);
numTop--;
}
if(opStack[opTop]!='(') return 0;
}
else
{
if(str[i]=='\0'&&numTop==0) return 0;
while(opTop>0&&op(str[i])<=op(opStack[opTop-1]))
{
numStack[numTop-2]=result(numStack[numTop-2],opStack[--opTop],numStack[numTop-1]);
numT

算术表达式的求解数据结构课程设计说明书 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数18
  • 收藏数0 收藏
  • 顶次数0
  • 上传人mkjafow
  • 文件大小190 KB
  • 时间2018-06-15