++程序设计设计性实验报告 .doc
《++程序设计设计性实验报告 .doc》由会员分享,可在线阅读,更多相关《++程序设计设计性实验报告 .doc(47页珍藏版)》请在沃文网上搜索。
1、C+程序设计设计性实验C+程序设计设计性实验报告实验项目名称:高级计算器设计与开发专业班级: 数学061 ;姓名: xx;学号 xxxxxxx 实验起止日期:起于 2008 年 11 月1日止于 2008 年 12 月10日实验目的: 1.学会用+语言和利用数据结构中的堆栈实现表达式的解析与计算。 2.学会使用动态链接库技术进行编程;学会编辑、编译、运行MFC应用程序的基本 过程,并开发一个可以进行表达式运算的高级计算器。 实验要求: 1. 能处理双精度型数值的加、减、乘、除的表达式计算。 2.编程中使用了动态连接库技术。开发环境要求: 软件环境:windows98/windowsXP/win
2、dows2000,Visual C+ 硬件环境:计算机(Pen4CPU, 256MRAM,60G以上硬盘,输入输出设备)技术文档要求:按照软件工程技术文档编写要求进行。要求流程图绘制规范,模块功能描述清晰,数据字典齐全。实验内容:1 语言的顺序结构,分支结构,循环结构,函数,结构体,指针。2 数据结构中的堆栈存贮结构及其操作的实现。实验具体方案:按照系统设计要求,用Visual C+设计和开发一个MFC应用程序-高级计算器,提交由需求分析;系统设计说明(包括主菜单、子菜单、模块功能简介、数据字典、系统结构图);系统技术文档 (包括系统各模块主要流程图,软件总体测试方案与测试记录、局部测试方案与
3、测试记录、软件调试和修改记录、测试结论、运行情况记录),系统使用说明书,源程序代码为附录构成的实验报告。需求分析: 普通的功能简单的仅能进行四则运算的计算工具已经不能满足需要,需要一种能进行多种计算工具。而windows自带的计算器不能处理表达式这是一个缺陷,为此开发一个能处理表达式运算的高级计算器是十分必要的,这为计算提高了更大的方便,可以大幅度提高计算效率。系统设计说明:(包括主菜单、子菜单、模块功能简介、数据字典、系统结构图) 主菜单主要包含: 操作说明、相关主题、退出。 整个程序的模块组成:(1) Windows基于对话框的资源文件模块。(2) 动态链接库模块,主要提供了表达式的解析与
4、计算。(3) 其他功能模块如开平方,取平方,进制转换等。 数据字典 m_edit1 /编辑框变量,用于显示输入输出 CString str1,str2,str3 ; /中间临时字符串变量 char s70,s270,buffer20; /用于CString字符串的转换以及将double型数据转 换为CString型字符串。 stack /结构体类型 ElemType *stack; /存栈元素 Int top /存栈顶元素的下标位置 int MaxSiz/存stack数组长度。 void Initiatestack(Stack &S) /堆栈的初始化 void Push(Stack& S,El
5、emType item) / 进入堆栈 ElemType Pop(Stack& S) /删除栈顶元素并以函数值返回 ElemType Peek(Stack &S)/返回当前栈顶元素 int Precedence(char op) /运算符优先级的判别 int change(char* str1,char*str2) /将str1的中缀表达式转换为str2中的后缀表达 double compute(char *str) / 计算后缀表达式 double* tranfrom(double num,int r) /进制转换的子函数 MessageBox(CString ) /用于弹出对话框,用于警告
6、非法输入 _T( ) /用于清空CString字符串 Str,Right(int n) /用于从右截取长为n的字符串并赋给str Strtod(char *,char*) /用于将CString型字符串转化为double型数据 计 算 器系统结构图: 主 菜 单主 控 面 板 进制转换 乘 法 除 法 减 法显 示 框 加 法 开 方 三角函数 对 数 数 字 键 Delete 系统技术文档 (包括系统各模块主要流程图,软件总体测试方案与测试记录、局部测试方案与测试记录、软件调试和修改记录、测试结论):进制转换流程图: 开 始 用要转换的数字x除以基数r,所得余数yi并压入栈中 依次弹出栈中的
7、元素即为转换好的r进制数。算法结束 商为零 是 否 把商赋给当前数值 x中缀表达式转化为后缀表达式算法流程图: 开 始从左到右扫描中缀表达式str1,读取字符 将其写入用于存储后缀表达式的字符数组str2中 是数或小数点 是 将其压入运算符栈中,待以它开始的括号表达式结束后出栈 否 是左括号 是 否 是继续扫描中缀表达式字符串,直到遇见第一个右括号 运 否 算 符 是 压入运算符栈中,待它后一个运算对象从str1中写入到str2中后出栈,写入str2 该运算符优先级 大于栈 顶运算符的优先级 是 否 删除栈顶元素并将其保存在后缀字符串str2中 删除栈顶元素保存 对于新的栈顶元素 结束算法 否
8、 栈为空 是计算后缀表达式流程图: 开 始 从左到右扫描后缀表达式str2,读取字符将其转换为浮点数压入堆栈中 该字符是数或小数点 是 否 是不作处理,继续扫描 运 算 符 是依次从栈中弹出两个数与该运算符做运算,将运算结果继续压入到栈中,继续扫描字符串结束,当前栈顶元素即为结果 字符串结尾符 是 否软件总体测试方案:1 测试计算器能否处理表达式以及是否能得出正确结果。2 计算器对非法输入的排错能力,主要有: 一个数中有多个小数点 一个表达式中有连续的运算符3 被开方数为负数时情况4 除数为0时的情况5 进制数之间能否转换6 进制数是否可以当做其他操作的运算对象测试记录:1在处理表达式运算时对
9、于正确的输入可以得到满意的结果2在输入的数中有多个小数点时计算器仍进行进算不具备排错3除数为0时结果为被除数4当有连续的运算符时程序退出5被开方数为负数时显示为正数的开放结果6进制数之间转换结果错误局部测试方案:分为三个模块独立测试1 测试能否把一个中缀表达式转换为后缀表达式2 能否正确计算后缀表达式的值3 进制转换能否正常工作测试结果:1 子程序能正确转换得到后缀表达式2 子程序可以进行计算,但当遇到非法输入时程序自动终止3 进制转换可以进行,但遇到负数时转换的结果每个数字前都有负号软件调试和修改记录:针对上述问题对软件进行一些局部改动。1 增加对小数点的计数器以此来解决小数点多余问题2 每
10、次输入后先对表达式进行排错扫描,一但发现非法输入用对话框警示出错原因3 改进计算模块,当除数为零时返回一个超越数作为信号来警示除数为零错误4 改进进制转换模块,使能处理的数局限在整数集合上,不处理表达式5 对各个操作的操作对象进行严格排查,增加排错功能模块测试结果:各种问题基本解决,但是对以操作符开始的数字仍不能处理进制转换不能处理浮点数测试结论:经过不断地改进与调试计算器基本上可以达到较高要求。计算器可以处理表达式运算,可以进行数制转换,和一些常见的数学计算如开方,取平方求对数,正弦,余弦等。但是还有一些缺陷没能解决,如进制转换不能处理浮点数的问题还没能够解决。但从整体上已经达到了要求可以进
11、行更高级的计算。系统运行结果和记录(软件运行界面图、软件运行数据输入界面图、软件运行结果界面图、运行记录)软件界面图输入表达式:(10-3.5)*(4.3+2.8)/5 结果为:输入:1/0输入 1+2-*3求余弦结果为:求二进制结果为:将上面的二进制数转换为八进制将上面二进制数作为COS()的入口参数负数开方点击计算器操作说明点击关于主题系统使用说明书:1 在做有加减乘除的表达式时先输入表达式再按 = 即可得出结果2 表达式中只能含有加减乘除这四种运算,不能含有其他的操作如开方,平方等。3 如果要进行开方、平方、取对数、正余弦、进制转换等操作时,先输入表达式再按相应的按键即可得出结果。4 任
12、何以符号开头的表达式参与运算系统都会自动终止,此时请重新运行程序即可5 进制转换不可以处理浮点数,只能处理一个整数6 程序使用了动态链接库技术,运行程序时必须将程序和动态链接库文件 hanshu.dll放在同一个目录下才可正常运行。实验讨论:该计算器的核心部分在于表达式的解析与计算上。本程序采用了堆栈来达到这一效果,但是并非这一种实现方法。如二叉树也可以实现表达式的解析与计算。因此可以尝试用树来实现该计算器。程序功能是否还可以继续增加?比如阶乘运算,进制转换可以处理浮点数,可以进行矩阵的加减乘除运算,求函数的导数等一系列操作,这样该计算器的级别将会更高。C+程序设计设计性实验收获与总结:通过此
13、次课程设计使我的编程能力有了较大幅度的提高,在项目中成长一点不错。虽然这算不上项目但它还是提供了一个实战的机会。此外在这次训练中也学到了不少新的知识。以前总会用一个工程,现在可以用三个。懂得了什么是动态链接库技术以及使用意义。基本上掌握了MFC程序开发的环节过程这对以后视窗编程有很大的帮助,在此基础上可以自己开方一些小程序,找到了自我提高的方法。此次编程也让我对VisualC+编程有了新的认识,也让我认识到有很多知识还没学到手至少目前应该掌握VisualC+的基础这是很重要的一个学习过程。此外这次编程给我了许多启示,自己到底该怎么样去学习。自己要不断的给自己找问题去处理。如计算器开始是学到一点
14、动态链接库,想办法去运用它。接着学习了c+运算符的重载,矩阵就是一个典范,那么就可以将此环节插入到计算器的高级实现功能上。由此学到的知识自己想办法去运用,用在你当前思考的问题上。这样经过不断地知识组合在不知不觉中就会成长我认为这是我得到最宝贵的学习方法。此次实验,应用了堆栈这一存储结构来解析表达式,并用动态链接库技术进行导出。覆盖了数据结构以及c+中的基本知识,对于课本上的知识提供了一个应用平台。参考文献:1 谭浩强.C程序设计.北京:清华大学出版社,19992 朱站立.数据结构. 西安:交通大学出版社,20043 罗斌 Visual C+编程技巧 北京:中国水利水电出版社,2005附录:源程
15、序代码/ calcDlg.cpp : implementation file#include stdafx.h#include calc.h#include calcDlg.h#include#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endifdouble x,y,z;/判断优先级的函数 extern int Precedence(char op);/将中缀表达式转换为后缀表达式,中缀在str1中,后缀在str2中extern int change(char* str1,c
16、har*str2);/计算后缀表达式的值/extern double compute(char *str);/进制转换函数/ extern double * tranfrom(double num,int r);/ CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialogpublic:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/AFX_DATA/ ClassWizard generated virtual functio
17、n overrides/AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support/AFX_VIRTUAL/ Implementationprotected:/AFX_MSG(CAboutDlg)/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAboutDlg)/AFX_DATA_INITvoid CAboutDlg:DoD
18、ataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG_MAP(CAboutDlg)/ No message handlers/AFX_MSG_MAPEND_MESSAGE_MAP()/ CCalcDlg dialogCCalcDlg:CCalcDlg(CWnd* pParent /*=NULL*/): CDialog(CCalcDlg:IDD, pParent)/AF
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
20 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- +程序设计设计性实验报告 程序设计 设计 实验 报告
