1. 程式人生 > >C語言進階——循環語句07

C語言進階——循環語句07

tin 主題 sizeof -- 初始化 cas 通過 程序 erro

循環語句的基本工作方式:

  • 通過條件表達式判定是否執行循環體
  • 條件表達式遵循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一個空指針。另外 野指針 ,空指針是由區別的,對於這個概念我會再寫一個博客進行補充,畢竟和這一篇博客的主題不符,嘻嘻。

小結:

  • for循環先進行判斷後在進入循環體
  • for循環適合於循環次數固定的場合
  • while循環先進行判斷在進入循環體執行
  • while循環適用於循環次數不定的場合
  • do....while循環先執行循環體然後進行條件判斷
  • do.....while循環至少進行一次循環體

C語言進階——循環語句07