A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 475201052 中级黑马   /  2014-3-23 21:03  /  1925 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

main()
{
int c = 0 , k;
for(k = 1 ; k <3 ; k++)
      switch(k)
      {
              default : c+=k;
              case2:c++;break;
              case4:c+=2;break;   
     }
        printf("%d\n",c);
}
运行结果为什么是3啊,default在语句中的作用是什么?求解。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

15 个回复

倒序浏览
一般来讲不会这么写的
default 是CASE都不存在走的才走的,break 是跳出switch 不存在就继续。我们来看 K= 1
C+=K ,C=1了,第二句话c++ c=2 了吧 碰到break了吧。出去了 进入K =2
K =2  进入case 2 c++ c=3了吧 就是这么来的  一般吧default 写到最后的

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
default是结束switch循环。c=2时,满足case2:c++;break;这一句。所以c=3

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
张海龙重新起航 发表于 2014-3-23 21:16
default是结束switch循环。c=2时,满足case2:c++;break;这一句。所以c=3

太久没复习,有点忘了
回复 使用道具 举报
475201052 发表于 2014-3-23 21:24
太久没复习,有点忘了

我也是,经常忘,前面的都忘了,多复习多写就好了:lol
回复 使用道具 举报
本帖最后由 Hi围城 于 2014-3-23 21:51 编辑

  1. #include <stdio.h>//printf关键字需要的头文件
  2. //main() main函数,程序的入口。此处应输入返回值类型对应下面编写return语句
  3. int main()
  4. {
  5.     int c = 0 , k;
  6.     for(k = 1 ; k <3 ; k++)
  7.         switch(k)
  8.     {
  9.         default : c+=k;//case里没有对应的k值时会执行default语句,第一次循环该语句被执行。c = 0+1 = 1。
  10.         case2:c++;break;//switch语句被执行直到这行的break。c = 1+1 = 2
  11.         case4:c+=2;break;
  12.             
  13.     }
  14.     printf("%d\n",c);// for循环在此结束,共进形了两次,第一次c值为2,第二次因k值加了一个1,所以最后c值为5.
  15.     return 0;
  16. }
  17. //综上所述,c输出的是5。你是初学者吧,语法部分要好好琢磨的哟~
复制代码

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
程浩 中级黑马 2014-3-23 21:42:32
7#
k=1时      default : c+=k;       c=1
              case2:c++;break;    c=2
k=2时     case2:c++;break;  c=3
回复 使用道具 举报

这是我在一本二级书上看到的选择题,它的答案是3.
但是我运行了一遍也是5,看来书上的答案也不靠谱啊
回复 使用道具 举报
1.如果没有任何case匹配的时候,才会执行default语句,而且如果default语句里面不含break,将顺序执行下去。
2.如果有case语句匹配时,运行结果是和default放在switch的最后是一样的。
第一次循环  k==1 case对不上 ,执行default c=c+k=0+1=1,程序继续执行下去 c++ 后c是2,break后  k=2
跟case对上了,执行c++ c就是2+1=3了  break 程序结束

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 Hi围城 于 2014-3-23 22:04 编辑
475201052 发表于 2014-3-23 21:48
这是我在一本二级书上看到的选择题,它的答案是3.
但是我运行了一遍也是5,看来书上的答案也不靠谱啊 ...

嗯,帖子我重新编缉过了,你在看看~希望能帮到你~
回复 使用道具 举报
结果为5呀!

QQ截图20140324103546.jpg (57.43 KB, 下载次数: 33)

QQ截图20140324103546.jpg
回复 使用道具 举报
你让我对default位置有了新的认识
结果是5
这样放是3
#include<stdio.h>
int main(void)
{
int c = 0 , k=0;
for(k = 1 ; k <3 ; k++)
      switch(k)
      {

              case2:c++;break;
              case4:c+=2;break;
default : c+=k;
     }
        printf("%d\n",c);
        return 0;
}
回复 使用道具 举报
default的作用:在没有case匹配时,执行default
break在switch的作用:结束switch
你这个代码default后面没有接break;
所以在k=1时,先执行default里的语句c=1,之后继续执行case2语句c=2,然后break,结束switch
然后执行k=2,匹配到case2,执行完后c=3
回复 使用道具 举报
本帖最后由 程序猿-2014 于 2014-4-6 22:12 编辑

答案是错的   这个题运行的结果的确是5    你用Xcode短点测试下就知道了    每一步的值都有   程序一共运行了两次  但是C的值是持续累加的     如果加个break就是3了    因为default后边的程序根本就没有执行    但是不加break就不一样了
回复 使用道具 举报
for循环一共运行两次,
第一次,k=1,c=0
default : c+=k;
              case2:c++;break;
回复 使用道具 举报

for循环一共运行两次,
第一次,k=1,c=0
运行到  default : c+=k;     //c=c+k=0+1=1  没有 break继续运行
运行到   case2:c++;break;   //c=1+1=2
第二次,k=2,c=2
运行到  default : c+=k;     //c=c+k=2+2=4  没有 break继续运行
运行到   case2:c++;break;   //c=4+1=5
所以结果是5
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马