ImageVerifierCode 换一换
格式:DOCX , 页数:9 ,大小:42.11KB ,
资源ID:7275823      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7275823.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(课程设计报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

课程设计报告.docx

1、课程设计报告课程设计报告 作者:刘英华1执行过程分析算术表达式中会含有0123456789等数字字符;+,-,*,/,%,(,)等运算符。不能含有上述以外的其他字符。遍历算术表达式所有字符: 若当前字符为非上述字符,则返回错误。 若当前字符是左括号(,则入栈,等待匹配后面的右括号)。 若当前字符是右括号),则出栈,做当前栈顶不是左括号(,则返回错误,否则匹配正确。 若当前字符是+或-,检查后面相邻字符,若仍然是运算符,则返回错误,否则正确。 若当前字符是*或/或%,检查前后相邻字符,若仍然是运算符,则返回错误,否则正确。 若当前字符是小数点.,检查前后相邻字符是否为阿拉伯数字,若不是,则返回错

2、误,否则正确。2.流程图3.设计中遇到的问题及解决思路、办法3.1解决思路分析正常数学表达式的逻辑运算。数字的匹配原则。运算符的匹配原则。3.2问题不知把要匹配的字符存储,然后匹配时再准确取出。3.3解决办法运用栈的思想解决了。4.其他/ 头文件MathString.hclass CMathStringpublic: CMathString(void); CMathString(const tstring& str); CMathString(void);public: / 存放波兰表达式的结构 struct Bolan int m_nFlag; / 0: 数值; 1: 运算符 double

3、m_dValue; / 数值 TCHAR m_chOper; / 运算符+,-,*,/,%,(,) ; typedef std:vectorstd:pair CVecChar2Pos; typedef std:vector CVecBolan;public: / 检查算术表达式是否正确匹配. / return: 错误(不匹配)返回,正确返回非. bool CheckMathExp(); / 获取错误描述 const tstring& GetErrDesc() const; / 获取错误位置 int GetErrPos() const;private: / 类似printf的方式创建一个格式化的

4、字符串。请注意不要超过个字节,否则将会造成越界崩溃. / 返回一个格式化后的字符串. tstring CreateFormatStr(const TCHAR* lpszFormat, .) const; / 获取字符串的最后一个字符. TCHAR GetEndChar(const tstring& str) const; TCHAR GetEndChar(const CVecChar2Pos& vecPair) const; / 获取字符串某位置前面相邻字符,nPos基于开始. TCHAR GetPreChar(const tstring& str, int nPos) const; / 获取

5、字符串某位置后面相邻字符,nPos基于开始. TCHAR GetNextChar(const tstring& str, int nPos) const; / 出栈 void PopStack(tstring& str, int nCount = 1) const; / 判断字符是否为操作符 bool IsOperator(TCHAR ch) const; / 判断字符是否为数字 bool IsDigit(TCHAR ch) const; / 将算术表达式转化成波兰表达式 bool StringToBolan(); / 将数字字符串转化成数值 bool StringToDigit(tstrin

6、g str, double& dValue);private: / 算术表达式 tstring m_strMathExp; / 表达式错误(不匹配)位置 int m_nErrPos; / 错误(不匹配)描述 tstring m_strErrDesc; / 存放转化后的波兰表达式 CVecBolan m_vecBolan;/ 执行文件MathString.cppbool CMathString:CheckMathExp() if ( m_strMathExp.empty() ) / 若算术表达式为空,返回false m_strErrDesc = _T(算术表达式为空!); return fals

7、e; / 存放括号(的栈 CVecChar2Pos stack; for ( std:string:size_type ix = 0; ix != m_strMathExp.size(); +ix ) m_nErrPos = (int)ix; TCHAR ch = m_strMathExpix; if ( ch = _T() ) / 若是左括号(,则入栈 stack.push_back(std:make_pair(ch, ix); else if ( ch = _T() ) if ( GetEndChar(stack) = _T() ) / 若栈的顶端字符为(,则匹配,出栈 stack.pop

8、_back(); else / 若栈的顶端字符为非(,不匹配,返回false m_strErrDesc = CreateFormatStr(_T(n错误:没找到与位置%d处的操作符)相匹配的操作符(!), m_nErrPos); return false; else if ( ch = _T(+) | ch = _T(-) ) / 若是+或-,检查后面相邻字符 TCHAR chTmp = GetNextChar(m_strMathExp, ix); if ( chTmp = _T(0) | IsOperator(chTmp) ) m_strErrDesc = CreateFormatStr(_

9、T(n错误:位置%d处的操作符%c没有右值!), m_nErrPos, ch); return false; else if ( ch = _T(*) | ch = _T(/) | ch = _T(%) ) / 若是*或/或%,检查前后相邻字符 TCHAR chTmp = GetPreChar(m_strMathExp, ix); if ( chTmp = _T(0) | IsOperator(chTmp) ) m_strErrDesc = CreateFormatStr(_T(n错误:位置%d处的操作符%c没有左值!), m_nErrPos, ch); return false; chTmp

10、 = GetNextChar(m_strMathExp, ix); if ( chTmp = _T(0) | IsOperator(chTmp) ) m_strErrDesc = CreateFormatStr(_T(n错误:位置%d处的操作符%c没有右值!), m_nErrPos, ch); return false; else if ( ch = _T(.) ) / 若是小数点(.),检查前后相邻字符是否为阿拉伯数字 TCHAR chTmp = GetPreChar(m_strMathExp, ix); if ( !IsDigit(chTmp) ) m_strErrDesc = Creat

11、eFormatStr(_T(n错误:位置%d处的小数点前面没有左值!), m_nErrPos); return false; chTmp = GetNextChar(m_strMathExp, ix); if ( !IsDigit(chTmp) ) m_strErrDesc = CreateFormatStr(_T(n错误:位置%d处的小数点前面没有右值!), m_nErrPos); return false; else if ( !IsDigit(ch) ) / 若为暂不能识别的字符 m_strErrDesc = CreateFormatStr(_T(n错误:当前暂不能识别%d处的符号%c!), m_nErrPos, ch); return false; / 判断栈里是否还存有( CVecChar2Pos:const_reverse_iterator it = stack.rbegin(); if ( it != stack.rend() ) m_strErrDesc = CreateFormatStr(_T(n错误:没找到与位置%d处的操作符(相匹配的操作符)!), it-second); return false; return true;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1