c语言做一个计算器,请问,用c语言做一个计算器 包括+-*/()的运算 用栈 该怎么做...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#include

#include

#define UINT unsigned int

struct LOGIC

{

UINT logic,site;

};

char *text="+8*9*(8+7)+12/6-4";

int calc_exp(char *sz);

int calc_part(int a,int b,UINT w);

int main(int argc,char *argv[])

{

std::cout<

std::cin.get();

return 0;

}

int calc_exp(char *sz)

{

int calc_rt=0;

UINT szcnt=0;

LOGIC *logic;

UINT *expval;

UINT lcnt=0;

UINT ecnt=0;

bool bj=false;

UINT ti=0;

int tn=0;

int tr=0;

char *tch=0;

szcnt=sizeof(sz);

bj=false;

for(UINT i=0;i

{

switch(sz[i])

{

case '+':

case '-':

case '*':

case '/':

case '(':

case ')':

bj=false;

lcnt++;

break;

default:

if(bj==false)

{

ecnt++;

bj=true;

}

break;

}

}

if(lcnt!=0)logic=new LOGIC[lcnt];

if(ecnt!=0)expval=new UINT[ecnt];

else return 0;

bj=false;

ti=0;

tn=0;

for(UINT i=0;i

{

switch(sz[i])

{

case '+':

case '-':

case '*':

case '/':

case '(':

case ')':

switch(sz[i])

{

case '+':

logic[ti].logic=0;

break;

case '-':

logic[ti].logic=1;

break;

case '*':

logic[ti].logic=2;

break;

case '/':

logic[ti].logic=3;

break;

case '(':

logic[ti].logic=4;

break;

case ')':

logic[ti].logic=5;

break;

}

bj=false;

ti++;

break;

default:

if(bj==false)

{

if(tch!=0)

{

delete[] tch;

tch=0;

}

tch=new char[logic[ti].site-i];

for(UINT j=i;j

{

tch[j-i]=sz[j];

}

expval[tn]=atoi(tch);

tn++;

bj=true;

}

break;

}

}

if(tch!=0)

{

delete[] tch;

tch=0;

}

if(lcnt==0)return expval[0];

ti=0;

tn=-1;

while(ti

{

switch(logic[ti].logic)

{

case 0:

case 1:

if(tn!=-1)

{

calc_part(calc_rt,tr,logic[tn].logic);

tn=-1;

}

else

{

tn=ti;

tr=expval[ti];

}

break;

break;

case 2:

tr*=expval[ti];

break;

case 3:

tr/=expval[ti];

break;

case 4:

for(UINT j=ti;j

{

if(logic[j].logic==5)

{

tch=new char[logic[j].site-logic[ti].site-1];

for(UINT k=0;k

{

tch[k]=sz[logic[ti].site+1+k];

}

calc_part(tr,calc_exp(tch),logic[ti-1].logic);

ti=j;

break;

}

}

break;

}

ti++;

}

return calc_rt;

}

int calc_part(int a,int b,UINT w)

{

switch(w)

{

case 0:

return (a+b);

break;

case 1:

return (a-b);

break;

case 2:

return (a*b);

break;

case 3:

return (a/b);

break;

}

}

还没测试过,做个构思吧,我百度了一下,你去这个地方看,那里跟你想要的更合适:

http://wenku.baidu.com/view/b841d90003d8ce2f006623cf.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的计算器的C代码实现: ```c #include <stdio.h> #include <stdlib.h> /* 定义符号常量 */ #define MAXSIZE 1000 #define true 1 #define false 0 /* 定义全局变量 */ char expr[MAXSIZE]; // 存储输入的表达式 int index = 0; // 当前处理字符的下标 /* 函数声明 */ int calc(); // 计算函数 int add_sub(); // 加减运算 int mul_div(); // 乘除运算 int get_num(); // 获取数字 int main() { printf("请输入要计算的表达式:\n"); scanf("%s", expr); int result = calc(); printf("计算结果为:%d\n", result); return 0; } /* 计算函数 */ int calc() { int res = add_sub(); return res; } /* 加减运算 */ int add_sub() { int res = mul_div(); while (true) { if (expr[index] == '+') { index++; res += mul_div(); } else if (expr[index] == '-') { index++; res -= mul_div(); } else { break; } } return res; } /* 乘除运算 */ int mul_div() { int res = get_num(); while (true) { if (expr[index] == '*') { index++; res *= get_num(); } else if (expr[index] == '/') { index++; int num = get_num(); if (num == 0) { printf("除数不能为0!\n"); exit(1); } res /= num; } else { break; } } return res; } /* 获取数字 */ int get_num() { int res = 0; if (expr[index] == '(') { index++; res = add_sub(); if (expr[index] == ')') { index++; } else { printf("括号不匹配!\n"); exit(1); } } else if (expr[index] >= '0' && expr[index] <= '9') { while (expr[index] >= '0' && expr[index] <= '9') { res = res * 10 + (expr[index] - '0'); index++; } } else { printf("输入有误!\n"); exit(1); } return res; } ``` 这个计算器可以支持括号、加减乘除四则运算,不限定输入长度。你可以将上述代码保存为calc.c并编译运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值