永发信息网

用C语言编一个能运算任何四则用算的程序 (和数据结构有关)

答案:1  悬赏:70  手机版
解决时间 2021-07-19 03:06
例子:6-8/4+3*5@

9-6/(2+3)@

2*(3+5)/(6+4)@ 就向这样的例子 等等

请附是运行后的图片。 急!!!!!!!!!!!!!

最佳答案
#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)
{
static char buf[100];
char* p = buf;
while( *s != '@') {
if( *s != ' ' ) *p++ = *s;
++s;
}

next = buf;
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[] = { "6-8/4+3*5@","9-6/(2+3)@","2*(3+5)/(6+4)@" };
int i;
for ( i = 0; i < 3; ++i )
printf("%s=%g\n", expr[i], eval( expr[i] ) );
return 0;
}



我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
怎样才能把一个不喜欢的Q彻底的一次性删除
我为什么老是睡不着觉呢
为什么我开通了『万花筒』却没有300的流量?
手机上怎样复制QQ消息?
结婚喜盆里都放什么,结婚喜盆里都放些什么?
什么样的美白产品效果比较好,见效比较快!
我身高175CM 体重75KG 衣服选择什么样的尺码~
求助一首诗 要自己写的 最好写的是关羽 赵云
完美世界前传人鱼传说。新出的刺客怎么加点?
为什么做梦醒了还会记得一些?
鲜花卡片祝福语,第一次向女孩子表白心意,送
2009女生最喜欢的是什么?
有谁教教我网络硬盘怎么用密码锁住?
沁园春 雪的引无数英雄竞折腰的“竟”是什么
我的QQ校友农场怎么进不去啊
推荐资讯
DNF武器+11怎么上12?复制的别来?要亲身经历
家园等级升级好慢啊
哪里的人最有钱?实际点的,
为什么等到8点准时开农场农场还是开不了?
怎么在网上赚钱?怎么用QQ赚钱?
老师走了 给他唱什么歌
表示静的语句,形容心静的句子有哪些
脸上缝了针能吃鸡蛋或鸡蛋类食品吗?能喝百事
诺基亚5070内屏大概报价是多少?
周杰伦2009最新专辑在几月发行?
你是电脑高手吗?包括电脑维修方面
班主任生日祝福语简短,求 哥哥生日祝福语 简
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?