永发信息网

C++程序求解答案

答案:5  悬赏:20  手机版
解决时间 2021-04-10 23:47
  • 提问者网友:嗝是迷路的屁
  • 2021-04-10 08:22

#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 呢,能给详细说下嘛??? 我算不出来啊.

郁闷死了

最佳答案
  • 五星知识达人网友:街头电车
  • 2021-04-10 09:35
因为没有break的话,不会跳出分支,继续下面的分支

switch(a)//这时a没变化,a=0
case 0:cout<<b+c<<endl;//输出3
case 1:
{
a=a+b*c;//这时a=0+1*2=2
switch(a) //这时a=2
{
case 2:cout<<b+c<<endl; //输出3
case 5:cout<<(a=a+b*c)<<endl;//这时a=2+1*2=4 同时输出4
default:
c=c*2;//这个也会执行,c=2*2=4
break;
}
}
default:cout<<a+b+c<<endl;//a+b+c=4+1+4=9,所以这里输出9
break;
}
全部回答
  • 1楼网友:梦中风几里
  • 2021-04-10 13:13

#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;

}

  • 2楼网友:妄饮晩冬酒
  • 2021-04-10 11:51

你好,我觉得有几个问题,

首先,是选择语句 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; }

  • 3楼网友:轻雾山林
  • 2021-04-10 11:40

首先你要明白,分支选择里,执行某个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; }

  • 4楼网友:夜余生
  • 2021-04-10 10:21

你的程序很垃圾,但是我还是帮你挑出来了

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的值。。如果还不明白可以追问。

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