一、 实验内容
本程序完成了算术表达式的求值以及演示操作。集体实现功能如下:
1.算术表达式的求值,包括加、减、乘、除、乘方、单目减运算;
2.赋值运算,即给某一变量赋值或赋计算表达式;
3.函数表达式求值,即运算量为变量。
4.运算量可以为实数,也可以为整数,只需简单修改宏定义。默认为实数运算。
二、数据结构设计
1. 算符优先法数据结构设计
本程序采用了“算符优先法”,使用两个工作栈。一个称作 OPTR,用以
寄存运算符;另一个称作 OPND,用以寄存操作数或运算结果。此处采用
的顺序栈结构如下:
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef strict{
SElemType *base;
SElemType *top;
int stacksize;}SqStack;
2.算术表达式分块存储结构设计
输入的算术表达式为一字符串,需要对其进行运算数和运算符的识别和存储,
例如表达式 11.2+23*8,需分成六部分存储,为方便算法设计,最后一部分
统一设置为“#”,具体如下:
11.2 + 23 * 8 #
具体的存储结构设计如下:
struct {
char
part[20];
}parts[100];
利用此结构,可轻松实现对表达式的分块存储。
3.变量名称和变量值的存储结构设计
在实现函数表达式求值过程中需要对函数表达式中的自变量的名称和数值
字符串进行存储。其数据结构设计如下:
1