永发信息网

(数据结构编程)求含有四则运算表达式的值

答案:1  悬赏:30  手机版
解决时间 2021-04-23 05:18

用+ - × /() 和 0 1 2 3 4 5 6 7 8 9 组成像这样的表达式:

8-6/2-3×4+(1+9)/2 然后编程求值,要求能运算任何表达式的值

一:写出编程思想或方法

二:要有流程图

三:两种方法

四:请附上运行后的图

最佳答案

#include <ctype.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#define N 50
struct NumStack//定义栈结构体,用来存贮运算数字
{
int top;
double array[N];
};
struct OpStack//定义栈结构体,用来存贮运算符号
{
int top;
char array[N];
};
int Cint(char mychar)//函数,数符转化成数字
{
return (mychar-48);
}
void PushNum(NumStack *numstack,double num)
{
numstack->top++;//移动指针


numstack->array[numstack->top-1]=num;//插入元素
}
void PopNum(NumStack *numstack,double *num)//输出数
{
*num=numstack->array[numstack->top-1];
numstack->top--;//移动指针
}
void PushOp(OpStack*opstack,char op)//输入运算符
{
opstack->top++;
opstack->array[opstack->top-1]=op;
}
void PopOp(OpStack*opstack,char *op)//输出运算符
{
*op=opstack->array[opstack->top-1];
opstack->top--;
}
double Calc(double a,double b,char c)//两个数的四则运算
{
double result;
switch(c){
case '+':result=a+b;break;
case '-':result=a-b;break;
case '*':result=a*b;break;
case '/':result=a/b;break;
}
return result;
}
char Priority(char y,char x)//算术优先级的判定
{
char priority='<';
switch(x){
case '+':
case '-':if(y=='('||y=='#')priority='>';break;
case '*':
case '/':if(y=='('||y=='#'||y=='-'||y=='+')priority='>';break;
case '(':priority='>';break;
case ')':if(y=='(')priority='=';break;
case '#':if(y=='#')priority='=';break;
default:priority='E';
}
return priority;
}
void Process(NumStack *numstack,OpStack *opstack,char x)//主要实现函数
{
double a,b;char c;
static double tempnum=0.00000000;
static int len=10;
static int dot=0,flags=0;
if(isdigit(x) || x=='.')
{
if(x=='.')dot=1;
else
{
if(dot==0)//前趋数部分数值还原
tempnum=tempnum*10+Cint(x);
else{tempnum=tempnum+(double)Cint(x)/len; len*=10;}//else
}//else
}//if
else
{
if(flags==0 && x!='(')
{
PushNum(numstack,tempnum);
tempnum=0.00000000;
len=10;dot=0;
}
switch(Priority(opstack->array[opstack->top-1],x))
{
case '>':PushOp(opstack,x);flags=0;break;
case '<':
PopOp(opstack,&c);
PopNum(numstack,&b);
PopNum(numstack,&a);
PushNum(numstack,Calc(a,b,c));flags=1;
Process(numstack,opstack,x);break;
case '=':PopOp(opstack,&c);flags=1;break;
default:printf("Wrong Express");exit(0);
}//switch
}//else
}//process
void main()
{
cout<<"Enter your expression and end it with #:\n"<<endl;
NumStack numstack;
OpStack opstack;
char s[N];
unsigned int i=0;
numstack.top=0;
opstack.top=0;
cin>>s;
PushOp(&opstack,'#');
for(i=0;i<strlen(s);i++)
Process(&numstack,&opstack,s[i]);
cout<<numstack.array[numstack.top-1]<<endl;
}




有了程序,管流程图就很简单了……

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
停电的晚上一般情况下你会怎么做.
崇贞通宝一枚值多少钱?
鄢陵县许昌益生堂大药房(人民路店)怎么去啊,
雅诗兰黛适合什么年龄,雅诗兰黛红石榴精华水
玛丽亚凯莉性感视频
对焦仲卿的评价
石节窑地址在哪,我要去那里办事
文明用餐小标语幼儿园,幼儿园看小学升旗校长
平时能把女朋友捧上天,生气时怎么都不愿意哄
真心喜欢过的人多久才能忘却?
闹洞房时,都有那些方法闹新郎新娘?
灯具驱动器怎么套定额,节能灯管怎么套定额
有女生表白的吗?
帮忙搜下康凡《宁愿我伤心》的歌词,手机没搜
为什么农场采摘果实摘不了,显示操做失败
推荐资讯
QQ三国的购买问题
怎么去掉电脑主板倒计时
小江庄在什么地方啊,我要过去处理事情
2005年波尔图夺欧冠谁的功劳最大
南拳妈妈专辑
谁能送我一只宠物猪猪?
牙齿根步掉了一块
一千块能买个什么配置的二手电脑主机
请问今年的冬月是哪一个月呀?
飞车怎么快速旋转啊
小孩子晚上睡觉前鼻子总是不舒畅怎么回事
苏州在哪省?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?