永发信息网

用C语言编一个能运算任何四则用算的程序

答案:1  悬赏:40  手机版
解决时间 2021-04-28 10:16
例如:28* 3+67-23/2-12 等等 就是能实现 任何 四则用算 急!!!!
最佳答案
支持+-*/(),代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

char* next;

double opd[1000];
int opt;
double *popd = opd;
#define PUSH(n) { *popd++ = n; }
#define POP() (*--popd)
#define TOP() (*(popd-1))
#define EMPTY() (popd == opd)
#define SIZE() (popd - opd)

void fail(char* s)
{
printf("match '%s' failed near '%c'.\n", s, *--next);
exit(0);
}

#define lbr() { if(*next++ == '(') ; else fail("("); }
#define rbr() { if(*next++ == ')') ; else fail(")"); }
void term();
void lv1();
void lv2();
void cal(char);

void expr()
{
term(); lv1();
}

void term()
{
double num = 0;
if(isdigit(*next)) {
do {
num = num * 10 + (*next - '0');
} while(isdigit(*++next));

PUSH(num);
} else if(*next == '(') {
lbr(); expr(); rbr();
} else {
fail("term");
}
}

void lv1()
{
while(1) {
char c = *next;
if(c == '+' || c == '-') {
++next;
lv2(); ++opt; cal(c);
} else if(*next == '*' || *next == '/') {
lv2();
} else {
break;
}
}
}

void lv2()
{
while(1) {
char c = *next;
if(c == '*' || c == '/') {
++next;
term(); ++opt; cal(c);
} else if(isdigit(*next)) {
term();
} else {
break;
}
}
}

double eval(char* s)
{
next = s;
expr();
if(*next || opt != 0) {
puts("invalid expression.");
exit(0);
}
return TOP();
}

void cal(char c)
{
double lhs, rhs, r;
if(SIZE() > 1) {
rhs = POP();
lhs = POP();
switch(c)
{
case '+': r = lhs + rhs; break;
case '-': r = lhs - rhs; break;
case '*': r = lhs * rhs; break;
case '/': r = lhs / rhs; break;
}
PUSH(r);
--opt;
}
}

int main()
{
char* expr = "28*3+67-23/2-12";
printf("%s=%g\n", expr, eval( expr ) );
return 0;
}

附图:

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
WOW 求法师 FB天赋 《冰》和 战场PK天赋《奥
大雄的人鱼大海战插曲
二本院校和三本院校开学时间相同吗?
榭丽舍在哪里啊,我有事要去这个地方
什么样的字体好看,靓丽女人店名什么样的字体
我是做家纺的,要怎么发说说
结婚一共要多少钱
清代都有哪些皇帝?
是你们不懂我,不是我变了用英语怎么说?
约克冰水机组多少钱
这个网站这首歌主题叫什么名字哦?
想买个台式的电脑,不知道需要什么配置?哪种
老公网恋了怎么办 是不是应该自动退出 成全他
QQ出现异常怎么办
青田街道办事处地址有知道的么?有点事想过去
推荐资讯
QQ空间里的丝路英雄哪个区玩的人多呢 ?
二声牧笛从皆闻,还眼圆睛四闪光是什么动物?
大学生如何找家教,越快越好啊
谁有办法一下子可以删很多留言?
哪个牌子休闲鞋好看,高帮鞋系鞋带简单好看的
马圈沟村怎么去啊,有知道地址的么
欧迪还红吗?
x加五分之x等于,240怎么写?
请问NoklA手机E66电池在正常使用下能用几天?
基督教诗歌耶稣爱我,谁能给我10首或20首基督
长春地区哈飞汽车
傅彪和他的妻子张秋芳主演的电视剧《恩情》哪
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?