C语言计算程序 100

求一个C语言程序,能够计算五个数的加减乘除(符合四则运算法则),并且算式是一次输入的,程序先能够将这五个数赋给一个数组,运算符赋给另一个数组,比较运算的优先级后再进行运算... 求一个C语言程序,能够计算五个数的加减乘除(符合四则运算法则),并且算式是一次输入的,程序先能够将这五个数赋给一个数组,运算符赋给另一个数组,比较运算的优先级后再进行运算,在线等大神指点啊,谢谢! 展开
 我来答
百度网友8e773d301
2013-11-07 · TA获得超过328个赞
知道小有建树答主
回答量:76
采纳率:0%
帮助的人:104万
展开全部

所谓后缀表达式,就是将a @ b写成 a b @
其中前者是我们日常生活中的中缀表达式,后面的就是后缀表达式。
例如7*8 化为 7 8 *
例如6-9 化为 6 9 -
例如5*(3+2),化成后缀表达式就是5 3 2 + *
可知后缀表达式无括号。
然后依次扫描符号,数字就直接进栈,遇到运算符就将前两个数字出栈、运算后结果再进栈:
例如5 3 2 + *
扫描5——>5
扫描3——>5 3
扫描2——>5 3 2
扫描+——>5 5
扫描*——>25


所以你现在要解决的问题是如何将中缀表达式转化成后缀表达式。
这个依然是通过栈来实现。
从左到右扫描,遇到数字直接输出,遇到符号比较优先级进栈或输出(优先级大的进栈,小的或相等的直接输出。其中左括号优先级大于乘除大于加减),遇到左括号则进栈,遇到右括号则将栈内左括号之内的符号都输出,遇到末尾就将栈内的所有符号都输出。
例如5*(3+2)

扫描5 直接输出
扫描* 进栈(栈内:*)
扫描( 进栈(站内:* ()
扫描3 直接输出
扫描+ +的优先级小于(的优先级,进栈,(栈内:* ( +)
扫描2 直接输出
扫描) 将站内(之前的全部输出,即输出了+
扫描到末尾,将栈内所有东西全部输出,即输出了*
综上,输出了5 3 2 + *


你可以看这个链接http://zhidao.baidu.com/question/552455212079542532.html?oldq=1

也是我回答的


zhanghaoyuan00
2013-11-06 · 超过38用户采纳过TA的回答
知道小有建树答主
回答量:87
采纳率:0%
帮助的人:99.3万
展开全部
我是来秀优越的= =
这种用数组处理的方式好麻烦。。。如果你仅学到数组操作的话。。。

#include <iostream>
#include <cstring>
using namespace std;

int a[5];
char b[4];

void input() {
string s;
cin >> s;
int cur = 0;
int x = 0, y = 0, z = 0;
for (int i = 0; i < 5; i++) {
while (s[cur] >= '0' && s[cur] <= '9')
z = 10 * z + int(s[cur++]) - 48;
a[x++] = z;
z = 0;
if (i < 4) {
b[y++] = s[cur];
cur++;
}
}
}

int calc() {
int y = 4;
for (int i = 0; i < y; i++)
if (b[i] == '*' || b[i] == '/') {
if (b[i] == '*') a[i] *= a[i + 1];
else a[i] /= a[i + 1];
for (int j = i + 1; j < y; j++)
a[j] = a[j + 1];
for (int j = i; j < y - 1; j++)
b[j] = b[j + 1];
i = -1;
y--;
}
if (y == 0) return a[0];
for (int i = 0; i < y; i++) {
if (b[i] == '+') a[i] += a[i + 1];
else a[i] -= a[i + 1];
for (int j = i + 1; j < y; j++)
a[j] = a[j + 1];
for (int j = i; j < y - 1; j++)
b[j] = b[j + 1];
i = -1;
y--;
}
return a[0];
}

int main()
{
input();
cout << calc() << endl;
system("pause");
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-11-06
展开全部

你好!!

是这样的效果吗,满意请采纳,多加点分吧,采纳后私信给你

    

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式