科学计算器设计(C语言版)
学校:
学院:计算机信息工程学院
语言
平台:
作者:
日期:
一、 背景和目的
计算器是现代日常生活中使用较为频繁的工具之一,常用的计算器有简易版和科学计算
器两种模式。简易版的计算器不支持表达式运算,每次只能输入一个数据或者运算符来计算,
而科学计算器除了容纳简易版计算器的功能外,还支持表达式运算,用户可以输入一个合法
的算术表达式来得到所需的结果。
常用的算术表达式有三种,前缀表达式,中缀表达式和后缀表达式。
中缀表达式:我们平时书写的表达式就是中缀表达式,形如(a+b)* (c+d),事实上是
运算表达式形成的树的中序遍历,特点是用括号来描述优先级。
后缀表达式:也叫逆波兰表达式,事实上是算数表达式形成的树的后序遍历。中缀表达
式(a+b)* (c+d)的后缀表达式是ab+cd+*,它的特点就是遇到运算符就立刻进行运算。
前缀表达式:算数表达式形成的树的前序遍历。
日常所书写的是中缀表达式,但是计算机内部是用后缀表达式计算,所以此程序的用户
使用中缀表达式作为输入,程序将中缀表达式转化为后缀表达式后再进行运算并输出结果。
由于今后工作将使用C语言进行开发,而C语言是一个功能强大并且很灵活的语言,为
复习和巩固C编程,故决定用C语言编写一个科学计算器。
本次开发采用C语言,以面对过程思想进行开发,使用的数据结构有队列和栈。
二、 模块设计
本次开发,使用的控制台输入,并直接在控制台输出。
科学计算器的功能组件如下:
输入表达式
input_expr ()
当读到数字直接送至输出队列中
当读到运算符T 时
a :将栈中所有优先级高于或等于T
的运算符弹出,送至输出队列
中缀表达式转后缀表达式 b :T 进栈
trans_expr()
读到左括号时总是将它压入栈中
读到右括号时,将靠近栈顶的第一
个左括号上面的运算符依次全部
N 弹出,送至输出队列,再丢弃左括
号
转换成功
Y
建立一个栈
从左到右读后缀表达式,读到数字
就将它压入栈S 中,读到运算符则
计算后缀表达式 从栈中依次弹出两个数X 和Y,然
calcu_expr() 后以“X 运算符Y ”的形式计算出
结果,再将结果压入栈S
如果后缀表达式未读完,就重复上
述过程,最后输出栈顶数值则为结