第7课 循环语句

Posted wanmeishenghuo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第7课 循环语句相关的知识,希望对你有一定的参考价值。

循环语句分析:

技术分享图片

 

do...while语句的循环方式:

技术分享图片

 

while语句的循环方式:

技术分享图片

 

for语句的循环方式:

技术分享图片

 

三种循环语句的使用对比:

do...while

技术分享图片

 

当我们给f1的参数是-100时,结果如下:

技术分享图片

 

这不是我们想要的结果,我们希望实参小于0时,f1函数什么都不做,但是这个do...循环却至少执行了一次do中的语句。对程序进行改进。

在坚持要使用do...while循环的前提下我们只能加一个if判断语句,如下:

技术分享图片

 

在做这样的累加操作的时候,do...while并不适合。我们修改成while循环的方式:

技术分享图片

 

while适合求累加和的操作。

下面添加for循环求累加和的程序:

技术分享图片

 

for循环求累加和更加一目了然。for循环是最适合最累加的。

 break和continue的区别:

技术分享图片

 

break可以用到switch语句里面,也可以用到循环语句里面,那么continue是否可以用到switch语句中呢?

continue是为循环语句设计的,与分支语句没有任何关系。

示例程序如下:

 1 #include <stdio.h>
 2 
 3 void f1(int n)
 4 {
 5     int i = 0;
 6     
 7     for(i=1; i<=n; i++)
 8     {
 9         if( (i % 2) == 0 )
10         {
11             break;
12         }
13         
14         printf("%d ", i);
15     }
16     
17     printf("
");
18 }
19 
20 void f2(int n)
21 {
22     int i = 0;
23     
24     for(i=1; i<=n; i++)
25     {
26         if( (i % 2) == 0 )
27         {
28             continue;
29         }
30         
31         printf("%d ", i);
32     }
33     
34     printf("
");
35 }
36 
37 int main()
38 {
39     f1(10);
40     f2(10);
41     
42     return 0;
43 }

第11行的break如果执行到,会直接跳出第7行的for循环。

第28行的continue如果执行到,会跳到下一次for循环,不会跳出for循环,只会跳过31行的打印。

执行结果如下:

技术分享图片

 

do和break的妙用:

示例程序如下:

 1 #include <stdio.h>
 2 #include <malloc.h>
 3 
 4 int func(int n)
 5 {
 6     int i = 0;
 7     int ret = 0;
 8     int* p = (int*)malloc(sizeof(int) * n);
 9     
10     do
11     {
12         if( NULL == p ) break;
13         
14         if( n < 5 ) break;
15 
16         if( n > 100) break;
17         
18         for(i=0; i<n; i++)
19         {
20             p[i] = i;
21             printf("%d
", p[i]);
22         }
23         
24         ret = 1;
25     }while( 0 );
26     
27     printf("free(p)
");
28     
29     free(p);
30     
31     return ret;
32 }
33 
34 int main()
35 {
36     if( func(10) )
37     {
38         printf("OK
");
39     }
40     else
41     {
42         printf("ERROR
");
43     }
44 
45     return 0;
46 }

我们让do...while循环只执行一次,free一个NULL指针也是没有问题的。这个do...while循环用break暴力跳出的方式,意义在于强制我们在返回之前一定要释放p所指向的内存。

执行结果如下:

技术分享图片

 

改成下面这种,在条件不成立立即返回的情况:

 

技术分享图片

 

当我们在main函数中给func传入的数是1000的时候,结果如下:

技术分享图片

 

可以看到这种情况下没有释放指针。

 如果在每个不成立的条件后先释放一次指针再返回会使得程序很臃肿。

小结:

  for循环先进行判断再进入循环体

  for循环适合于循环次数固定的场合

  while循环先进行判断再进入循环体执行

  while循环适合于循环次数不定的场合

  do...while循环先执行循环体再进行判断

  do...while循环至少执行一次循环体

 

以上是关于第7课 循环语句的主要内容,如果未能解决你的问题,请参考以下文章

第16课:语句结构

《快乐编程大本营》java语言训练班-第4课:java流程控制

《快乐编程大本营》java语言训练班-第4课:java流程控制

第4节用for语句实现循环学习导案

第4节用for语句实现循环学习导案

第4节用for语句实现循环学习导案