C程式設計 讀書筆記系列文章之第五章 迴圈控制

2022-03-05 15:39:43 字數 3778 閱讀 2312

一、幾種迴圈語句

1)goto語句

學過 basic 或 fortran 的人一定都用過 goto 語句,這個語句在 c 裡面同樣可以使用。不過,c 不提倡使用 goto 語句,因為 c 完全可以不用它,而濫用它往往會導致程式凌亂不堪、難以閱讀和維護。當然,適當地使用 goto 語句也會使程式更加簡潔。

goto 語句的作用是跳轉到一條你指定的語句,然後從那條語句開始往下執行。goto 語句的用法很簡單,首先在你想要跳往的語句前面加個標籤和冒號:

to: printf("go to here\n");

注意,標籤的命名需要符合識別符號命名規則

然後,當你想跳轉到該條語句時,使用「goto 標籤名;」即可:

goto to;

通常,能避免 goto 都應該盡量避免。但是,如果是在陷入了很深層次的迴圈裡想要跳出最外層的迴圈,用 goto 直接跳出卻比用 break 乙個迴圈乙個迴圈地跳出要好得多。例如:

while ( condition1 )}}

}out_of_loop:

// 其它語句

還有,在深層迴圈裡,如果想跳過餘下的語句,直接返回第一層迴圈,使用 goto 語句也可以大大減少**量:

while ( condition1 )}}

end_of_outmost_loop: ;

}總之,goto 可以用,但不能濫用,使用前請務必三思。其實,你可以將 break 和 continue 理解成弱化了的 goto 語句。而我們上面所舉的兩個例子可以理解成強化了的 break 和 continue。

2)while語句先判斷表示式後執行語句

while 迴圈的使用方法為:

while ( condition )

一條語句

如果 condition 為真(true),則迴圈執行「一條語句」;如果 condition 為假(false),則不執行「一條語句」,並退出迴圈。c 語言中,0 為假,非零為真。也就是說,如果 condition 的值為 0,則 condition 為假;否則,condition 為真。

while 迴圈也可以這麼用:

while ( condition )

如果 condition 為真(true),則迴圈執行大括號中的一系列語句;反之,不執行大括號中的一系列語句,並退出迴圈。

3)do-while語句先執行語句後判斷表示式

do-while結構如下:

dowhile(condition)

先執行do塊中的語句,然後判斷條件,如果符合再迴圈,不過不符合則不再執行下一次,退出迴圈。

4)for語句

for 迴圈的結構如下:

for ( 表示式1; 表示式2; 表示式3 )

一條語句/復合語句

無論 for 迴圈到底會迴圈多少次,表示式1 都只會被運算一次——只有當 for 迴圈第一次執行時才會運算表示式1。表示式2 用於控制是否繼續進行迴圈。如果表示式2 為真,則執行「一條語句/復合語句」,反之則退出迴圈。出於表達上的方便,我們把迴圈結構中的「一條語句/復合語句」稱為迴圈體。在表示式2 成立的情況下,並且在迴圈體執行完畢後,表示式3 才會被運算。表示式3 運算完畢後,再次運算表示式2,若表示式2 為真,則再執行一次迴圈體,然後再運算表示式3,接著再測試表示式2 的真假性……

一般而言,如果乙個迴圈在第一次進入迴圈體之前需要對某個(些)變數賦初值,並且在每次迴圈體結束後都要改變這個(些)變數的值,我們習慣上會使用 for 迴圈;如果乙個迴圈不需要對變數賦初值,也不需要在每次迴圈體結束後都改這個(些)變數的值,使用 while 迴圈會更自然一點。

for 迴圈中的表示式1、表示式2 和表示式3 可以是任何合法的表示式,也可以省略。你可以省略這三個表示式中的任意乙個或者兩個甚至全部省略,不過分號(;)不能省略!注意,這裡的; 不是語句結束標誌,而是分隔符。如果省略表示式2,則表明這個 for 迴圈是乙個無條件無限迴圈:

/* 無限迴圈 */

for ( i = 0; ; ++i )

上面這個 for 迴圈,i = 0 首先被運算一次,然後無條件進入迴圈體,執行完一次迴圈體後,接著運算 ++i,然後又再無條件執行迴圈體……

