表达式类型的实现c程序(功能全,可运行).docVIP

  • 8
  • 0
  • 约2.04万字
  • 约 19页
  • 2017-09-02 发布于重庆
  • 举报

表达式类型的实现c程序(功能全,可运行).doc

表达式类型的实现c程序(功能全,可运行)

expression.cpp #includeexpression.h #includemath.h #include stdio.h #define pi 3.1415926 /*全局变量*/ int save_number[51];/*在按原表达式输入形式中,输入的常量保存到数组save_number中,常量最多为50个,0单元不用*/ char Expr_String[50];/*存放表达式的字符串*/ /*以字符序列的形式输入语法正确的前缀表达式,保存到字符串string*/ /*参数flag=0表示输出的提示信息是请输入正确的前缀表示式:*/ /*flag=1表示输出的提示信息为请以表达式的原书写形式输入正确表示式:*/ Status Input_Expr(char *string,int flag) { if(flag==0)printf(\n请输入正确的前缀表示式:); else printf(\n请以表达式的原书写形式输入正确表示式:); flushall();/*清理缓冲区*/ gets(string);/*从键盘输入一串字符串作为表达式*/ if(strlen(string)==1)/*输入的表达式字符串长度为1*/ if(string[0]==+||string[0]==-||string[0]==*||string[0]==/||string[0]==^)/*输入的表达式只有一个运算符*/ { printf(\n表达式只有一个字符,为运算符,错误!);return ERROR;} else if((string[0]=0string[0]9)||(string[0]=astring[0]=z)||(string[0]=Astring[0]=Z)) /*输入的表达式只有一个数字或字符*/ { printf(\n表达式只有一个字符!);return OK;} else {printf(\n输入的字符不是运算符也不是变量常量,错误!);return ERROR;} return OK; } /*判断字符string[i],如果是0-9常量之间,二叉树结点存为整型;否则,存为字符型*/ void judge_value(BiTree *E,char *string,int i) { if(string[i]=0string[i]=9)/*为常量*/ {(*E)-data.tag=INT;(*E)-data.num=string[i]-48;} else if(string[i]=1string[i]=20)/*为常量,常量存于数组save_number中*/ {(*E)-data.tag=INT;(*E)-data.num=save_number[string[i]];} else/*为变量*/ {(*E)-data.tag=CHAR;(*E)-data.c=string[i];} } /*以正确的前缀表示式并构造表达式E*/ Status ReadExpr(BiTree *E,char *exprstring) { SqStack S;//定义顺序栈S int i,len;/*len为表达式的长度*/ BiTree p,q; (*E)=(BiTree)malloc(sizeof(BiTNode));/*申请二叉树的根结点的空间*/ (*E)-lchild=NULL; (*E)-rchild=NULL; len=strlen(exprstring);/*len赋值为表达式的长度*/ if(len==1)/*表达式长度为1时,二叉树只有根结点*/ judge_value(E,exprstring,0);/*将exprstring[0]存入二叉树的结点中*/ else { judge_value(E,exprstring,0);/*将exprstring[0]存入二叉树的结点中*/ InitStack(S);/*初始化栈*/ q=(*E); Push(S,q);/*入栈*/ Push(S,q);/*入栈,根结点入栈两次是为判断先序输入的表达式是不是正确的表达式*/ for(i=1;ilen!StackEmpty(S);i++)// { p=(BiTree)malloc(sizeof(BiTNode)); judge_value(p,exprstring,i);/*将exprstring[i]存入二叉树的结点中*/ p-lchild=NULL; p-r

文档评论(0)

1亿VIP精品文档

相关文档