黑马程序员技术交流社区

标题: 循环语句问题。 [打印本页]

作者: 475201052    时间: 2014-3-23 21:03
标题: 循环语句问题。
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在语句中的作用是什么?求解。
作者: 氯化钾    时间: 2014-3-23 21:13
一般来讲不会这么写的
default 是CASE都不存在走的才走的,break 是跳出switch 不存在就继续。我们来看 K= 1
C+=K ,C=1了,第二句话c++ c=2 了吧 碰到break了吧。出去了 进入K =2
K =2  进入case 2 c++ c=3了吧 就是这么来的  一般吧default 写到最后的
作者: 张海龙重新起航    时间: 2014-3-23 21:16
default是结束switch循环。c=2时,满足case2:c++;break;这一句。所以c=3
作者: 475201052    时间: 2014-3-23 21:24
张海龙重新起航 发表于 2014-3-23 21:16
default是结束switch循环。c=2时,满足case2:c++;break;这一句。所以c=3

太久没复习,有点忘了
作者: 张海龙重新起航    时间: 2014-3-23 21:27
475201052 发表于 2014-3-23 21:24
太久没复习,有点忘了

我也是,经常忘,前面的都忘了,多复习多写就好了:lol
作者: Hi围城    时间: 2014-3-23 21:32
本帖最后由 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。你是初学者吧,语法部分要好好琢磨的哟~
复制代码


作者: 程浩    时间: 2014-3-23 21:42
k=1时      default : c+=k;       c=1
              case2:c++;break;    c=2
k=2时     case2:c++;break;  c=3
作者: 475201052    时间: 2014-3-23 21:48
Hi围城 发表于 2014-3-23 21:32

这是我在一本二级书上看到的选择题,它的答案是3.
但是我运行了一遍也是5,看来书上的答案也不靠谱啊
作者: agelessman    时间: 2014-3-23 21:49
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 程序结束
作者: Hi围城    时间: 2014-3-23 21:53
本帖最后由 Hi围城 于 2014-3-23 22:04 编辑
475201052 发表于 2014-3-23 21:48
这是我在一本二级书上看到的选择题,它的答案是3.
但是我运行了一遍也是5,看来书上的答案也不靠谱啊 ...

嗯,帖子我重新编缉过了,你在看看~希望能帮到你~

作者: 1722413885    时间: 2014-3-24 10:37
结果为5呀!

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

QQ截图20140324103546.jpg

作者: blz01003hm    时间: 2014-4-6 13:07
你让我对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;
}
作者: 于清扬    时间: 2014-4-6 14:18
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:07
本帖最后由 程序猿-2014 于 2014-4-6 22:12 编辑

答案是错的   这个题运行的结果的确是5    你用Xcode短点测试下就知道了    每一步的值都有   程序一共运行了两次  但是C的值是持续累加的     如果加个break就是3了    因为default后边的程序根本就没有执行    但是不加break就不一样了
作者: 侯金龙    时间: 2014-4-7 11:47
for循环一共运行两次,
第一次,k=1,c=0
default : c+=k;
              case2:c++;break;
作者: 侯金龙    时间: 2014-4-7 11:54

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




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2