美文网首页
C++实现简单的表达式类型的代码

C++实现简单的表达式类型的代码

作者: 简简单单咦 | 来源:发表于2020-06-08 10:55 被阅读0次

下面内容段是关于C++实现简单的表达式类型的内容,应该能对码农有好处。

#include<stdio.h>

#include<stdlib.h>

#include<malloc.h>

#include<string.h>

typedef enum

{

INT, CHAR

typedef union

{

char vchar;

    int num;

} ElemType;

typedef struct BiTNode

{

typedef struct

{

} SqStack;

{

return 0;

}

{

if(S.top == S.base) return 0;

return 1;

}

{

}

return 1;

}

{

return 1;

}

int StackEmpty(SqStack S)

{

if(S.top==S.base)

return 1;

else

return 0;

}

void list();

int getPreExpr();

int Primary(char a,char b);

void WriteExpr(BiTree E);

int Check_Variable(BiTree E);

float Operate(int a, char ope, int b);

float Value(BiTree E);

int main()

{

char choice;

float value_result;

while(1)

{

printf("请输入你的选择:");

choice = getch();

switch(choice)

{

case '1':

if(getPreExpr())

if(ReadExpr(&E))

{

isExist=1;

printf("表达式构造成功!n");

}

printf("按任意键返回:");

getch();

break;

case '2':

{

printf("n带括弧的中缀表达式为:");

WriteExpr(E);

}

else

printf("n没有成功构造表达式!");

printf("n按任意键返回:");

getch();

break;

case '3':

{

char next;

do

{

int Assign_flag=0;

int c;

char V;

printf("n表达式E为:");

WriteExpr(E);

printf("n请输入需要赋值的变量:");

V=getchar();

if((V>='a' && V<='z') || (V>='A' && V<='Z'))

{

printf("");

}

else

{

printf("请输入字母!");

next = 'y';

}

printf("请输入需要赋给该变量的值:",V);

scanf("%d",&c);

Assign(&E,V,c,&Assign_flag);

if(Assign_flag)

{

printf("赋值成功!n赋值后的表达式为:");

WriteExpr(E);

}

else

printf("赋值失败!可能表达式中没有此变量!");

printf("n是否继续赋值?<y/n>");

next = getch();

}while(next=='y' || next=='Y');

}

else

{

printf("n没有成功构造表达式!");

printf("n按任意键返回:");

getch();

}

break;

case '4':

{

printf("n算术表达式为:");

WriteExpr(E);

{

value_result = Value(E);

printf("n其值为:");

printf("%.2f",value_result);

}

else

printf("n表达式中仍存在没有赋值的变量!");

}

else

printf("n没有成功构造表达式!");

printf("n按任意键返回:");

getch();

break;

case '0':

printf("n感谢使用,再见!n按任意键退出:");

getch();

exit(0);

break;

}

}

return 0;

}

void list()

{

printf("------------------表达式类型的实现-----------------n");

printf("          1.输入前缀表示式并构造表达式n");

printf("          2.用带括弧的中级表示式输出表达式n");

printf("          3.对表达式中的变量赋值n");

printf("          4.对算术表达式求值n");

printf("----------------------------------------------------n");

}

int getPreExpr()

{

printf("n请输入前缀表示式:");

{

printf("输入错误!表达式只有一个运算符!");

return 0;

}

else if((preExpr[0] >= '0' && preExpr[0] <= '9') || (preExpr[0] >= 'a' && preExpr[0] <= 'z') || (preExpr[0] >= 'A' && preExpr[0] <= 'Z'))

{

printf("输入成功!表达式只有一个字符!");

return 1;

}

else

{

printf("输入错误!输入无法识别");

return 0;

}

else

return 1;

}

{

{

char value[2];

value[0] = preExpr[i];

value[1] = '0';

}

{

}

}

{

SqStack S;

BiTree p,q;

{

}

else

{

for(i=1; i<len && !StackEmpty(S); i++)

{

p=(BiTree)malloc(sizeof(BiTNode));

p->lchild = NULL;

p->rchild = NULL;

{

{

q->lchild=p;

Push(&S,p);

q=p;

}

{

q->rchild=p;

Push(&S,p);

q=p;

}

}

{

if(!q->lchild)

{

q->lchild=p;

Pop(&S,&q);

}

else

{

q->rchild=p;

Pop(&S,&q);

}

}

}

if(StackEmpty(S) && i >= len)

{

return 1;

}

else

{

printf("n输入的表达式有误!");

return 0;

}

}

}

int Primary(char a,char b)

{

{

{

return 0;

else

return 1;

}

else

return 0;

}

else

return 0;

}

void WriteExpr(BiTree E)

{

if(E)

{

{

if(Primary(E->data.vchar,E->lchild->data.vchar))

{

printf("(");

WriteExpr(E->lchild);

printf(")");

}

else

}

if(E->type == INT)

printf("%d",E->data.num);

else

printf("%c",E->data.vchar);

{

if(Primary(E->data.vchar,E->rchild->data.vchar))

{

printf("(");

WriteExpr(E->rchild);

printf(")");

}

else

}

else

}

}

{

{

{

}

}

}

int Check_Variable(BiTree E)

{

if(E && E->type == CHAR)

{

return 0;

if(Check_Variable(E->lchild))

{

}

}

else

return 1;

}

float Operate(int a, char ope, int b)

{

switch(ope)

{

case '+': return (a+b); break;

case '-': return (a-b); break;

case '/': return (a/b); break;

    default : return 0;

}

}

float Value(BiTree E)

{

{

if(!E->lchild && !E->rchild && E->type == INT)

return E->data.num;

return Operate(Value(E->lchild),E->data.vchar,Value(E->rchild));

}

}

相关文章

网友评论

      本文标题:C++实现简单的表达式类型的代码

      本文链接:https://www.haomeiwen.com/subject/yvkltktx.html