/* 全部省略,當然也是無限迴圈 */

for ( ; ; )

上面這個 for 迴圈,把所有三個表示式都省略了,不用說當然是無限迴圈。

/* 省略表示式1 */

for ( ; i != 10; ++i )

上面這個 for 迴圈,省略了表示式1,一開始執行時就判斷 i != 10 是否為真,如果為真,則進入迴圈體,執行完一次迴圈體後,接著運算 ++i,然後再判斷 i != 10 的真假性……如果 i != 10 為假則退出迴圈。

二、break語句和continue語句

簡單地說,break語句用於跳出迴圈,continue用於結束本次迴圈。

break語句

break語句只能用在switch 語句或迴圈語句中, 其作用是跳出switch語句或跳出本層迴圈,轉去執行後面的程式。由於break語句的轉移方向是明確的,所以不需要語句標號與之配合。break語句的一般形式為: break; 上面例題中分別在switch語句和for語句中使用了break 語句作為跳轉。使用break語句可以使迴圈語句有多個出口,在一些場合下使程式設計更加靈活、方便。

continue語句

continue語句只能用在迴圈體中,其一般格式是:

continue;

其語義是:結束本次迴圈,即不再執行迴圈體中continue 語句之後的語句,轉入下一次迴圈條件的判斷與執行。應注意的是, 本語句只結束本層本次的迴圈,並不跳出迴圈。

下面看幾個例子:

void main()

} 輸出100以內能被7整除的數。

int n;

for(n=7;n<=100;n++)

本例中,對7~100的每乙個數進行測試,如該數不能被7整除,即模運算不為0,則由continus語句轉去下一次迴圈。只有模運算為0時,才能執行後面的printf語句,輸出能被7整除的數。

#include"stdio.h"

void main()b=a;}}

檢查輸入的一行中有無相鄰兩字元相同。

char a,b;

printf("input a string:\n");

b=getchar();

while((a=getchar())!='\n')b=a;

} 本例程式中,把第乙個讀入的字元送入b。然後進入迴圈,把下一字元讀入a,比較a,b是否相等,若相等則輸出提示串並中止迴圈,若不相等則把a中的字元賦予b,輸入下一次迴圈。

輸出100以內的素數。素數是只能被1 和本身整除的數。可用窮舉法來判斷乙個數是否是素數。

void main()

} int n,i;

for(n=2;n<=100;n++)

本例程式中,第一層迴圈表示對1~100這100個數逐個判斷是否是素數,共迴圈100次,在第二層迴圈中則對數n用2~n-1逐個去除,若某次除盡則跳出該層迴圈,說明不是素數。 如果在所有的數都是未除盡的情況下結束迴圈,則為素數,此時有i>=n, 故可經此判斷後輸出素數。然後轉入下一次大迴圈。實際上,2以上的所有偶數均不是素數,因此可以使迴圈變數的步長值改為2,即每次增加2,此外只需對數n用2~n去除就可判斷該數是否素數。這樣將大大減少迴圈次數,減少程式執行時間。

#include"math.h"

void main()

C程式設計 讀書筆記系列文章之第五章 迴圈控制

一 幾種迴圈語句 1 goto語句 學過 basic 或 fortran 的人一定都用過 goto 語句,這個語句在 c 裡面同樣可以使用。不過,c 不提倡使用 goto 語句,因為 c 完全可以不用它,而濫用它往往會導致程式凌亂不堪 難以閱讀和維護。當然,適當地使用 goto 語句也會使程式更加簡...

第五章 讀書筆記

第五章 搭建s3c6410開發板的測試環境 一.s3c6410開發板簡介.s3c6410是三星公司推出的一款低功耗,高價效比的risc處理器,它基於arm11核心,可廣泛應用於移動 和通用處理器等領域。該處理器有乙個非常先進的3d加速器,能實現4m s的3d加速 二.安裝串列埠除錯工具 minico...

C 讀書筆記 第五章 語句

空語句 程式某處語法上需要一條語句而邏輯上不需要 建議使用時加注釋 while cin s s sought 空塊的作用等同於空語句 上面的 也可以用 代替 懸垂 else switch case關鍵字和它對應的值一起被稱為case標籤,case標籤必須是整形常量表示式 case 3.14 錯誤 不...