数据结构实验报告总结

  • 格式:docx
  • 大小:23.67 KB
  • 文档页数:21

下载文档原格式

  / 21
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构实验报告总结

设计题目:模拟计算器程序

学生姓名:谢先斌

系别:计算机与通信工程学院

专业:计算机科学与技术

班级:1班

学号:541007010144

指导教师:卢冰李晔

XX 年 6 月 21 日

郑州轻工业学院

课程设计任务书

题目模拟计算器程序

专业、班级计算机科学与技术10-01班学号541007010144 姓名谢先斌

主要内容:

设计一个模拟计算器的程序,要求能对包含加、减、乘、除、括号运算符及SQR和ABS函数的任意整型表达式进行求解。

基本要求:

要检查有关运算的条件,并对错误的条件产生报警。

主要参考资料:

严蔚敏吴伟民编著《数据结构(C语言版)》清华大

学出版社第44页栈、第52页表达式求值

完成期限: XX年6月21日

指导教师签名:

课程负责人签名:

XX年 6月 21 日

一、设计题目

模拟计算器的程序

设计一个模拟计算器的程序,要求能对包含加、减、乘、除、括号运算符及SQR和ABS函数的任意整型表达式进行求解。

设计要求:要检查有关运算的条件,并对错误的条件产生报警。

二、算法设计的思想

本程序设计主要是应用了栈,利用栈的“先进后出”原理,建立了两个栈,分别为运算符栈pOStack和运算数栈pDStack。算法的基本思想(参考课本p53页)是:

(1) 首先置操作数栈为pDStack空栈,表达式起始符为“=”,位运算符栈的栈底元素;

(2) 依次读入表达式中的每个字符,若是操作数则进入pDStack栈,若是运算符则和pOStack栈的栈定运算符比较优先权后作相应操作,直到整个表达式求值完毕(即pOStack栈的栈定元素和当前读入的字符均为“=” )。

三、算法的流程图

本程序的流程如下附图1所示:

附图1 程序流程图

四、算法设计分析

首先创建了两个栈:

typedef struct OPStack //定义运算符栈

{

char opStack;

int top;

}OPStack, *pOPStack;

typedef struct DATAStack //定义运算数栈

{

double stack;

int top;

}DATAStack, *pDATAStack;

来分别存放运算符和运算数。在两个结构体中均有一个top数据域,当top=-1时,表示该站为空栈。

定义一个Evaluateexpression_r()函数来完成函数运算的主要功能:读入表达式,并计算结果。以下是对该函数的分析:

当一次运算开始时,分别调用InitpOPStack(pOPStack &pOStack)函数和InitpDATAStack(pDATAStack &pDStack)

函数分别对运算符栈和运算数栈进行初始化。调用PushOPStack(pOStack, '=')函数来完成运算符栈栈低元素的设置。

通过PushOPStack(pOPStack &pOStack, char ch)函数、PopOPStack(pOPStack &pOStack, char &ch)函数、

PushDATAStack(pDATAStack &pDStack, double d)函数和PopDATAStack(pDATAStack &pDStack, double &d)函数来分别完成运算符和运输数的进出栈操作。getToppOPStack(pOPStack &pOStack)函数和getToppDATAStack(pDATAStack &pDStack) 函数主要是进行得到栈定元素的作用,特别是在对运算符栈优先级的比较中十分重要,其中还会调用IsOP(char &ch) 函数来区分读入的是运算符还是运算数。

ChangeChar(char &c)函数当每次读入一个字符是都会调用一次,主要的作用就是完成不用区分A、S的大小的功能。

Precede(char op1, char op2)函数主要是通过一个二维字符串数组来存放9种运算符的优先级比较的结果,每当读到一个运算符后就进行与运算符栈顶元素比较,通过返回的“、=”结果来进行下一步的操作:''表示运算符和运算数各退栈一次并调用Operate(double a, char theta, double b)函数(主要是对出栈的运算符和运算数进行计算),

最后将运算结果压入运算数栈pDStack。

当操作结束时运算数栈的栈顶元素就是计算结果,分别调用ClearpOPStack(pOStack)函数清空运算符栈、ClearpDATAStack(pDStack)函数清空运算数栈以待下一次继续进行相关操作。

print_user()函数和exit_E()函数开始和结束时个调用一次,分别完成欢迎界面和退出界面的布置。main()是本程序的主函数,主要通过while语句和switch语句来完成本程序的运行,当输入Y(y)时调用Evaluateexpression_r()函数完成计算,当输入N(n)时,调用exit_E()函数退出本程序的运行。

本程序还考虑到各种异常的处理,如运算时除数为0、被开方数为0等情况的出现,最终的处理是直接退出程序的运行。

五、运行结果分析

1. 程序开始界面,如附图2:

附图2 开始界面

2.如下附图3,附图4分别是选择进入和退出程序界面:

附图3(在以下界面输入计算式即可运行出计算结果如附图5)

附图4 退出界面

附图5 运行界面