c语言中的加减乘除字母,c语言实现表达式计算(加减乘除四则运算和括号运算“使用 [ ] ”...

c语言实现表达式计算(加减乘除四则运算和括号运算“使用 [ ] ”

c语言实现表达式计算(加减乘除四则运算和括号运算“使用 [ ] ”)

利用栈来实现表达式的计算

主函数部分:

int main()

{

node fh;

date sj;

char ch[50],z,c[6]; //ch[50]中存放表达式形成的字符串,c[6]中存放单个数据形成的字符串。

double x,y;

int i=0,j,k,n;

sj=(date)malloc(sizeof(date));

fh=(node)malloc(sizeof(node));

ysf[0]=’#’;

ysf[1]=’[’; //

ysf[2]=’+’; //

ysf[3]=’-’; //定义符号的优先级

ysf[4]=’*’; //

ysf[5]=’/’; //

sjchushihua(sj); //初始化

chushihua(fh);

push(fh,’#’); //将‘#’号键先行写入符号栈中

printf(“请输入要计算的数学表达式(以‘#’结束输入,括号统一使用‘[ ]’):\n”);

gets(ch); //将表达式存入字符串ch中

n=check(ch); //进行差错检测

if(n==0)

{

return 0;

}

while(ch[i]!=’#’||gettop(fh)!=’#’) //当表达式元素录入结束且运算符全部运算完毕时结束循环

{

/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/

/* 将整数和浮点数的字符存入c[6]中,运用atof函数数据字符串转成整型或浮点型 */

if((ch[i]=='-'&&(ch[i-1]=='['||i==0))||(ch[i]>47&&ch[i]<58))

{

for(k=0;k<6;k++)

c[k]='\0';

j=0;

if((ch[i]=='-')&&((ch[i-1]=='[')||(i==0))) //当数据是负数,先行录入一个‘-’号

{

c[j]='-';

j++;

i++;

}

while((ch[i]>47&&ch[i]<58)||(ch[i]=='.')) //将连续的数据字符存入c[6]中

{

c[j]=ch[i];

i++;

j++;

}

c[j]='\0';

sjpush(sj,atof(c)); //将数据字符串转化并存入数据栈

}

/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/

else if(ch[i]==93) //当遇到‘]’时,对括号内的表达式进行运算

{

while(gettop(fh)!=91) //当符号栈的栈顶元素是‘[’时,结束运算

{

z=pop(fh);

if(z=='/'&&sjgettop(sj)==0.0) //当符号是‘/’时,检查除数是否为0,如果是,出错,结束运算

{

printf("除数为0,错误!\n");

return 0;

}

x=sjpop(sj);

y=sjpop(sj); //输出两个数据栈的元素,进行运算,将结果存入数据栈中

x=yunsuan(x,z,y);

sjpush(sj,x);

}

z=pop(fh); //消去符号栈顶的‘[’

i++;

}

/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/

else

{

switch(compare(ch[i],gettop(fh))) //比较当前运算符和符号栈顶元素运算符的优先级

{

case '>':push(fh,ch[i]); //栈顶元素符号的优先级小

i++;

break;

case '=': //栈顶元素符号的优先级大或相等

case '

{

z=pop(fh);

if(z=='/'&&sjgettop(sj)==0) //当符号是‘/’时,检查除数是否为0,如果是,出错,结束运算

{

printf("除数为0,错误!\n");

return 0;

}

x=sjpop(sj);

y=sjpop(sj);

x=yunsuan(x,z,y); //输出两个数据栈的元素,进行运算,将结果存入数据栈中

sjpush(sj,x);

break;

}

else

{

push(fh,ch[i]);

i++;

}

}

}

/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/

}

printf("其结果为:%lf\n",sjgettop(sj)); //输出数据栈顶元素,即最终结果

return 0;

}

其结果如下;

7474540fe7bde2be8ae9bc8ff9c63fe7.png

检测错误为:

db54a3a7af8a3288dd7b75dbba02eb63.png

c语言实现表达式计算(加减乘除四则运算和括号运算“使用 [ ] ”相关教程

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值