a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C++ > 正文

C++的do...while語句詳解

2020-05-23 14:28:05
字體:
來源:轉載
供稿:網友
我們已經學習了for語句的循環,并且知道for語句習慣上是用在已知循環次數的情況下的。但是,人不具有先知的能力,有些時候我們無法預知一個循環要進行幾次,那我們該怎么辦呢?

一個循環,最不可缺少的就是開始和終止。如果一個程序的循環只有開始沒有終止,那么這個程序是不會有結果的。所以,我們必須知道什么時候讓循環終止,即循環繼續或循環終止的條件。
于是,一個只包含循環繼續條件的循環語句產生了,那就是while語句,具體語法格式為:
while (循環繼續的條件)
   語句塊;


while語句要比for語句簡練很多,它只負責判斷循環是否繼續。所以,我們必須人為地在語句塊中改變參數,使得循環最終能夠被終止。由于while循環是在循環語句塊之前判斷是否繼續循環,所以又被稱為“當型循環”。

下面讓我們來看一段簡單的程序:(程序5.4.1)
#include "iostream.h"
#include "iomanip.h"
int main()
{
   int password;
   cout <<"請設置一個四位數密碼(首位不能是0):" <<endl;
   cin >>password;
   int i=0;
   while (i!=password)//如果密碼沒猜中就繼續猜
   {
      i++;
   }
   cout <<"破解成功!密碼是" <<i <<endl;
   return 0;
}
運行結果:
請設置一個四位數密碼(首位不能是0):
1258
破解成功!密碼是1258

可能有些讀者還沒看懂,上面這段程序到底是什么意思。其實上面這段程序就是暴力破解密碼的基本原理。假設某臺電腦內設置了一個四位整數的密碼,我們就可以通過循環語句讓它不斷地去嘗試猜測,但是我們無法預知這個密碼是多少,也就無法知道循環里的語句塊要執行多少次,所以我們應該使用while循環,而循環繼續的條件就是密碼沒有被猜中。

算法時間:電腦的猜測
很多人認為,電腦沒有思維,怎么能猜測呢?其實這樣就大錯特錯了。電腦自己是無法猜測的,但是我們可以使用循環語句教它如何猜測,更確切地說是教它如何找到。這種使用循環來查找結果的方法我們稱為窮舉法。即把所有可能的結果都去試試看,如果哪個能對上號了,就是我們所要的答案。但是在使用它的時候我們要注意嚴密性,如果自己考慮時漏掉了可能的結果,那么電腦自然不會猜出完美的答案來。窮舉法在程序設計中使用十分廣泛,甚至很多人腦難以解決的問題,它都能很快地給出答案。

在實際使用中,我們發現while語句就像是只有循環條件的for語句。所以,在某些場合下,while語句和for語句是可以互相轉化的。而while語句也有著和for語句類似的嵌套,在這里不作贅述。

導火索——do

在實際生活中會有這樣的問題,比如今天是星期一,我們以一周作為一個循環,那么循環結束的條件還是“今天是星期一”。如果我們寫while (今天!=星期一),那么這個循環壓根兒就不會運行。因為“今天是星期一”不符合循環繼續的條件,已經直接使循環結束了。

其實我們只要讓第一次的循環運行起來就是了,然后再寫上while (今天!=星期一),就能達到我們的目的。如果我們把后面可以發生的循環比作能發生連鎖反應的炸藥,那么我們缺少的只是一根導火索。而在C++中,就有這么一根導火索——do。它能夠搭配while語句,使得第一次的循環一定能運行起來。它的語法格式是:
do
   語句塊;
while (循環繼續的條件);

要注意,這里的while后面是有一個分號的,如果缺少了這個分號,則會導致錯誤。下面就讓我們來看一個do……while的程序:(程序5.4.2)
#include "iostream.h"
int main()
{
   char inquiry;
   do
   {
      int n;
      cout <<"你要輸出幾個星號?" <<endl;
      cin >>n;
      for (int i=0;i<n;i++)//輸出n個星號
      {
         cout <<'*';
      }
      cout <<endl;
      cout <<"還要再輸出一行嗎?(n表示不要)" <<endl;
      cin >>inquiry;
   }while (inquiry!='n' && inquiry!='N');
   return 0;
}
運行結果:
你要輸出幾個星號?
3
***
還要再輸出一行嗎?(n表示不要)
y
你要輸出幾個星號?
2
**
還要再輸出一行嗎?(n表示不要)
y
你要輸出幾個星號?
1
*
還要再輸出一行嗎?(n表示不要)
n
在這段程序中,由for語句來控制輸出星號的個數。而do…while語句則是提供了一個用戶交流的方式,一旦用戶回答n,則退出程序。

算法時間:命令行下的人機交流
我們現在所使用的Windows系統稱為圖形用戶界面(GUI——Graphic User Interface),它是一種可以由鼠標控制的直觀的操作系統(OS——Operating System)。然而,在圖形用戶界面的操作系統被開發出來之前,我們只好在DOS環境下面對著冷冰冰的電腦,沒有好看的圖標,也沒有方便的鼠標。這種在黑乎乎的屏幕上給電腦下命令的操作模式叫做命令行(Command Line)模式。很顯然,這種模式給用戶很不友好的感覺。所以,我們在設計一個完美的命令行程序時,不僅要求它在功能上質量上的完美,還要求它能夠提供更好的人機交流。而程序5.4.2中do……while語句的用法便是高級語言中簡單而常用的提供人機交流的方法。

至此,我們學完了所有常用的的分支語句和循環語句。這些語句稱為過程化語句。我們可以發現,除了do……while語句以外,所有的過程化語句的末尾是沒有分號的,而分號都屬于大括號內的語句或者語句塊。

過程化語句是一個程序的骨骼。程序的大多數功能都要依賴過程化語句來實現。因此,掌握并且能夠靈活運用過程化語句對程序設計來說非常重要。在以后的章節中,我們還會繼續學習過程化話語句一些更多的使用方法。  
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 免费毛片在线播放 | 日韩一区二区视频 | 亚洲免费婷婷 | 国产精品久久一区 | 亚洲欧美在线播放 | 亚洲精品在线网址 | 久久手机在线视频 | 欧美 日韩 高清 | 久久精品无码一区二区日韩av | 日本久久精品 | av电影中文字幕在线观看 | 亚洲一区二区三区久久 | www久| 亚洲一区二区 | 国产精品一区二区在线观看 | 国产成人在线播放 | 国产精品久久久久久久久久免费看 | 青青草视频在线免费观看 | 成人视屏在线观看 | 在线视频一区二区三区 | 日韩欧美在线一区 | 国产欧美日韩综合精品 | 在线播放一区二区三区 | 999这里只有是极品 欧洲一区二区三区免费视频 | 色综合久久88色综合天天6 | 丁香五月网久久综合 | 中文字幕 视频一区 | 国产成人在线免费看 | 亚洲区视频| 欧美日韩第一 | 国产成人综合在线 | 欧美一级毛片日韩一级 | 亚洲综合视频一区 | 欧美一级视频 | 成人影| 久久亚洲天堂 | 国产日韩精品在线观看 | 中文字幕在线观看 | 老司机午夜免费精品视频 | www国产亚洲精品久久网站 | 亚洲一二三区在线观看 |