| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 925 人关注过本帖
标题:高手帮忙解释一下这个简单的程序.
只看楼主 加入收藏
hyb8555
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-1-7
收藏
得分:0 
我是一个新手,所以试着从新手的角度来理解程序,希望这样“笨拙”的思路对同样是新手的人有所帮助,愿大家共同进步。如果理解有误,希望高手给与指正。谢谢大家!~
#include<stdio.h>
int main()
{
    int i;
    for(i=0;i<3;i++)
    switch(i)
    {
        case 0: printf("%d",i);
        case 2: printf("%d",i);
        default:printf("%d",i);
    }
}

如果不加 break,每次switch中会从第一个满足条件的语句执行到它后面的每一条printf语句,而不去管case的条件是否满足了。所以上面程序输出的会是000122.具体解释如下:i=0时,第一个满足条件的语句是case 0: printf("%d",i); ,并且case 2: printf("%d",i);  
                                                  default:printf("%d",i);也会由于没break而顺序执行。i值为0,故输出000. 当在进入for循环时,i值自增为1,switch中第一条满足条件的是只有default:printf("%d",i);所以输出一个1。当再次进入for循环,i自增为2,第一个满足条件的语句是case 2: printf("%d",i);  
                                                  并且default:printf("%d",i);也会由于没break而顺序执行。所以这两句执行结果是输出22,最后结果为000122.

#include<stdio.h>
int main()
{
    int i;
    for(i=0;i<3;i++)
    switch(i)
    {
        case 0: printf("%d",i);break;      
        case 2: printf("%d",i);break;   
        default:printf("%d",i);
    }
}
上面的程序由于加了break,当第一次执行for循环时,i=0,进入switch中,case 0满足条件,执行printf("%d",i);输出0,再执行break;退出switch,不再执行下面两句。当for执行i=1时,case 0,case 2都不满足条件,只有执行最后一句 default:printf("%d",i); 输出1,由于执行的是switch中的最后一句,执行完自行退出switch。再次执行for循环,i自增到2,进入switch中,case 2满足条件,执行printf("%d",i);输出2,再执行break;退出switch,不再执行下面一句,退出switch,i自增到3时,退出for循环。程序至此输出结果 0 1 2 。



2010-03-30 18:17
hyb8555
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-1-7
收藏
得分:0 
回复 楼主 one_june
我是一个新手,所以试着从新手的角度来理解程序,希望这样“笨拙”的思路对同样是新手的人有所帮助,愿大家共同进步。如果理解有误,希望高手给与指正。谢谢大家!~
#include<stdio.h>
int main()
{
    int i;
    for(i=0;i<3;i++)
    switch(i)
    {
        case 0: printf("%d",i);
        case 2: printf("%d",i);
        default:printf("%d",i);
    }
}

如果不加 break,每次switch中会从第一个满足条件的语句执行到它后面的每一条printf语句,而不去管case的条件是否满足了。所以上面程序输出的会是000122.具体解释如下:i=0时,第一个满足条件的语句是case 0: printf("%d",i); ,并且case 2: printf("%d",i);  
                                                  default:printf("%d",i);也会由于没break而顺序执行。i值为0,故输出000. 当在进入for循环时,i值自增为1,switch中第一条满足条件的是只有default:printf("%d",i);所以输出一个1。当再次进入for循环,i自增为2,第一个满足条件的语句是case 2: printf("%d",i);  
                                                  并且default:printf("%d",i);也会由于没break而顺序执行。所以这两句执行结果是输出22,最后结果为000122.

#include<stdio.h>
int main()
{
    int i;
    for(i=0;i<3;i++)
    switch(i)
    {
        case 0: printf("%d",i);break;      
        case 2: printf("%d",i);break;   
        default:printf("%d",i);
    }
}
上面的程序由于加了break,当第一次执行for循环时,i=0,进入switch中,case 0满足条件,执行printf("%d",i);输出0,再执行break;退出switch,不再执行下面两句。当for执行i=1时,case 0,case 2都不满足条件,只有执行最后一句 default:printf("%d",i); 输出1,由于执行的是switch中的最后一句,执行完自行退出switch。再次执行for循环,i自增到2,进入switch中,case 2满足条件,执行printf("%d",i);输出2,再执行break;退出switch,不再执行下面一句,退出switch,i自增到3时,退出for循环。程序至此输出结果 0 1 2 。
2010-03-30 18:18
快速回复:高手帮忙解释一下这个简单的程序.
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018369 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved