C语言循环小总结

每个do while语句都可以用一个for语句来替代。并且可以让初始条件,判断语句以及循环语句放在同一个语句中,十分的方便,也可以有效的减少代码量。但是在运用for语句的时候,有时会出现一些难以预料的情况,比如死循环,又比如输出的结果并不是预期的。这时候,我们就需要看清楚在{}中的一些语句是否出现了循环的副作用。举个很简单的例子吧。

    当你把continue和break用的不是很恰当的时候,就会出现很可怕的错误,熟悉循环语句的程序猿应该很清楚break语句会提前终止循环,跳出这个循环体,而continue语句只会终止本次循环,而不会跳出循环体。再看一段代码,我就用C语言的代码来表示好了,意思是一样的。
问题是要输出一个4*5的矩阵,要求是第三列的第一个数字不输出,分别用break和continue来终止,会得到不一样的结果。

for(i=1;i<=4;i++)                    
for(i=1;i<=4;i++)                     结果如下
for(i=1;j<=5;j++)                   1   2   3   4    5
{                                   2   4   6   8    10
   if(n%5==0)printf("\n");         
if(i==3&&j==1)break;                4   8   12  16   20
printf("%d\t",i*j);
}
printf("\n");


for(i=1;j<=5;j++)                  结果如下
{                                   1    2    3    4     5
   if(n%5==0)printf("\n");          2    4    6    8     10
if(i==3&&j==1)continue;             6    9    12   15
printf("%d\t",i*j);                 4    8    12   16    20
}
printf("\n");
出现这两种不同结果的原因很简单,当执行到if(i==3&&j==1)时,循环直接终止,所以就算j=2,3,4,5也不会执行了,所以那一行的数字都没有了,而在continue代码段中,只会把两个条件同时满足的情况终止,而其他的还会依次执行下去,所以在第三行只会缺少一个数字。
   除了for语句,if else 语句也会出现很多类似的问题。if else语句嵌套的过程中,很容易将对应的ifelse搞混,从而导致程序出现难以料到的结果,这时候,一般要加上{},把每条代码分隔开来,这样才可以清楚地看到内部的结构。
这里仍旧放上一段代码,供你们参考一下
if(i<5)
             printf("hello");
            if(j<4)
               printf("world");
              else
               printf("let go");
 为了方便,我只是举了一个很简单的例子。就在这段代码里面,出现了两个if一个else,所以说,这一个else应该和前一个if匹配还是和后一个匹配呢,按理说,应该和前一个匹配,但是,基于if else的匹配原则,if应该和最近的else匹配,所以是第二个if,为了避免歧义,建议在每一段if else语句中都加上一对大括号,这样,就算嵌套的内容再多,代码也依然可以一目了然。  
合理的运用for循环和数组的结合,可以处理大量的数据并且可以提高程序的执行效率,但是在运用数组的时候,应该记得一些基本的方法,这样才可以趋利避害,让程序可以更顺利地跑起来。关于数组,又可以用指针的替换来进一步进行优化,但是相对来说,指针不适合新手,比如我,因为指针是一个复杂的东西,它可以分为好几级指针,并且可以定义为常量指针和变量指针,实在灵活多变,应该在充分熟悉数组以及元素存储原理的基础上来调用指针。

 
 
 
 

猜你喜欢

转载自blog.csdn.net/zb1593496558/article/details/78459697