C语言一些奇奇怪怪的题目!栈的简单应用之后缀表达式求值问题

 

题目

 

如下程序,如何实现

 

数据测试以及输出:

 

学前知识

后缀表达式(将运算符写在操作数之后)也叫逆波兰式(Reverse Polish notation,RPN,或逆波兰记法)。

如:我们平时写a+b,这是中缀表达式,写成后缀表达式就是:ab+

(a+b)*c-(a+b)/e的后缀表达式为:(a+b)*c-(a+b)/e

→((a+b)*c)((a+b)/e)-

→((a+b)c*)((a+b)e/)-

→(ab+c*)(ab+e/)-

→ab+c*ab+e/-

解析过程

新建一个表达式,如果当前字符为变量或者为数字,则压栈,如果是运算符,则将栈顶两个元素弹出作相应运算,结果再入栈,最后当表达式扫描完后,栈里的就是结果。难点在于如何拆分数字。

实现代码

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
float num[256] = { 0 };
float comp(char s[])
{
int i = 0, top = 0, x;
while (i <= strlen(s) - 2)
{
switch (s[i])
{
case'+':
num[--top] += num[top + 1]; 
break;
case'-':
num[--top] -= num[top + 1]; 
break;
case'/':
num[--top] /= num[top + 1]; 
break;
case'*':
num[--top] *= num[top + 1]; 
break;
default: 
x = 0;
while (s[i] != ' ')
{
x = x * 10 + s[i] - '0';//数
if (s[i + 1] == '+' || s[i + 1] == '/' || s[i + 1] == '*' || s[i + 1] == '-')
break;
else
i++;
}
num[++top] = (float)x; 
break;
}
i++;
}
return num[top];
}
int main()
{
float result[100];
int count = 0;
while (1)
{
char inputStr[20] = "";
gets(inputStr);
if (strcmp(inputStr, "=") == 0)
{
break;
}
result[count++] = comp(inputStr);
memset(inputStr, 0, 20);
}
for (int i = 0; i < count; i++)
{
printf("%.2f\n", result[i]);
}
system("pause");
}

 

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

热门产品

php编程基础教程.pptx|php编程培训,php,编程,基础,教程,pptx
php编程基础教程.pptx

历史上的今天:02月23日

热门专题

安徽中源管业有限公司|安徽中源管业有限公司,安徽中源管业有限公司介绍,安徽中源管业有限公司电话,安徽中源管业有限公司地址,安徽中源管业有限公司厂家,安徽中源管业有限公司电力管,安徽中源管业有限公司管材
安徽中源管业有限公司
大理科技管理学校|大理科技管理学校,大理科技,大理科技中等职业技术学校,大理科技管理中等职业技术学校,大理科技学校
大理科技管理学校
小程序开发|微信小程序,小程序开发,小程序,小程序制作,微信小程序开发,小程序公司,小程序开发公司,分销,三级分销系统,分销系统
小程序开发
金诺幼儿园(春城路金诺幼儿园)|昆明官渡区幼儿园,幼儿园报名,官渡区幼儿园,春城路幼儿园,幼儿园招生,学前班,昆明幼儿园,金诺幼儿园,环城南路幼儿园,石井路幼儿园
金诺幼儿园(春城路金诺幼儿园)
开放大学|开放大学报名,开放大学报考,开放大学,什么是开放大学,开放大学学历,开放大学学费,开放大学报名条件,开放大学报名时间,开放大学学历,开放大学专业
开放大学
易捷尔高职单招|易捷尔高职单招,易捷尔高职单招培训,单招分数线,单招录取分数线,高职单招学校分数线
易捷尔高职单招
易捷尔单招|易捷尔单招,易捷尔单招培训,易捷尔单招报名,易捷尔单招考试,易捷尔单招培训学校,易捷尔单招分数
易捷尔单招
安徽中源管业|安徽中源管业,安徽中源管业mpp电力管,安徽中源管业cpvc电力管,安徽中源管业pe穿线管,安徽中源管业电力管,安徽中源管业排水管,安徽中源管业通信管,安徽中源管业管材
安徽中源管业

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部