软件计算器课设报告.docx

上传人:marr****208 文档编号:132272474 上传时间:2020-05-14 格式:DOCX 页数:55 大小:770KB
返回 下载 相关 举报
软件计算器课设报告.docx_第1页
第1页 / 共55页
软件计算器课设报告.docx_第2页
第2页 / 共55页
软件计算器课设报告.docx_第3页
第3页 / 共55页
软件计算器课设报告.docx_第4页
第4页 / 共55页
软件计算器课设报告.docx_第5页
第5页 / 共55页
点击查看更多>>
资源描述

《软件计算器课设报告.docx》由会员分享,可在线阅读,更多相关《软件计算器课设报告.docx(55页珍藏版)》请在金锄头文库上搜索。

1、1 选题背景计算机软件技术基础课程设计的目的是,通过设计掌握数据结构课程中学到的基本理论和算法并综合运用于解决实际问题中,它是理论与实践相结合的重要过程。设计要求学会如何对实际问题定义相关数据结构,并采用恰当的设计方法和算法解决问题,同时训练学生进行复杂程序设计的技能和培养良好的程序设计习惯。学习此课程,要求学生对软件技术的各个组成部分的基础知识、发展趋势有全面、系统的了解;掌握基本数据结构,达到能熟练运用解决实际问题的程度;掌握操作系统基本原理和类型,了解系统各种管理功能。通过自学了解软件工程的基本概念,软件设计开发的过程和相关技术。课程设计是实践性教学中的一个重要环节,它以某一课程为基础,

2、可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。计算机软件技术基础是一门重要的专业基础课,是计算机理论和应用的核心基础课程。计算机软件技术基础课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。在这次的课程设计中我选择的题目是具有表达式求值功能的计算器软件设计。表达式计算是实现程序设计语言的基本问题之一,也是栈的应用的一个典型例子。设计一个程序,演示用算

3、符优先法对算术表达式求值的过程。深入了解栈的特性,以便在解决实际问题中灵活运用它们,同时加深对这种结构的理解和认识。2 任务简述设计、开发一种计算器软件系统。通过此系统可以实现算术计算器基本功能,以及+-*/()等基本运算的表达式求值功能,并提供进行这些操作的界面(字符界面、图形界面均可)。系统应该至少提供以下模块:1) 主函数main()的功能是:根据菜单的选项调用各函数,并完成相应的功能。 2) Menu()的功能是:显示英文提示菜单。 3) Quit()的功能是:退出菜单。 4) CreateExpression ()的功能是:创建中缀表达式。 5) TransmitExpression

4、 ()的功能是:转换表达式,以用户创建的中缀表达式为入口参数,输出结果为后缀表达式。 6) EvaluateExpression ()的功能是:以后缀表达式作为入口参数,完成表达式的计算结果。 7) CreateStack()的功能是:创建一个堆栈,为表达式的转换、求值算法提供技术支撑。 8) Pop()的功能是:表达式转换、求值过程中关于堆栈的弹出信息操作。 9)Push()的功能是:表达式转换、求值过程中关于堆栈的入栈信息操作。 3 问题分析要实现具有表达式求值功能的计算器软件设计,就要对数据结构中的栈有深刻的理解。以字符列的形式从终端输入语法正确的、不含变量的整数表达式。利用已知的算符优

5、先关系,实现对算术四则混合运算表达式的求值,并仿照教科书的例子在求值中运算符栈、运算数栈、输入字符和主要操作的变化过程。一般来说,计算机解决一个具体问题时,需要经过几个步骤:首先要从具体问题抽象出一个适当的数学模型,然后设计一个解决此数学模型的算法,最后编出程序,进行测试,调试直至得到想要的答案。对于算术表达式这个程序,主要利用栈,把运算的先后步骤进行分析并实现简单的运算!为实现算符优先算法,可以使用两个栈,一个用以寄存运算符,另一个用以寄存操作数和运算结果。演示程序是以用户于计算机的对话方式执行,这需要一个模块来完成使用者与计算机语言的转化。程序执行时的命令:本程序为了使用具体,采用菜单式的

6、方式来完成程序的演示,几乎不用输入什么特殊的命令,只需按提示输入表达式即可。(要注意输入时格式,否者可能会引起一些错误)这次课程设计中我们主要应该解决如下问题:1. 在输入中缀表达式的时候系统怎样将中缀表达式转换为后缀表达式;2. 计算机如何判断符号的优先级别;3. 系统如何判断输入符号的优先级别进行相应的计算;4. 左括号的右括号的匹配问题;5. 应该解决如何存储;6. 如何利用后缀表达式求取最后的结果;7. 如何输入中缀表达式输出后缀表达式;8. 如何在main函数中调用等问题;9. 除数为0时程序如何报错;10. 界面如何能够设计的美观一点。4 设计原理4.1栈栈(stack)又名堆栈,

7、它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。栈是限定仅在表头进行插入和删除操作的线性表。要搞清楚这个概念,首先要明白”栈“原来的意思,如此才能把握本质。栈“者,存储货物或供旅客住宿的地方,可引申为仓库、中转站,所以引入到计算机领域里,就是指数据暂时存储的地方,所以才有进栈、出栈的说法。首先系统或者数据结构栈中数据内容的读取与插入(压入push和

8、 弹出pop)是两回事!插入是增加数据,弹出是删除数据 ,这些操作只能从栈顶即最低地址作为约束的接口界面入手操作 ,但读取栈中的数据是随便的没有接口约束之说。很多人都误解这个理念从而对栈产生困惑。1而系统栈在计算机体系结构中又起到一个跨部件交互的媒介区域的作用 即 cpu 与内存的交流通道 ,cpu只从系统给我们自己编写的应用程序所规定的栈入口线性地读取执行指令, 用一个形象的词来形容它就是pipeline(管道线、流水线)。cpu内部交互具体参见 EU与BIU的概念介绍。栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,

9、最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称为后进先出表。4.2表达式表达式的表示形式有中缀、前缀和后缀3中形式。中缀表达式按操作符的优先级进行计算(后面代码实现只包括+、-、*、,小括号),即数学运算。 后缀表达式中只有操作数和操作符。操作符在两个操作数之后。

10、它的计算规则非常简单,严格按照从左到右的次序依次执行每一个操作。每遇到一个操作符,就将前面的两个数执行相应的操作。 4.3 atof(将字串转换成浮点型数)相关函数atoi,atol,strtod,strtol,strtoul表头文件 #include 定义函数 double atof(const char *nptr);函数说明 atof()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时(0)才结束转换,并将结果返回。参数nptr字符串可包含正负号、小数点或E(e)来表示指数部分,如123.456或123e-2。返回值 返回转换

11、后的浮点型数。附加说明 atof()与使用strtod(nptr,(char*)NULL)结果相同。4.4字符串函数 字符串函数(String processing function)也成字符串处理函数,指的是编程语言中用来进行字符串处理的函数,如C,pascal,Visual以及LotusScript中进行字符串拷贝,计算长度,字符查找等的函数。Strcpy原型:extern char *strcpy(char *dest,char *src);用法:#include 功能:把src所指由NUL结束的字符串复制到dest所指的数组中。返回指向dest结尾处字符(NUL)的指针。举例:/ st

12、rcpy.c#include #include main()char *s=Golden Global View;char d20;clrscr();strcpy(d,s);printf(%s,d);getchar();return 0;strcmp功 能: 将一个串与另一个比较用 法: intstrcmpi(char *str1, char *str2);程序例:#include #include int main(void)char *buf1 = BBB, *buf2 = bbb;int ptr;ptr =strcmpi(buf2, buf1);if (ptr 0)printf(buff

13、er 2 is greater than buffer 1n);if (ptr 0)printf(buffer 2 is less than buffer 1n);if (ptr = 0)printf(buffer 2 equals buffer 1n);return 0;system就是调用从程序中调用系统命令(和shell命令)。4.5system(pause)system(pause)就是从程序里调用“pause”命令, 而“pause”这个系统命令的功能很简单,就是在命令行上输出一行类似于“Press any key to exit”的字,等待用户按一个键,然后返回。举例如下:#inc

14、lude#include/使用system(pause);必须要加该头文件main()inta=1;printf(%dn,a);system(pause);/输出a的结果后,等待用户按任意一个键,程序就结束 4.6 switch函数 在switch语句中,我们要记住四个关键词,分别是switch、case、default和break。switch是语句的特征标志(图中标作sw);case表示当switch后的表达式满足某个case后的常量时,运行该case以后的语句块。要注意,任意两个case后的常量不能相等,否则switch将不知道选择哪条路走。default表示当表达式没有匹配的case时,默认(default)地运行它之后的语句块(图4.4.1中未标出);break表示分岔路已经到头,退出switch语句。switch(表达式) case 常量表达式1: 语句块1; break; case 常量表达式n: 语句块n; break; default:

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号