题目
模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。
输入格式:
输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。
输出格式:
在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”。
输入样例:
1+2*10-10/2=
输出样例:
10
代码展示
#include<stdio.h>
int main()
{
//如何实现多位数参与运算!
//分母为0时的情况。
char c;
int s,m,i=1;
scanf("%d",&m);
s=m;
while(i==1)
{
scanf("%c",&c);
if(c=='=')
i=0;
else
{
scanf("%d",&m);
switch(c)
{
case '+': s=s+m; break;
case '-': s=s-m; break;
case '*': s=s*m; break;
case '/':
{ if(m==0)
{
printf("ERROR");
return 0;
}
else
s=s/m;
}
break;
default: {
printf("ERROR");
}
return 0;
}
}
}
printf("%d",s);
return 0;
}
代码分析
1、首先代码中注释部分是在首次分析这道题时的固态思维导致的两个问题,由纯数组来进行从左向右的运算无法简单清晰满足运算数据超过两位数以及分母为零的报错情况。
2、使用字符型变量来控制符号,整形数据来控制数据的输入,以此实现了一串数据的从左向右的计算,满足题目要求。
3、通过while(1)循环的恒循环结构来满足以“=”作为结束字符的要求,从而实现了代码中只要不出现“=”或其他非运算字符结束的运算编程要求。