注册 登录
编程论坛 C++教室

使用选择语句让程序识别有两个操作符的表达式,我感觉自己写的复杂了。大家看看能不

blueness21 发布于 2007-08-05 08:36, 847 次点击
如题,一个练习题目,使用if...else和switch语句实现程序识别两个操作符的表达示.可不可以有比较简单的思路?
但是限制在只使用if..else和switch的情况下。
#include <iostream.h>
int main()
{
float a,b,c;
char oper1,oper2;
cout<<"请输入一个表达式:"<<endl;
cin>>a>>oper1>>b>>oper2>>c;
switch(oper1)
{
case '+':
{
switch(oper2)
{
case '+':
cout<<a<<oper1<<b<<oper2<<c<<'='<<a+b+c<<endl;
break;
case '-':
cout<<a<<oper1<<b<<oper2<<c<<'='<<a+b-c<<endl;
break;
case '*':
cout<<a<<oper1<<b<<oper2<<c<<'='<<a+b*c<<endl;
break;
case '/':
{
if(c!=0) cout<<a<<oper1<<b<<oper2<<c<<'='<<a+b/c<<endl;
else cout<<"Error!"<<endl;
break;
}
default:
cout<<"Error!"<<endl;
}
break;
}
case '-':
{
switch(oper2)
{
case '+':
cout<<a<<oper1<<b<<oper2<<c<<'='<<a-b+c<<endl;
break;
case '-':
cout<<a<<oper1<<b<<oper2<<c<<'='<<a-b-c<<endl;
break;
case '*':
cout<<a<<oper1<<b<<oper2<<c<<'='<<a-b*c<<endl;
break;
case '/':
{
if(c!=0) cout<<a<<oper1<<b<<oper2<<c<<'='<<a-b/c<<endl;
else cout<<"Error!"<<endl;
break;
}
default:
cout<<"Error!"<<endl;
}
break;
}
case '*':
{
switch(oper2)
{
case '+':
cout<<a<<oper1<<b<<oper2<<c<<'='<<a*b+c<<endl;
break;
case '-':
cout<<a<<oper1<<b<<oper2<<c<<'='<<a*b-c<<endl;
break;
case '*':
cout<<a<<oper1<<b<<oper2<<c<<'='<<a*b*c<<endl;
break;
case '/':
{
if(c!=0) cout<<a<<oper1<<b<<oper2<<c<<'='<<a*b/c<<endl;
else cout<<"Error!"<<endl;
break;
}
default:
cout<<"Error!"<<endl;
}
break;
}
case '/':
{

if(b!=0)
{
{
switch(oper2)
{
case '+':
cout<<a<<oper1<<b<<oper2<<c<<'='<<a/b+c<<endl;
break;
case '-':
cout<<a<<oper1<<b<<oper2<<c<<'='<<a/b-c<<endl;
break;
case '*':
cout<<a<<oper1<<b<<oper2<<c<<'='<<a/b*c<<endl;
case '/':
{
if(c!=0)
cout<<a<<oper1<<b<<oper2<<c<<'='<<a/b/c<<endl;
else
cout<<"Error!"<<endl;
break;
}
default:
cout<<"Error!"<<endl;
}
}
}

}

default:
cout<<"Error!"<<endl;
}
return 0;
}

时间仓促,没有全面的调试这个程序,应该不会有大问题
6 回复
#2
blueness212007-08-05 08:37

发表了以后再看更觉得恐怖,感觉很简单的一题被我给搞成这样.....

#3
aipb20072007-08-05 10:14
简单看了下,你似乎没有考虑优先级的问题。

还有,你完全可以只有一次switch对四则运算处理。
可以做成函数的形式,就避免了,你的switch嵌套。
#4
blueboy820062007-08-05 11:52
感觉只是代码的重复,可以简化
#5
blueness212007-08-05 21:05
以下是引用aipb2007在2007-8-5 10:14:18的发言:
简单看了下,你似乎没有考虑优先级的问题。

还有,你完全可以只有一次switch对四则运算处理。
可以做成函数的形式,就避免了,你的switch嵌套。

当时那个题目上也说要注意优先级的问题,但我不能理解,是算式的优先级还是算法的优先级?

另外就是我也想只用一次switch对四则运算处理,但是不知道具体该怎么做.

望指点.

#6
aipb20072007-08-05 21:10
[CODE]int main(){
double d1,d2,d3,res1,res2;
char c1,c2;
cin >> d1 >> c1 >> d2 >> c2 >> d3;
if ((c1 == '+' || c1 == '-') && (c2 == '*' || c2 == '/')){
res1 = compute(d2,d3,c2);
res2 = compute(d1,res1,c1);
}
else{
res1 = compute(d1,d2,c1);
res2 = compute(res1,d3,c2);
}
cout << d1 << c1 << d2 << c2 << d3 << " = " << res2 << endl;
return 0;
}[/CODE]

我把主函数给你写了下,你自己看看应该有思路了吧!
#7
blueness212007-08-06 12:20

恩,拷回去看,谢谢!~~

1