计算器设计实验报告 一、实验设计主要分工 04009320 文斌:算法设计,LCD 显示。 04** 张希:界面(按钮控件)设计,文件内容读取。 共同调试、完善设计。 二、程序设计实现功能效果 (1)支持整数、小数基本加减乘除运算; (2)有优先级的判别计算。优先级由高到低一次为括号运算、乘除运算、加减运算。 (3)支持键盘输入和触摸屏输入; (4)能读取指定目录下文本内容(内容为计算表达式)并计算得出结果,将内容和结果显示在LCD 上。 程序任务开始后,等待键盘或触摸屏的输入。输入键有0~9 数字键、+-*/()运算符、del 退格键、clear 清屏键、read 读指定目录文本内容并计算键、enter'='键、‘.’小数点键。 每当有字符输入时,触摸屏相应键显示“AAA”,100ms 后恢复原相应按键符号,同时LCD 屏幕上显示相应字符。当输入'del'键时,屏幕显示去掉最后一位字符。当输入'='号后,得出计算结果,结果显示于表达式的下一行。若是除零错误,则结果显示为“/0ERROR!”。若有非法字符(触摸点不能识别为设计按键符则视为非法字符),则结果输出为“Syntax Error!!”。若表达式有运算符连续输入,则忽略前面的运算符,只取最后一位运算符计算,正常显示数字结果。当输入'clear'键时,情况显示区域。当输入'read'键时,从指定目录文本文件中读取表达式并计算。将表达式内容和计算结果显示在LCD 上。 LCD 显示界面如下: 输入显示: 结果输出: del 1 2 3 + clear 4 5 6 - read 7 8 9 * enter ( 0 ) / 三、程序算法实现 1、计算算法 首 先将输入的0~9 数字、+-*/()运算符的内容存 储 于一个 全 局 变 量 cal[number]中,表达为中缀 表达式。用 void str2repol()函 数,将输入字符串 cal[number]转 换 成 逆 波 兰 表达式并存 于全 局 数组 char repol[maxs]中。str2repol()函 数中缀 表达式转 成 逆 波 兰 后缀 表达式算法如下: (1)首 先构 造 一个 运算符栈 stack[maxs],此 运算符在栈 内遵 循 越 往 栈 顶 优先级越 高的原则。 (2)读入一个 中缀 表示算术 表达式str[maxs](注 :str[i]=cal[i])。 (3)从左至右扫描该算术表达式,从第一个字符开始判断,如果该字符是数字,则分析到该数字串的结束并将该数字串直接输出到repol[max s]中。 (4)如果不是数字,该字符则是运算符,此时需比较优先关系。 步骤如下: 若为左括号‘...