目錄
while循環(huán)有兩個(gè)重要組成部分:
while 是一個(gè)預(yù)測(cè)試循環(huán)
無(wú)限循環(huán)
do-while 循環(huán)
while循環(huán)有兩個(gè)重要組成部分:
- 進(jìn)行 true 值或 false 值判斷的表達(dá)式;
- 只要表達(dá)式為 true 就重復(fù)執(zhí)行的語(yǔ)句或塊;
圖 1 顯示了 while 循環(huán)的一般格式,右側(cè)流程圖直觀地描繪了其工作原理。
圖 1 while 循環(huán)的語(yǔ)句結(jié)構(gòu)及流程圖
現(xiàn)在來(lái)看一看 while 循環(huán)的每個(gè)部分。第一行,有時(shí)稱(chēng)為循環(huán)頭,由關(guān)鍵字 while 組成,后跟待測(cè)試的條件,括在括號(hào)中。條件由任何可被判斷為 true 或 false 的表達(dá)式表示。接下來(lái)是循環(huán)體,它包含一個(gè)或多個(gè)?C++語(yǔ)句。
循環(huán)的工作原理是,首先判斷條件表達(dá)式的值,如果它是真的,則循環(huán)體中的每個(gè)語(yǔ)句都被執(zhí)行;然后,再次測(cè)試條件,如果條件表達(dá)式仍然為 true,則循環(huán)體中的每個(gè)語(yǔ)句將再次被執(zhí)行。如此循環(huán)往復(fù),直到條件表達(dá)式被判斷為 false。
請(qǐng)注意,與 if 語(yǔ)句一樣,在有條件執(zhí)行的主體中的每個(gè)語(yǔ)句都以分號(hào)結(jié)尾,但在括號(hào)中的條件表達(dá)式后面沒(méi)有分號(hào),這是因?yàn)?while 循環(huán)不完整,后面沒(méi)有跟隨的語(yǔ)句。而且,與 if 語(yǔ)句一樣,當(dāng)循環(huán)體包含兩個(gè)或多個(gè)語(yǔ)句時(shí),這些語(yǔ)句必須用大括號(hào)括起來(lái)。當(dāng)循環(huán)的主體只包含一個(gè)語(yǔ)句時(shí),可以省略括號(hào)。
基本上,while 循環(huán)就像是一個(gè)可以執(zhí)行一遍又一遍的 if 語(yǔ)句。只要括號(hào)中的表達(dá)式為 true,則有條件執(zhí)行的語(yǔ)句將不斷重復(fù)。
下面的程序使用了 while 循環(huán)打印“Hello”字符串 5 次。
#include <iostream>
using namespace std;
int main()
{
int count = 1;
while (count<= 5)
{
cout << "Hello ";
count = count + 1;
}
cout << "\nThat's all!\n";
return 0;
}
程序輸出結(jié)果:
Hello Hello Hello Hello Hello
That's all!
分析這個(gè)程序。在第 6 行中,整數(shù)變量 count 被定義并用值 1 初始化。在第 7 行中,while 循環(huán)以下面的語(yǔ)句開(kāi)頭:
while (count<= 5)
該語(yǔ)句測(cè)試變量 count 以確定其值是否小于或等于 5。因?yàn)樗_實(shí)小于 5,所以循環(huán)體(第 9 行和第 10 行)中的語(yǔ)句被執(zhí)行:
cout << "Hello?? ";
count = count + 1;
第 9 行中的語(yǔ)句將顯示字符串“Hello”。第 10 行中的語(yǔ)句則給變量 count 加上 1,使其值變成了 2。這是循環(huán)體中的最后一個(gè)語(yǔ)句,因此在執(zhí)行之后循環(huán)又一次開(kāi)始。它再次測(cè)試表達(dá)式“count<=5”,并且由于仍然為 true,循環(huán)體中的語(yǔ)句將再次執(zhí)行,該循環(huán)不斷重復(fù),直到變量 count 等于 6,使表達(dá)式“count<=5”為 false,然后退出循環(huán),如圖 2 所示。
圖 2 while 循環(huán)工作原理
循環(huán)的每一次執(zhí)行稱(chēng)為迭代。以上示例中的循環(huán)將執(zhí)行 5 次迭代,直至表達(dá)式“count<=5”被測(cè)試并且發(fā)現(xiàn)為 false,導(dǎo)致循環(huán)終止,然后程序繼續(xù)執(zhí)行該循環(huán)之后的語(yǔ)句??刂蒲h(huán)迭代次數(shù)的變量稱(chēng)為循環(huán)控制變量,在上面的例子中,count 就是循環(huán)控制變量。
while 是一個(gè)預(yù)測(cè)試循環(huán)
while 循環(huán)是一個(gè)預(yù)測(cè)試循環(huán)。這意味著它會(huì)在每次迭代之前測(cè)試其狀態(tài)。如果測(cè)試表達(dá)式為 false,則循環(huán)將永遠(yuǎn)不會(huì)迭代。如果要確保一個(gè) while 循環(huán)至少執(zhí)行一次,則必須初始化相關(guān)的數(shù)據(jù),使測(cè)試表達(dá)式一開(kāi)始即為 true。
例如,注意上面程序中變量 count 的定義:
int count = 1;
count 變量被初始化為值 1。如果數(shù)字已經(jīng)被初始化為大于 5 的值,則循環(huán)將永遠(yuǎn)不會(huì)執(zhí)行,如下面的程序段所示:
int count = 6;
while (count <= 5)
{
cout << "Hello ";
count = count + 1;
}
無(wú)限循環(huán)
除極少數(shù)情況外,循環(huán)必須包括一種終止方式。這意味著循環(huán)中的某些內(nèi)容必須最終使測(cè)試表達(dá)式為 false。在上面程序中,當(dāng)表達(dá)式“count <= 5”變?yōu)?false 時(shí),循環(huán)停止。
如果循環(huán)沒(méi)有停止的方式,則稱(chēng)為無(wú)限循環(huán)。無(wú)限循環(huán)將持續(xù)重復(fù),直到程序中斷,示例如下:
int count = 1;
while (count<= 5)
{
cout << "Hello ";
}
這是一個(gè)無(wú)限循環(huán),因?yàn)樗话?count 變量值的語(yǔ)句。每次測(cè)試表達(dá)式“count <= 5”時(shí),count 的值都是 1。
小心分號(hào)
通過(guò)在 while 循環(huán)的第一行之后意外地放置一個(gè)分號(hào)也可以創(chuàng)建無(wú)限循環(huán),示例如下:
int count = 1;
while (count <= 5) ; //該分號(hào)是一個(gè)錯(cuò)誤
{
cout << "Hello ";
count = count + 1;
}
因?yàn)榫幾g器在發(fā)現(xiàn)開(kāi)始語(yǔ)句塊的大括號(hào)之前看見(jiàn)了第一行末尾的分號(hào),所以它會(huì)在分號(hào)的位置結(jié)束循環(huán)。尤其是它會(huì)將分號(hào)前面丟失的語(yǔ)句解釋為空語(yǔ)句,也就是什么都不做的語(yǔ)句,然后將 while 語(yǔ)句和它后面的任何內(nèi)容斷開(kāi)。
對(duì)于編譯器來(lái)說(shuō),整個(gè)循環(huán)看起來(lái)就像下面這樣:
while(count<= 5);
這個(gè) while 循環(huán)將持續(xù)執(zhí)行空語(yǔ)句,當(dāng)然它永遠(yuǎn)不會(huì)執(zhí)行任何操作。該程序似乎“陷入迷惘”,因?yàn)闆](méi)有任何屏幕輸出,也不會(huì)顯示任何活動(dòng)。
不要忘記大括號(hào)
在編寫(xiě)循環(huán)語(yǔ)句時(shí),如果有條件執(zhí)行的語(yǔ)句是一個(gè)語(yǔ)句塊,則不要忘記將所有的語(yǔ)句都包含在一組大括號(hào)中。如果大括號(hào)意外被忽略,則 while 語(yǔ)句有條件執(zhí)行的僅僅是下一個(gè)語(yǔ)句,請(qǐng)看下面的代碼示例:
int count = 1;
//該循環(huán)忘記使用大括號(hào)
while (count <= 5)
cout << "Hello ";
count = count + 1;
在這段代碼中,只有一個(gè)語(yǔ)句,也就是 cout 語(yǔ)句,是在 while 循環(huán)的主體中。給變量 count 加 1 的語(yǔ)句不在循環(huán)體內(nèi),所以 count 的值保持為 1,循環(huán)測(cè)試條件永遠(yuǎn)為 true。循環(huán)將一遍又一遍地打印“Hello”字符串,直到用戶(hù)停止程序。
不要混清 == 與 =
循環(huán)的另一個(gè)常見(jiàn)陷阱是,在打算使用 == 運(yùn)算符時(shí),卻意外地使用了 = 運(yùn)算符。例如,以下示例就是一個(gè)無(wú)限循環(huán),因?yàn)樽鳛檠h(huán)條件的測(cè)試表達(dá)式每次都給 remainder 賦值為 1,而不是測(cè)試 remainder 是否等于 1:
while (remainder = 1) //錯(cuò)誤:條件表達(dá)式為賦值語(yǔ)句
{
cout << "Enter a number: ";
cin >> num;
remainder = num % 2;
}
請(qǐng)記住,任何非零值都將被判斷為 true。
do-while 循環(huán)
除了 while 循環(huán)之外,C++ 還提供了?do-while 循環(huán)。do-while 循環(huán)看起來(lái)類(lèi)似于把一個(gè) while 循環(huán)倒過(guò)來(lái)。圖 3 顯示了其格式和流程圖,右側(cè)流程圖直觀地描繪了其工作原理。
圖 3 do-while-循環(huán)的語(yǔ)句結(jié)構(gòu)及流程圖
與 while 循環(huán)一樣,如果循環(huán)體中只有一個(gè)有條件執(zhí)行的語(yǔ)句,則可以省略大括號(hào)。注意,do-while 循環(huán)必須在測(cè)試表達(dá)式的右括號(hào)后用分號(hào)終止。
除了外觀形式,do-while 循環(huán)和 while 循環(huán)之間的區(qū)別是 do-while 是一個(gè)后測(cè)試循環(huán),這意味著在循環(huán)結(jié)束時(shí),也就是在每次迭代完成后,才測(cè)試其表達(dá)式。因此,即使測(cè)試表達(dá)式在開(kāi)始時(shí)為 false,do-while 也至少要執(zhí)行一次迭代。
例如,在以下 while 循環(huán)中,cout 語(yǔ)句根本不會(huì)執(zhí)行:
int x = 1;
while (x < 0)
cout << x << endl;
但是在以下 do-while 循環(huán)中的 cout 語(yǔ)句將執(zhí)行一次,因?yàn)?do-while 循環(huán)在迭代結(jié)束之前不會(huì)判斷表達(dá)式 x<0:
int x = 1;
do
cout << x << endl;
while (x < 0);
如果要確保循環(huán)執(zhí)行至少一次,則應(yīng)使用 do-while 循環(huán)。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-787183.html
拜拜~文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-787183.html
到了這里,關(guān)于C/C++之while(do-while)詳細(xì)講解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!