目录
一、题目描述
二、输入样例
1+2*10-10/2=
三、输出样例
10
四、思路
1. 思路一(错误):
一开始的思路是想将所有的输入都存入字符数组a里
然后检索每一个元素
当元素a[i]不是数字时
进入switch结构对a[i-1]和a[i+1]进行相应操作
在进行加减乘除运算之前
需要对a[i-1]和a[i+1]进行字符转换成整型的操作
再将结果存入a[i+1]里面
直到检测到a[i]是=的时候输出a[i-1]
但是这有很大的问题
因为他是个字符数组
所以
a[i-1]=a[i-1]-'0';
a[i+1]=a[i+1]-'0';
a[i+1]=a[i-1]-a[i+1];
是有问题的
因为是个字符数组
他的本质还是个字符
他们的加减是不能直接得到整数的
2. 思路二:
第二种思路就是将
字符和数字分开输入
其实字符和数字的输入是有规律的
第一个输入是数字
存入整形数组a[0]中
第二个输入是字符ch
(进入字符循环)
(以输入'='为循环结束条件)
再在循环里输入要运算的数字
其他思路如上
还有要处理的细节问题是
细节问题1:
当字符ch=‘/’时
如果a[i]=0时
输出“ERROR”;
标记p=1
细节问题2:
当输入的字符不属于四则运算的字符时
标记p=1
最后输出时如果p!=1才会输出
否则会有问题
五、代码实现
#include<stdio.h>
int main()
{
int a[100];
int i=1,p=0;
char ch;
scanf("%d",&a[0]);
while((ch=getchar())!='='){
scanf("%d",&a[i]);
switch(ch){
case '+':a[i]=a[i-1]+a[i];break;
case '-':a[i]=a[i-1]-a[i];break;
case '*':a[i]=a[i-1]*a[i];break;
case '/':
if(a[i]==0){
printf("ERROR");
p=1; //标记为1 否则会还是会输出
break;
}
else{
a[i]=a[i-1]/a[i];break;
}
default:
printf("ERROR");
p=1; //标记为1 否则会还是会输出
}
i++;
}
if(ch=='='&&p==0)printf("%d",a[i-1]);
return 0;
}