中易网

C语言表达式求值

答案:1  悬赏:20  
解决时间 2021-03-05 22:04
C语言表达式求值
最佳答案
//基本的堆栈思想,写一个简单的,你看自己能完善一下吧
#include
#include
typedef struct
{
int * base;
int * top;
int size;
} stack_i;
void initStack_I(stack_i * int_sta)
{
int_sta->base = (int *)malloc(sizeof(int) * 100);
int_sta->top  = int_sta->base;
int_sta->size = 100;
}
void deleteStack_I(stack_i * int_sta)
{
free(int_sta->base);
}
void push_I(stack_i * int_sta, int i)
{
if(int_sta->top - int_sta->base >= int_sta->size)
{
return;
}
*(int_sta->top++) = i;
}
void pop_I(stack_i * int_sta, int * i)
{
if(int_sta->top == int_sta->base)
{
return;
}

*i = *(--int_sta->top);
}
int main(void)
{
int  i;
int  temp, temp1;
int  sum = 0;
char c; //当前字符
char lastc = 0; //上一个字符
stack_i IS;
initStack_I(&IS);
scanf("%d", &i); //接收第一个数字
push_I(&IS, i);  //压栈
while(1)
{
scanf("%c", &c); //接收第一个字符
if(c == '
')//换行符就退出
{
break;
}
switch(c)
{
case '+':
if(lastc == '+')//上次也是一个加号的话
{
pop_I(&IS, &temp);  //弹出上一个数字
pop_I(&IS, &temp1); //弹出上一个数字
sum = temp + temp1; //加法计算
push_I(&IS, sum);   //新的结果压栈
}
scanf("%d", &i);//接收一个数字进来
push_I(&IS, i); //压栈
lastc = c;
break;
case '*':
scanf("%d", &i);//接收一个数字进来
pop_I(&IS, &temp);  //弹出上一个数字
sum = i * temp; //乘法计算
push_I(&IS, sum);   //新的结果压栈
break;
}
}
temp1 = 0;
pop_I(&IS, &temp);
pop_I(&IS, &temp1);
sum = temp + temp1;
printf("%d
", sum);
deleteStack_I(&IS);
return 0;
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
台湾珍珠奶茶怎么去啊,有知道地址的么
好难猜!求答案
盛利达电脑桌如何组装
哈尔滨哪里有可以烧烤野餐的地方
捷安特atx777atx怎么样
科目二考试。伍行。是一个人一部车吗
给文学配图是什么职业
全国计算机等级考试三级网络技术上机主要是考
汽车仪表盘温度始终显示26度,怎么排除
兄弟自助小火锅在什么地方啊,我要过去处理事
松下1.5变频空调能效比3.62一小时牦电多少
“敲竹杆”
刚来学校的怎么写以对学校做贡献为题写作文
家电维修的发票可以开些什么内容
金泫雅哪首歌里有歌词乌~啦啦
推荐资讯
修手机店会修苹果3gs吗
怎么在任务管理器上看电脑是否中毒
江姐饺子店怎么去啊,有知道地址的么
迈腾收音机效果不好,信号总是不稳,尤其一松
别人的朋友当你面欺负你的朋友,你会什么反应
回锅肉宣传语
中画幅跟全画幅区别是??
win8电脑插耳机没有声音怎么办
嘉兴南站到新塍镇有多远怎么坐车
键盘键帽润滑油的用法?具体涂在哪个位置,什
牙腊地址在哪,我要去那里办事
木之友贸易有限公司这个地址在什么地方,我要
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?