C语言进阶——循环语句07

循环语句的基本工作方式:

  • 通过条件表达式判定是否执行循环体
  • 条件表达式遵循if语句表达式的原则

do,while,for的区别:

  • do语句先执行后判断,循环体至少执行一次
  • while语句先判断后执行,循环体可能不执行
  • for语句先判断后执行,相比while更简洁

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

do
{
    //loop
}
while(condition)

while 语句的循环方式:

while(condition)
{
    //loop
}

for语句的循环方式:

for(初始化;condition;对条件值的改变)
{
     //loop  
}

程序示例1:

#include <stdio.h>

int f1(int n)
{
    int ret = 0;
    
    if( n > 0 )
    {
        do
        {
            ret += n;
            n--;
        }
        while( n > 0 );
    }
    
    return ret;
}

int f2(int n)
{
    int ret = 0;
    
    while( n > 0 )
    {
        ret += n;
        n--;
    }
    
    return ret;
}

int f3(int n)
{
    int ret = 0;
    int i = 0;
    
    for(i=1; i<=n; i++)
    {
        ret += i;
    }
    
    return ret;
}

int main()
{
    printf("%d\n", f1(100));
    printf("%d\n", f2(100));
    printf("%d\n", f3(100));
    
    return 0;
}

这段代码很简洁,可以自己稍微看一下,就当作复习

 

break 和 continue 的区别:

  • break表示终止整个循环的执行
  • continue表示终止本次循环进入下一次循环

在循环中可以使用continue 和 break两种语句,联想到switch,里面的每一种case后面都要有一个break语句,那么我们可以在里面使用continue 语句吗?答案是不可以,编译会报错。

程序示例2:

#include <stdio.h>

void f1(int n)
{
    int i = 0;
    
    for(i=1; i<=n; i++)
    {
        if( (i % 2) == 0 )
        {
            break;
        }
        
        printf("%d ", i);
    }
    
    printf("\n");
}

void f2(int n)
{
    int i = 0;
    
    for(i=1; i<=n; i++)
    {
        if( (i % 2) == 0 )
        {
            continue;
        }
        
        printf("%d ", i);
    }
    
    printf("\n");
}

int main()
{
    f1(10);
    f2(10);
    
    return 0;
}

这段代码也很简洁,可以看看权当作复习一下

程序示例3:

 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\n", p[i]);
22         }
23         
24         ret = 1;
25     }while( 0 );
26     
27     printf("free(p)\n");
28     
29     free(p);
30     
31     return ret;
32 }
33 
34 int main()
35 {
36     if( func(10) )
37     {
38         printf("OK\n");
39     }
40     else
41     {
42         printf("ERROR\n");
43     }
44 
45     return 0;
46 }

通过29行代码我向扩展一下,可以free一个空指针。另外  野指针 ,空指针是由区别的,对于这个概念我会再写一个博客进行补充,毕竟和这一篇博客的主题不符,嘻嘻。这个段代码是do...while和 break结合起来,在做项目工程中会经常使用这种结构。

 

小结:

  • for循环先进行判断后在进入循环体
  • for循环适合于循环次数固定的场合
  • while循环先进行判断在进入循环体执行
  • while循环适用于循环次数不定的场合
  • do....while循环先执行循环体然后进行条件判断
  • do.....while循环至少进行一次循环体

 

posted @ 2018-06-22 22:54  清浅...忆回  阅读(261)  评论(0编辑  收藏  举报