首页 > 试题广场 >

有以下程序 #include "stdio.h" ma

[单选题]
有以下程序
#include "stdio.h"
int main() {
    int c = 0,k;
    for(k = 1;k < 3;k++) {
        switch (k) {
            default : c += k;
            case   2: c++;
                break;
            case   4: c += 2;
                break;
        }
    }
    printf("%d\n", c);
    return 0;
}
程序运行后的输出结果是( )
  • 3
  • 5
  • 7
  • 9
推荐
选A。该题考察的是switch 语句必须遵循下面的规则:
  • 当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 break 语句为止。
#include "stdio.h"  
void main() 
 {
    int c=0,k; 
    for(k=1;k<3;k++) 
    switch(k) 
    {
        default:c+=k;   //第一次循环k=1,c=1,没有遇到break继续执行
        case 2:c++;     //c++后,c=2
        break;   //遇到break结束,switch 终止。第二次循环k=2,执行case 2后,c=3,遇到break终止。k=3结束循环
        case 4:c+=2;
        break; 
    
    printf("%d\n",c); 
 } 
编辑于 2019-06-26 14:43:26 回复(2)
default一定最后执行
(1)k = 1时先匹配,发现无匹配,故执行default后c = 1,由于default后无break,故顺序执行case2(此时已不是匹配),c = 2,之后break
(2)k = 2时匹配case2,c加一变成3,之后break;
故c = 3
这里关键是default放在前面,且后无break,故匹配不到数据执行完default后还会再顺序执行下面内容;而当default放在末尾时就不需要加break也可避免此种情况,因为下面已经无内容。
编辑于 2020-07-06 01:15:46 回复(3)

default只有所有case皮配不上的时候,才会使用它


发表于 2020-02-05 09:42:19 回复(1)
第一次由于没有匹配的case,从default向下一直执行到case 2后的break退出switch;
第二次有匹配的case,default不执行;
default放在前面的时候需要在语句中加上break,不然会向下执行
发表于 2020-06-08 20:01:18 回复(0)
int main()
{
   int c=0,k;
   for(k=1;k<3;k++)
    switch(k)
   {
       default: c+=k;cout<<c<<","<<endl;
       case 2:
           c++;
           cout<<c<<","<<endl;
       break;
       case 4:c+=2;
       break;
   }
   cout<<c<<endl;
    return 0;
}
运行这个程序发现输出是
1,
2,
3,
3

由输出来分析:在k=1时,第一次执行了default 后又执行了case 2  所以,k=1时c加了两次
k=2时k加了一次
所以选A

发表于 2019-06-25 16:59:02 回复(2)
第一次switch中的k没有对应的值,就会从default开始执行,但是由于执行完对应的语句之后没有break跳出循环,所以case 2中的语句也被执行一遍;
但是从k=2开始,程序从case 2开始执行,只进行一次c++,就break了,k就等于3了,整个程序就执行完毕了
发表于 2023-08-27 15:15:34 回复(0)
忘了没有break
发表于 2022-09-22 14:34:13 回复(0)
A:存在内存泄露的问题,错误  B: 返回临时变量的地址,开始我只是打印了返回的地址的第一个值,竟然是正确的,但是全部打印之后后面的值出现了问题,出现了随机值,所以可以理解为返回临时变量的地址是不安全的,就算侥幸获得某一个值,但是绝对是错误的(如下图)


C:不是返回临时变量的地址,会重新拷贝一份;D:同样存在返回临时变量地址的问题;

编辑于 2021-09-01 22:19:42 回复(1)
default一定最后执行
(1)k = 1时先匹配,发现无匹配,故执行default后c = 1,由于default后无break,故顺序执行case2(此时已不是匹配),c = 2,之后break
(2)k = 2时匹配case2,c加一变成3,之后break;
故c = 3
这里关键是default放在前面,且后无break,故匹配不到数据执行完default后还会再顺序执行下面内容;而当default放在末尾时就不需要加break也可避免此种情况,因为下面已经无内容。
发表于 2022-07-27 11:01:48 回复(0)
原来default后面还得加break才能终止的。。。。。
发表于 2021-04-24 11:22:23 回复(0)