- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构和算法课程设计--模拟简单计算器
通达学院算法与数据结构设计报告
( 2014/2015学年 第 二 学期 )
题 目: 模拟简单计算器
目录
一、课题内容和要求 1
二、需求分析 1
三、概要设计 1
1设计理念 1
2.子函数功能 2
3.函数的调用 4
四、详细设计 4
五、测试及结果分析 11
加法测试 11
减法测试 11
乘法测试 12
除法测试 12
混合运算 13
六、调试过程中的问题 13
七、课程设计总结 15
一、课题内容和要求
利用所学的数据结构的基本知识,设计一个计算器(90)
输入:带有括号、+,-,X,/ 的表达式;
输出:运算结果
实例:输入:(4*3-(2+1))*2
输出: 18
要求:
1)对不合法输入进行检测并提示;
2)对合法输入求出正确解;
二、需求分析
本程序主要是采用栈的理论知识,主要用到两个结构体栈,一个用来转化表达式,一个用来计算表达式。
三、概要设计
1设计理念
首先,用一个字符数组来存储用户输入的中缀表达式。然后用栈来把这个表达式转化为后缀表达式,转化时要进行符号优先级比较,这里将‘*’‘/’的优先级定为2,‘+’‘-’定为1,括号和‘=’定为0。具体思想如下:例如用户输入了1+2*3=,将其存放入一个字符数组中。先在栈的底部存放一个‘=’号符,用作符号优先级比较。首先将1存放到另外一个字符数组s1中,再将‘+’号入栈。入栈的同时与底部的‘=’比较优先级,‘+’的优先级高于‘=’,所以不出栈,之后将2存放入s2中,然后再将‘*’入栈,入栈的同时与‘+’比较符号优先级,‘*’比‘+’高,所以不出栈。再将3存入s2中。之后将栈中不是‘=’的运算符都弹出栈,并依次存入s2中。所以s2中的表达式为123*+。之后进行计算,计算时用到浮点栈。首先将s2中的字符依次入栈,遇到运算符时进行计算。所以将123入栈后,再将‘*’入栈的同时,将前面两个数字进行运算,算出结果为6并存入栈中,之后再将‘+’入栈,再与1进行运算,结果即为7,然后输出结果。
2.子函数功能
pseqstack1 init_seqstack1(void)
{
pseqstack1 S;
S=(pseqstack1)malloc(sizeof(pseqstack1));
if(S)
S-top1=-1;
return S;
}初始化栈
int empty_seqstack1(pseqstack1 S)
{
if(S-top1==-1)
return 1;
else
return 0;
}
判断栈是否为空
int push_seqstack1(pseqstack1 S,datatype1 X
进栈
int pop_seqstack1(pseqstack1 S,datatype1 *X)
出栈
int GetTop(seqstack *s)
取栈顶元素
int PP(char op,char c)
比较栈顶元素与当前读入的运算符的优先级
int Ope(int a,char m,int b)
从数字栈中取出的两个数的计算
int priority(char op)
优先级判断函数
int infix_exp_value(char *infixexp,char *postfixexp
将指针infixexp指向的中缀表达式转换为指针postfixexp指向的后缀表达式
double postfix_exp(char *A)
求后缀表达式的值
3.函数的调用
四、详细设计
# include stdio.h
# include malloc.h
# include conio.h
# define maxsize 100
typedef double datatype1;
typedef char datatype2;
typedef struct stack1
{
datatype1 data1[maxsize];
int top1; /*栈顶元素*/
}seqstack1,*pseqstack1; /*顺序栈*/
typedef struct stack2
{
datatype2 data2[maxsize];
int top2; /*栈顶元素*/
}seqstack2,*pseqstack2; /*顺序栈*/
/*栈的初始化*/
pseqstack1 init_seqstack1(void)
{
pseqstack1 S;
S=(pseqstack1
文档评论(0)