#include <iostream>
using namespace std;
int main()
{
int a=0,b=1,c=2;
switch(a)
{
case 0:cout<<b+c<<endl;
case 1:
{
a=a+b*c;
switch(a)
{
case 2:cout<<b+c<<endl;
case 5:cout<<(a=a+b*c)<<endl;
default:
c=c*2;
break;
}
}
default:cout<<a+b+c<<endl;
break;
}
return 0;
}
这道题目,为什么编译出来结果是 3,3, 4 , 9 呢,能给详细说下嘛??? 我算不出来啊.
郁闷死了
#include <iostream>
using namespace std;
int main()
{int a=0,b=1,c=2; //初始化 a=0
switch(a) //由于你a=0,所以执行,case 0 后面的 cout<<b+c<<endl; 语句
{case 0:cout<<b+c<<endl; //输出3
case 1:{a=a+b*c; //然后执行 case 1 后面的语句,由a=a+b*c; 此时a=2
switch(a) //由于a=2,所以先执行 case 2 后面的语句
{case 2:cout<<b+c<<endl; //输出3
case 5:cout<<(a=a+b*c)<<endl; //接着执行 case 5 后面的语句 输出4
default:c=c*2; //接着执行 default 后面的 语句 c=4
break;}} //跳出循环
default:cout<<a+b+c<<endl; //输出 9
break;}
return 0;
}
你好,我觉得有几个问题,
首先,是选择语句 switch() 中case 的执行顺序问题,
其次,变量发生变化的及时跟进问题,就是要知道 大多数重要变量在某时刻的值(如果有改变的话);
明白这个,基本上就可以理解了!
其中,举一段关键代码,来说说比较形象:
int a=1;
swithc(a)
{ case1:cout<<"1"<<‘\t’;
case 2:cout<<"2"<<'\t';
case 3: cout<<"3"<<'\t'l;
default: cout<<"4"<<'\t';
}
在 main() 中,运行之后,输出的是 :1 2 3 4;,往往不是我们要选择语句达到的作用,因为,在找到a 值对应的case 滞后,并没有个语句来执行跳出 switch() 语句,所以,是顺序执行的,执行 case 1,之后 case2, 。。。 。。。 这样下去的.要达到选择作用的话,还是要在每一个case 选择项之后,加break
现在来分析你一下你的代码:
#include <iostream>
using namespace std;
int main()
{
int a=0,b=1,c=2; // 声明定义整形变量 a=0,b=1.c=2;
switch(a) // 由于 a=0,执行 case 0: 之后语句
{
case 0:cout<<b+c<<endl;
// 执行上一行语句,输出3 (b=1,c=2)同时,没有break 跳出switdh(),顺序执行case2
case 1:
{
a=a+b*c; // a 值变化,a=0+1*2=2
switch(a) //由于 a=2,执行 case 2:之后语句
{
case 2:cout<<b+c<<endl; // 输出 3(b=1,c=2),没有 break 跳出 选择语句switch(),顺序执行 case 5;
case 5:cout<<(a=a+b*c)<<endl;
//输出 4(最终输出a 值,a=2+1*2),a=4 ,没有 break 跳出,顺序执行default
default:
c=c*2; // 注意 ,此时,c=2*2=4
break; // 最终才跳出,这一句没有多大意义!
} // 顺序执行完,外层 switch() 的 case 1; 没有 break; 顺序执行 sdafault :之后语句
}
default:cout<<a+b+c<<endl; // 输出 9,此时,a=4,b=1,c=4;
break;
}
return 0;
}
首先你要明白,分支选择里,执行某个case时,要是这个case后面没有break,则会继续按顺序执行下去
switch(a) //a=0,执行case0
{
case 0:cout<<b+c<<endl; //输出b+c=1+2=3,由于没有break,继续执行case1
case 1:
{
a=a+b*c; //a=0+1*2=2
switch(a) //a=2,执行case2
{
case 2:cout<<b+c<<endl; //b+c=3,没有break,继续执行case5
case 5:cout<<(a=a+b*c)<<endl; //a=2+1*2=4,输出4,没有break,继续执行下去
default:
c=c*2; // c=4
break;
}
}
default:cout<<a+b+c<<endl; //a+b+c=4+1+4=9
break;
}
你的程序很垃圾,但是我还是帮你挑出来了
case 1:
{
a=a+b*c;
这句里 你已经让a=a+b*c;说明这里a=0+1*2就已经是2了,而你有在case 5: cout<<(a=a+b*c)<<endl;相当于把a+b*c重新赋值给了a,而这个时候的a=2+2*1了不就是4了。。这样是直接输出啊的值了!明白?,而且不能这么输出!应该cout<<(a+b*c)<<endl;这样才是正确的。这样就没有改变a的值。。如果还不明白可以追问。
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息