06.04 零基礎小白快速入門必學—幾種循環結構

循環語句是用於重複執行某條語句(循環體)的語句,它包含一個控制表達式,每循環執行一次都要對控制表達式進行判斷,如果表達式為真,則繼續執行循環。C語言提供了3中循環語句,分別為while語句,do while語句和for語句。

while語句

while語句是控制表達式在循環體之前的循環語句,它的格式如下:

零基礎小白快速入門必學—幾種循環結構

這裡的圓括號是強制要求的,圓括號之內的表達式為控制表達式,圓括號之外的語句為循環體。

while語句的執行步驟,首先計算控制表達式的值,如果表達式的值不為0(為真),則執行循環體,接著再次判斷控制表達式,如果其值不為0,再次執行循環體。執行這個步驟直到控制表達式的值為0時停止。

零基礎小白快速入門必學—幾種循環結構

結果會輸出錯誤如下:

零基礎小白快速入門必學—幾種循環結構

如果while的控制表達式一直不為0,那麼循環將一直進行下去,稱為無限循環。這樣的循環在循環體中都包含break,goto,return或者導致程序終止的函數(如exit等),以在適當的時機終止程序。

零基礎小白快速入門必學—幾種循環結構

零基礎小白快速入門必學—幾種循環結構

do while語句

do while語句與while語句非常相似,只不過do while語句在每次執行完循環體之後對控制表達式進行判斷的,因此do while語句的循環體至少會執行一次,而while語句的循環體可能一次都不被執行。do while語句的格式如下:

零基礎小白快速入門必學—幾種循環結構

do while循環的執行步驟如下:首先執行循環體,再計算控制表達式的值,如果表達式的值非零再繼續執行循環體,然後再次判斷表達式的值。這個過程持續進行,知道控制表達式的值為0,終止do while語句執行。

建議對do while的循環體都使用大括號包裹起來,因為大括號會使do while語句被誤認為是while語句。

零基礎小白快速入門必學—幾種循環結構

結果會輸出:

零基礎小白快速入門必學—幾種循環結構

零基礎小白快速入門必學—幾種循環結構

for語句

for語句的格式如下:

零基礎小白快速入門必學—幾種循環結構

for語句的執行步驟是:首先執行表達式1進行初始化,然後判斷表達式2的值是否為真,若為真,則執行循環體,然後執行表達式3.隨後再次對錶達式2的值進行判斷,若為真,則再次執行循環體和表達式3,依次循環直到表達式2的值為0為止。

for語句的3個表達式都可以省略,若省略表達式1,則在執行循環前沒有初始化的操作;若省略第三個表達式,則執行完循環體後,沒有再需要執行的語句,循環體確保循環能夠在有限時間內終止;若省略第二個表達式,則每次判斷都默認為真,除非在循環體內使用break,goto和程序終止函數外,循環不會停止。

零基礎小白快速入門必學—幾種循環結構

結果輸出如下:

零基礎小白快速入門必學—幾種循環結構

現在我們來看一道例題:

電梯在城市的高層建築中廣泛應用。輸入電梯停靠樓層的列表,以0結束輸入,計算電梯到達最後樓層需要花費的時間。列表中的數字表示電梯將在哪一層停靠,電梯按照列表順序依次停靠。假設電梯每上行一層需要花6秒時間,每下行一層需要花費4秒時間,電梯每停一次需要5秒。

方法一:

#include<stdio.h> /<stdio.h>

int main(void)

{

int i,number,n=0,tm;

int *p,ft[100];

printf("Please input floors(Ends with 0):\\n");

scanf("%d",&number);

//輸入樓層列表,以0結束。

while(number != 0)

{

ft[n]=number;

n++;

scanf("%d",&number);//循環輸入

}

tm=0;

p=ft;

for(i=0;i

{

if(*p

tm=tm+(*(p+1)-*p)*6+5;

else

tm=tm+(*p-*(p+1))*4+5;

p++;

}

printf("The time is%d\\n",tm);

return 0;

}

此種方法在開始先給循環輸入的變量一個初值,用來滿足下面開始的循環輸入。

零基礎小白快速入門必學—幾種循環結構

方法二:

#include<stdio.h> /<stdio.h>

int main(void)

{

int i,number,n=0,tm;

int *p,ft[100];

printf("Please input floors(Ends with 0):\\n");

while(1)//使用死循環輸入

{

scanf("%d",&number);

if(number==0)

break;

ft[n]=number;

n++;

}

tm=0;

p=ft;

for(i=0;i

{

if(*p

tm=tm+(*(p+1)-*p)*6+5;

else

tm=tm+(*p-*(p+1))*4+5;

p++;

}

printf("The time is%d\\n",tm);

return 0;

}

此種方法先是進入死循環,開始輸入,當輸入滿足題目所需條件時,可以退出循環。但是必須要在每次讀入下一個值之前先判斷是否滿足退出條件,否則會多讀入一個值。

零基礎小白快速入門必學—幾種循環結構

這是正確的結果,當判斷語句放到最後時,結果便會出錯,下面是出錯代碼和結果。

零基礎小白快速入門必學—幾種循環結構

零基礎小白快速入門必學—幾種循環結構

這個結果是把0當作一層樓給讀入了,然後把2層到0層的時間計入,導致錯誤。

零基礎小白快速入門必學—幾種循環結構

循環體中的跳轉語句

在循環體中可以使用break,continue和goto跳轉語句。

break語句。

break語句在循環體的中間設置退出點,用以跳出while,do while和for循環,直接執行循環語句後面的語句。除此之外,break語句還用於switch語句,用以跳出switch語句而直接執行switch語句後面的語句。對於嵌套的循環語句和(或)switch語句,break只能跳過其所在的那層循環或switch語句。

continue語句。

continue語句並不跳出循環,而是將程序執行正好轉移到循環體末尾處,跳過本次循環中循環體餘下的內容。continue語句只能用於循環體中。

零基礎小白快速入門必學—幾種循環結構

結果輸出:

零基礎小白快速入門必學—幾種循環結構

goto語句。

goto語句不僅可以用在循環體中,還可以用在程序的任何位置。與continue和break不同,它可以跳轉到同一個函數中任何有標記的語句處。goto依賴於定義在語句開頭的標識符,其形式為:標識符 : 語句。goto語句的形式為:goto 標識符;

goto易於造成程序混亂,代碼難以閱讀,並且其他跳轉語句、return和exit語句能夠滿足大多數需要goto語句的情況。除非萬不得已,儘量不要使用。

零基礎小白快速入門必學—幾種循環結構

結果輸出:

零基礎小白快速入門必學—幾種循環結構

結束語

每天進步一點點,每天消化一點點。如果你有更高的想法,歡迎一起交流。如果覺得文章寫得還不錯,點個讚唄。


分享到:


相關文章: