C语言表达式求值

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/*

表达式求值,输入一个表达式,如1+2*3#,程序可计算出结果为7

支持以下符号:

+ - * / ( ) ^ .

可以计算整数、小数

其中^表示次方,2^5表示2的5次方

*/

/*头文件*/

#include <>

#include <>

#include <>

#include <>

#include <>

/*宏定义*/

#define INIT_STACK_SIZE 100

#define SET_NUM 8

#define N 100

/*字符优先级表*/

unsigned char prior[SET_NUM][SET_NUM] =

{

/* '+' '-' '*' '/' '(' ')' '#' '^' */

/*'+'*/'>', '>', '<', '<', '<', '>', '>', '<',

/*'-'*/'>', '>', '<', '<', '<', '>', '>', '<',

/*'*'*/'>', '>', '>', '>', '<', '>', '>', '<',

/*'/'*/'>', '>', '>', '>', '<', '>', '>', '<',

/*'('*/'<', '<', '<', '<', '<', '=', ' ', '<',

/*')'*/'>', '>', '>', '>', ' ', '>', '>', '>',

/*'#'*/'<', '<', '<', '<', '<', ' ', '=', '<',

/*'^'*/'>', '>', '>', '>', '<', '>', '>', '>'

};

unsigned char priorSet[SET_NUM] = {'+', '-', '*', '/', '(', ')', '#', '^'};

/*结构体定义,这是用来存放字符的栈*/

typedef struct

{

char *base;

char *top;

int stacksize;

} SqStackC;

/*结构体定义,这是用来存放数字的栈*/

typedef struct

{

double *base;

double *top;

int stacksize;

} SqStackN;

void initStackN(SqStackN &);

void initStackC(SqStackC &);

void pushN(SqStackN &, double);

void pushC(SqStackN &, double);

void popN(SqStackN &, double &);

void popC(SqStackN &, double &);

double calculate(double, char, double);

int findInSet(char);

char compare(char, char);

void getSolution();

/*主函数*/

void main()

{

getSolution();

}

/*初始化数字栈*/

void initStackN(SqStackN &S)

{

= (double*) malloc(INIT_STACK_SIZE * sizeof(double));

= ;

= INIT_STACK_SIZE;

}

/*初始化字符栈*/

void initStackC(SqStackC &S)

{

= (char*) malloc(INIT_STACK_SIZE * sizeof(char));

= ;

= INIT_STACK_SIZE;

}

/*向数字栈中存放数字*/

void pushN(SqStackN &S, double x)

{

if >=

*++) = x;

}

/*向字符栈中存放字符*/

void pushC(SqStackC &S, char x)

{

if - >=

return;

*++) = x;

}

/*从数字栈中取出数字*/

void popN(SqStackN &S, double &x)

{

if ==

return;

x = *;

}

/*从字符栈中取出字符*/

void popC(SqStackC &S, char &x)

{

if ==

return;

x = *;

}

/*这个函数返回a operation b的值。假如operation为'+',则返回a+b的值*/ double calculate(double a, char operation, double b)

{

/*判断operation,返回对应的计算结果*/

switch (operation) {

case '+':

return a + b;

case '-':

return b - a;

case '*':

return a * b;

case '/':

return b / a;

case '^':

return pow(b, a);

default:

相关文档
最新文档