| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 843 人关注过本帖
标题:使用选择语句让程序识别有两个操作符的表达式,我感觉自己写的复杂了。大家看 ...
只看楼主 加入收藏
blueness21
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2007-7-28
收藏
 问题点数:0 回复次数:6 
使用选择语句让程序识别有两个操作符的表达式,我感觉自己写的复杂了。大家看看能不
如题,一个练习题目,使用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;
}

时间仓促,没有全面的调试这个程序,应该不会有大问题
搜索更多相关主题的帖子: 操作符 语句 感觉 表达 
2007-08-05 08:36
blueness21
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2007-7-28
收藏
得分:0 

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

2007-08-05 08:37
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
简单看了下,你似乎没有考虑优先级的问题。

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

Fight  to win  or  die...
2007-08-05 10:14
blueboy82006
Rank: 5Rank: 5
来 自:幻想世界
等 级:贵宾
威 望:16
帖 子:1227
专家分:57
注 册:2007-7-23
收藏
得分:0 
感觉只是代码的重复,可以简化

2007-08-05 11:52
blueness21
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2007-7-28
收藏
得分:0 
以下是引用aipb2007在2007-8-5 10:14:18的发言:
简单看了下,你似乎没有考虑优先级的问题。

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

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

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

望指点.

2007-08-05 21:05
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
[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]

我把主函数给你写了下,你自己看看应该有思路了吧!

Fight  to win  or  die...
2007-08-05 21:10
blueness21
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2007-7-28
收藏
得分:0 

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

2007-08-06 12:20
快速回复:使用选择语句让程序识别有两个操作符的表达式,我感觉自己写的复杂了。 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016008 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved