1. 程式人生 > 其它 >新手入門C語言第八章:C迴圈

新手入門C語言第八章:C迴圈

一、C 迴圈

有的時候,我們可能需要多次執行同一塊程式碼。一般情況下,語句是按順序執行的:函式中的第一個語句先執行,接著是第二個語句,依此類推。
程式語言提供了更為複雜執行路徑的多種控制結構。
迴圈語句允許我們多次執行一個語句或語句組,下面是大多數程式語言中迴圈語句的流程圖:

迴圈型別

C 語言提供了以下幾種迴圈型別。

 

1.while迴圈:當給定條件為真時,重複語句或語句組。它會在執行迴圈主體之前測試條件。

C 語言中 while 迴圈的語法:

while(condition)
{
   statement(s);
}

在這裡,statement(s) 可以是一個單獨的語句,也可以是幾個語句組成的程式碼塊。

condition 可以是任意的表示式,當為任意非零值時都為 true。當條件為 true 時執行迴圈。 當條件為 false 時,退出迴圈,程式流將繼續執行緊接著迴圈的下一條語句。

在這裡,while 迴圈的關鍵點是迴圈可能一次都不會執行。當條件為 false 時,會跳過迴圈主體,直接執行緊接著 while 迴圈的下一條語句。

例項

#include <stdio.h>
 
int main ()
{
 /* 區域性變數定義 */
 int a = 10;

 /* while 迴圈執行 */
 while( a < 20 )
 {
  printf("a 的值: %d\n", a);
      a++;
 }
 
 return 0;
}

當上面的程式碼被編譯和執行時,它會產生下列結果:

a 的值: 10
a 的值: 11
a 的值: 12
a 的值: 13
a 的值: 14
a 的值: 15
a 的值: 16
a 的值: 17
a 的值: 18
a 的值: 19

 

2.for迴圈:多次執行一個語句序列,簡化管理迴圈變數的程式碼。

C 語言中 for 迴圈的語法:

for ( init; condition; increment ) 
{ 
      statement(s); 
}

下面是 for 迴圈的控制流:

  1. init 會首先被執行,且只會執行一次。這一步允許您宣告並初始化任何迴圈控制變數。您也可以不在這裡寫任何語句,只要有一個分號出現即可。
  2. 接下來,會判斷 condition。如果為真,則執行迴圈主體。如果為假,則不執行迴圈主體,且控制流會跳轉到緊接著 for 迴圈的下一條語句。
  3. 在執行完 for 迴圈主體後,控制流會跳回上面的 increment 語句。該語句允許您更新迴圈控制變數。該語句可以留空,只要在條件後有一個分號出現即可。
  4. 條件再次被判斷。如果為真,則執行迴圈,這個過程會不斷重複(迴圈主體,然後增加步值,再然後重新判斷條件)。在條件變為假時,for 迴圈終止。

例項

#include <stdio.h> 
int main () 
{ 
     /* for 迴圈執行 */
     for( int a = 10; a < 20; a = a + 1 ) 
     { 
           printf("a 的值: %d\n", a);    
     } 
     return 0; 
}

當上面的程式碼被編譯和執行時,它會產生下列結果:

a 的值: 10
a 的值: 11
a 的值: 12
a 的值: 13
a 的值: 14
a 的值: 15
a 的值: 16
a 的值: 17
a 的值: 18
a 的值: 19

 

3.do...while迴圈:除了它是在迴圈主體結尾測試條件外,其他與 while 語句類似。

不像 for 和 while 迴圈,它們是在迴圈頭部測試迴圈條件。在 C 語言中,do...while 迴圈是在迴圈的尾部檢查它的條件。
do...while 迴圈與 while 迴圈類似,但是 do...while 迴圈會確保至少執行一次迴圈。

C 語言中 do...while 迴圈的語法:

do
{
   statement(s);

}while( condition );

請注意,條件表示式出現在迴圈的尾部,所以迴圈中的 statement(s) 會在條件被測試之前至少執行一次。

如果條件為真,控制流會跳轉回上面的 do,然後重新執行迴圈中的 statement(s)。這個過程會不斷重複,直到給定條件變為假為止。

例項

#include <stdio.h>
 
int main ()
{
 /* 區域性變數定義 */
 int a = 10;

 /* do 迴圈執行,在條件被測試之前至少執行一次 */
 do
 {
 printf("a 的值: %d\n", a);
       a = a + 1;
 }while( a < 20 );
 
 return 0;
}

當上面的程式碼被編譯和執行時,它會產生下列結果:

a 的值: 10
a 的值: 11
a 的值: 12
a 的值: 13
a 的值: 14
a 的值: 15
a 的值: 16
a 的值: 17
a 的值: 18
a 的值: 19

 

4.巢狀迴圈:您可以在 while、for 或 do..while 迴圈內使用一個或多個迴圈。

C 語言允許在一個迴圈內使用另一個迴圈,下面演示幾個例項來說明這個概念。

語法

C 語言中 巢狀 for 迴圈 語句的語法:

for (initialization; condition; increment/decrement)
{
    statement(s);
    for (initialization; condition; increment/decrement)
    {
        statement(s);
        ... ... ...
    }
    ... ... ...
}

流程圖:

C 語言中 巢狀 while 迴圈 語句的語法:

while (condition1)
{
    statement(s);
    while (condition2)
    {
        statement(s);
        ... ... ...
    }
    ... ... ...
}

流程圖:

C 語言中 巢狀 do...while 迴圈 語句的語法:

do
{
    statement(s);
    do
    {
        statement(s);
        ... ... ...
    }while (condition2);
    ... ... ...
}while (condition1);

流程圖:

關於巢狀迴圈有一點值得注意,您可以在任何型別的迴圈內巢狀其他任何型別的迴圈。比如,一個 for 迴圈可以巢狀在一個 while 迴圈內,反之亦然。

例項

下面的程式使用了一個巢狀的 for 迴圈來查詢 2 到 100 中的質數:

for 巢狀例項

#include <stdio.h>
 int main () 
{ 
      /* 區域性變數定義 */ 
     int i, j;       
     for(i=2; i<100; i++) { 
          for(j=2; j <= (i/j); j++) 
             if(!(i%j)) break; // 如果找到,則不是質數 
         if(j > (i/j))  printf("%d 是質數\n", i);   
      } 
     return 0; 
}

當上面的程式碼被編譯和執行時,它會產生下列結果:

2 是質數
3 是質數
5 是質數
7 是質數
11 是質數
13 是質數
17 是質數
19 是質數
23 是質數
29 是質數
31 是質數
37 是質數
41 是質數
43 是質數
47 是質數
53 是質數
59 是質數
61 是質數
67 是質數
71 是質數
73 是質數
79 是質數
83 是質數
89 是質數
97 是質數

while 巢狀例項

#include <stdio.h>
int main()
 { 
    int i=1,j;    
    while (i <= 5)
    {
        j=1;         
        while (j <= i ) 
        { 
            printf("%d ",j);            
            j++;         
         } 
         printf("\n");        
         i++;    
     } 
     return 0; 
}

當上面的程式碼被編譯和執行時,它會產生下列結果:

1
1 2
1 2 3
1 2 3 4
1 2 3 4 5

do-while 巢狀例項

#include <stdio.h>
int main()
{ 
    int i=1,j;    
    do
    {
        j=1;         
        do
       {
           printf("*");           
           j++;        
        }while(j <= i);        
        i++;         
        printf("\n");    
      }while(i <= 5);    
      return 0; 
}

當上面的程式碼被編譯和執行時,它會產生下列結果:

*
**
***
****
*****

二、迴圈控制語句

迴圈控制語句改變你程式碼的執行順序。通過它你可以實現程式碼的跳轉。

C 提供了下列的迴圈控制語句。

1.break語句:終止迴圈或switch語句,程式流將繼續執行緊接著迴圈或 switch 的下一條語句。

C 語言中 break 語句有以下兩種用法:

  1. 當 break 語句出現在一個迴圈內時,迴圈會立即終止,且程式流將繼續執行緊接著迴圈的下一條語句。
  2. 它可用於終止 switch 語句中的一個 case。

如果您使用的是巢狀迴圈(即一個迴圈內巢狀另一個迴圈),break 語句會停止執行最內層的迴圈,然後開始執行該塊之後的下一行程式碼。

語法

C 語言中 break 語句的語法:

break;

例項

#include <stdio.h>
 
int main ()
{
 /* 區域性變數定義 */
 int a = 10;

 /* while 迴圈執行 */
 while( a < 20 )
 {
  printf("a 的值: %d\n", a);
      a++;
  if( a > 15)
  {
 /* 使用 break 語句終止迴圈 */
  break;
  }
 }
 
 return 0;
}

當上面的程式碼被編譯和執行時,它會產生下列結果:

a 的值: 10
a 的值: 11
a 的值: 12
a 的值: 13
a 的值: 14
a 的值: 15

 

2.continue語句:告訴一個迴圈體立刻停止本次迴圈迭代,重新開始下次迴圈迭代。

C 語言中的 continue 語句有點像 break 語句。但它不是強制終止,continue 會跳過當前迴圈中的程式碼,強迫開始下一次迴圈。
對於 for 迴圈,continue 語句執行後自增語句仍然會執行。對於 while 和 do...while 迴圈,continue 語句重新執行條件判斷語句。

語法

C 語言中 continue 語句的語法:

continue;

例項

#include <stdio.h>
 
int main ()
{
 /* 區域性變數定義 */
 int a = 10;

 /* do 迴圈執行 */
 do
 {
  if( a == 15)
  {
 /* 跳過迭代 */
         a = a + 1;
 continue;
  }
  printf("a 的值: %d\n", a);
      a++;
 
 }while( a < 20 );
 
 return 0;
}

當上面的程式碼被編譯和執行時,它會產生下列結果:

a 的值: 10
a 的值: 11
a 的值: 12
a 的值: 13
a 的值: 14
a 的值: 16
a 的值: 17
a 的值: 18
a 的值: 19

 

3.goto語句:將控制轉移到被標記的語句。但是不建議在程式中使用 goto 語句。C 語言中的 goto 語句允許把控制無條件轉移到同一函式內的被標記的語句。
注意:在任何程式語言中,都不建議使用 goto 語句。因為它使得程式的控制流難以跟蹤,使程式難以理解和難以修改。任何使用 goto 語句的程式可以改寫成不需要使用 goto 語句的寫法。

語法

C 語言中 goto 語句的語法:

goto label;
..
.
label: statement;

在這裡,label 可以是任何除 C 關鍵字以外的純文字,它可以設定在 C 程式中 goto 語句的前面或者後面。

 

例項

#include <stdio.h>
 
int main ()
{
 /* 區域性變數定義 */
 int a = 10;

 /* do 迴圈執行 */
   LOOP:do
 {
  if( a == 15)
  {
 /* 跳過迭代 */
         a = a + 1;
 goto LOOP;
  }
  printf("a 的值: %d\n", a);
      a++;
 
 }while( a < 20 );
 
 return 0;
}

當上面的程式碼被編譯和執行時,它會產生下列結果:

a 的值: 10
a 的值: 11
a 的值: 12
a 的值: 13
a 的值: 14
a 的值: 16
a 的值: 17
a 的值: 18
a 的值: 19

三、無限迴圈

如果條件永遠不為假,則迴圈將變成無限迴圈。for 迴圈在傳統意義上可用於實現無限迴圈。由於構成迴圈的三個表示式中任何一個都不是必需的,您可以將某些條件表示式留空來構成一個無限迴圈。

例項

#include <stdio.h> 
int main ()
{
   for( ; ; ) 
   { 
      printf("該迴圈會永遠執行下去!\n");    
   } 
return 0; 
}

當條件表示式不存在時,它被假設為真。您也可以設定一個初始值和增量表達式,但是一般情況下,C 程式設計師偏向於使用 for(;;) 結構來表示一個無限迴圈。

注意:您可以按 Ctrl + C 鍵終止一個無限迴圈。

圖片水印是我知乎賬號,大家也可以去看看

討論C++的大家可以加群693186131

搜尋

複製