搜索
查看: 1090|回复: 9
打印 上一主题 下一主题

我算的是7,6,但答案是5,5,怎么分析?

[复制链接]
楼主
发表于 2013-12-8 00:36:24 | 显示全部楼层
不要管你之前学的是什么,跟着我的思路来

1. while循环一共执行几次?
2. 无论switch后的语句块怎么执行,其中一句语句有没有可能在一次选择中执行两次?(当然,不考虑goto)

第一个问题应该没有问题,是5次;
如果一句语句只能执行一次,那么v1和v2的值有没有可能大于5?

教科书和教师所教授的东西一般都是加过自己的理解的,但是有时候还不如标准中的说法好理解
switch的语义是,一个语句块中,从哪里开始执行
例如

  1. int expr = 1;
  2. switch(expr){
  3. case 1:
  4. case 2:
  5. case 3:
  6.   i += 1;
  7.   i -= 2;
  8.   i *= 3;
  9. }
复制代码
不管case标签是怎么分布的,不管标签后面有没有语句,有没有default break这些东西,标签第一次匹配后,这些标签在这次运行中就不再考虑了,语句块等价于

  1. {
  2.     i += 1;
  3.     i -= 2;
  4.     i *= 3;
  5. }
复制代码
沙发
发表于 2013-12-8 00:41:51 | 显示全部楼层
因为default之后的语句每次都执行,而且都执行一次
循环总共执行5次,所以是5, 5
板凳
发表于 2013-12-8 00:53:03 | 显示全部楼层
coco 发表于 2013-12-8 00:50
输入c:: v1=1,v2=1
输入h:v1=3,v2=2
输入i:v1=4,v2=3

一个选择支成立,是之后的语句都会运行,但是只会运行一次
所以输入h后v1只会自增一次,其他同理
地板
发表于 2013-12-8 01:20:00 | 显示全部楼层
本帖最后由 rosynirvana 于 2013-12-8 01:23 编辑
coco 发表于 2013-12-8 01:09
不是有break才停止的吗?输入h后v1自增一次后,接着执行default,再自增啊,为什么只会运行一次?

这个……
case 'h':成立后,执行所有后面的语句
case 'h'后面没有v1自增,自增在default后面
default后面的自增又不能再倒回去执行一次
5#
发表于 2013-12-8 01:42:07 | 显示全部楼层
所以循环体里总共就一句v1++,不管怎么样,一次循环中这个v1++有没有可能执行两次?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表