首页 > 试题广场 >

若有以下程序,则程序的输出结果是?

[单选题]
(1)若有以下程序
#include <stdio.h>
int main() {
    int s = 0, n;
    for (n = 0; n < 4; n++) {
        switch (n) {
        default:
            s += 4;
        case 1:
            s += 1;
        case 2:
            s += 2;
        case 3:
            s += 3;
        }
    }
    printf("%d\n", s);
    return 0;
}





则程序的输出结果是?

  • 6
  • 18
  • 10
  • 24
推荐
第一次循环for循环,n的值为0,所以从default后面的语句开始执行,s+=4,s+=1,s+=2,s+=3,s的值为10。在进入第二次for循环,n的值为1,所以执行的s+=1,s+=2,s+=3,s的值为16。在进入第三次for循环,n的值为2,所以执行s+=2,s+=3,s的值为21。在进入第四次for循环,n的值为3,所以执行s+=3,s的值为24。
编辑于 2015-02-03 20:41:58 回复(0)

在switch-case语句中,多个case可以共用一条执行语句,如: 
case 常量表达式1: 
case 常量表达式2: 
case 常量表达式3: 
语句; 
break; 
由此可以看出case语句的作用:
case后面的常量表达式实际上只起语句标号作用,而不起条件判断作用,即“只是开始执行处的入口标号”。

因此,一旦与switch后面圆括号中表达式的值匹配,就从此标号处开始执行;
而且执行完一个case后面的语句后,若没遇到break语句,就自动进入下一个case继续执行,而不再判断是否与之匹配,直到遇到break语句才停止执行,退出switch语句。

因此,若想执行一个case分之后立即跳出switch语句,就必须在此分支的最后添加一个break语句。

发表于 2015-08-29 15:13:35 回复(1)
D.
第1次:s=0+4+1+2+3=10;
第2次:s=10+1+2+3=16;
第3次:s=16+2+3=21;
第4次:s=21+3=24.
发表于 2015-01-28 10:42:47 回复(0)
见到case要想到有没有写break
发表于 2017-03-26 23:04:28 回复(1)
在没有break语句时,default放在case之前和default放在case之后会得到不同的结果,default放在case之前,case匹配,则default不执行;default放在case之后,case匹配了,default依然执行
发表于 2016-11-24 13:32:13 回复(1)
switch...case 语句中,在执行完分支中的最后一条语句;若无break; 则顺序执行下面的case语句。
发表于 2017-08-04 16:11:00 回复(0)
先执行case,当所有的case都判断完不符合条件的时候,才会执行default,无论你的default放在哪,第一行,最后,或者中间位置。
而default之后没有break,所以case循环一直执行下去
发表于 2016-02-23 11:19:12 回复(1)
看题啊,缺少break
发表于 2019-04-23 15:10:44 回复(0)
缺少break
发表于 2016-07-28 17:38:04 回复(1)
没有break亲
发表于 2015-07-16 17:39:11 回复(0)
1. default是默认分支,当其它的case分支没有命中时,default分支会被执行,当其它的case分支至少有一个被命中时则不会执行default分支。
2. switch语句结束有两个可能:遇到break,或者执行到switch语句的尾部。
3. default分支的位置会影响程序的运行结果,比如这道题,如果把default分支放到最后,运行结果将不同。
发表于 2022-03-20 16:32:06 回复(0)
case后面的常量表达式实际上只起语句标号作用,而不起条件判断作用,即“只是开始执行处的入口标号”。因为case后没有break;所以不跳出,继续执行。
发表于 2017-08-03 13:59:58 回复(0)
注意这里没有break;如果每个分支语句都有break的话那么就是10
发表于 2022-10-21 16:23:07 回复(0)
没有,break...
发表于 2022-08-13 15:12:40 回复(0)
no break,不按常理出牌
发表于 2022-08-12 14:50:52 回复(0)
没有break
发表于 2022-02-10 19:23:15 回复(0)
我好恨!没有break!
发表于 2021-01-29 21:30:12 回复(0)
要看清有没有break
发表于 2020-04-24 22:57:26 回复(0)

没有break

发表于 2019-12-30 10:55:39 回复(0)
注意 没有break
发表于 2019-10-07 13:04:43 回复(0)
注意每个case后面都没有break
发表于 2019-07-01 01:58:07 回复(0)