好文档 - 专业文书写作范文服务资料分享网站

#(C语言版)科学计算器设计

天下 分享 时间: 加入收藏 我要投稿 点赞

科学计算器设计(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,然后以“X运算符Y”的形式计算出结果,再将结果压入栈S 如果后缀表达式未读完,就重复上述过程,最后输出栈顶数值则为结束

计算后缀表达式 calcu_expr() 输出结果 三、 详细设计

宏:

#define TEST #define MAX_SIZE 100 #define LBRACKET 0 #define RBRACKET 1 #define ADD 2 #define SUB 3 #define MUL 4 #define DIV 5 #define INT 6 #define DOUBLE 7 数据结构:

//表示测试阶段 //表达式长度 //左括号 //右括号 //加 //减 //乘 //乘 //整数 //浮点数

表达式节点

struct ExprNode{

int n; //表达式节点类型 double p; //表达式节点数据 };

中缀表达式:

struct ExprNode infixExpr[MAX_SIZE]; int infixLen; 后缀表达式:

struct ExprNode suffixExpr[MAX_SIZE]; int suffixLen; 后缀转换栈:

int transStack[MAX_SIZE]; int transTop;

后缀表达式运算栈:

struct ExprNode calcuStack[MAX_SIZE]; int calcuTop; 函数过程:

__inline int get_char( char *c ) 缓冲变量无字符则读入字符 读入成功返回0,否者返回-1 int input_expr( void ) 读入表达式

若输入非法字符则返回-1,否则返回0 int pri( int a, int b ) 优先级计算

若a优先于b则返回-1,否则返回0 int trans_expr( void ) 中缀表达式转换为后缀表达式

括号不匹配返回-1,否则返回0

__inline int maxn( int a, int b ) 求最大值

struct ExprNode calcu( struct ExprNode *a, struct ExprNode *b, int c ) 计算a和b做c运算的结果 int calcu_expr( void ) 计算后缀表达式

表达式计算失败返回-1,否则为0 void show( void ) 输出运算结果 代码:

#include

//#define TEST //表示测试阶段 #define MAX_SIZE 100 //表达式长度 #define LBRACKET 0 //左括号

#(C语言版)科学计算器设计

科学计算器设计(C语言版)学校:学院:计算机信息工程学院语言平台:作者:日期:一、背景和目的计算器是现代日常生活中使用较为频繁的工具之一,常用的计算器有简易版和科学计算器两种模式。简易版的计算器不支持表达式运算,每次只能输入一个数据或者运算符来计算,而科学计算器除了容纳简易版计算器的功能外,还支持表达式运算,用户
推荐度:
点击下载文档文档为doc格式
9pvlc9s3xm5zpak1cslt1is53085cn00icw
领取福利

微信扫码领取福利

微信扫码分享