for循環
fooloop.cpp
/*forloop.cpp*/ #include<iostream> int main() { using namespace std; int i; /*該循環首先將整數變量i設置為0:i=0 這是循環的初始化部分。 然後,循環測試部分檢查i是否小於5:i<5 如果確實小於5,則程序將執行接下來的語句——循環體 然後,程序使用循環更新部分將i加1 直到循環將i更新為5為止。這樣接下來的測試失敗,程序將接著執行循環後的語句。*/ for (/*循環的初始化部分*/i = 0; /*循環測試部分*/i < 5; /*循環更新部分*/i++) /*循環體*/cout << "C++ 知道循環.\n"; cout << "C++知道何時停止 .\n"; cin.get(); cin.get(); return 0; }
輸出
C++ 知道循環. C++ 知道循環. C++ 知道循環. C++ 知道循環. C++ 知道循環. C++知道何時停止 .
num_test.cpp
#include<iostream> int main() { using namespace std; cout << "Entet the starting coutdown value:"; int limit; cin >> limit; int i; for (i = limit; i; i--) cout << "i=" << i << "\n"; cout << "Done now that i=" << i << "\n"; cin.get(); cin.get(); return 0; }
輸出
Entet the starting coutdown value:5 i=5 i=4 i=3 i=2 i=1 Done now that i=0
for循環設計
formore.cpp
#include<iostream>
/*在需要數組長度的地方使用符號常量,如果數組被用了多次,修改數組長度時方便*/ const int ArSize = 16; int main() {
long long factorials[ArSize]; factorials[1] = factorials[0] = 1LL; for(int i = 2; i < ArSize; i++) factorials[i] = i*factorials[i - 1];
/*在fot-init-statement中聲明的變量只存在於for語句中,也就說,當程序離開循環後,這種變量將消失*/ for (int i = 0; i < ArSize; i++) std::cout << i << "!=" << factorials[i] << std::endl; std::cin.get(); std::cin.get(); return 0; }
輸出
0!=1 1!=1 2!=2 3!=6 4!=24 5!=120 6!=720 7!=5040 8!=40320 9!=362880 10!=3628800 11!=39916800 12!=479001600 13!=6227020800 14!=87178291200 15!=1307674368000
forstr1
#include<iostream> #include<string> int main() { using namespace std; cout << "Enter a word:"; string word; cin >> word; for (int i = word.size()-1; i >= 0; i--) cout << word[i]; cout << "\nBye.\n"; cin.get(); cin.get(); return 0; }
輸出
Enter a word:name eman Bye.
復合語句(語句塊)
編寫C++for語句的格式(或語法)看上去可能比較嚴格,因為循環體必須是一條語句。如果要在循環體中包含多條語句,浙江很不方便。所幸的是,C++提供了避開這種限制的方式,通過這種方式可以在循環體中 包含任意多條語句。
符合語句還有一種有趣的特性。如果在語句塊中定義一個新變量,則僅當程序執行該語句塊中的語句時,該變量才存在。執行完該語句塊後,變量將被釋放。這表明此變量僅在該語句塊中才是可用的。
注意,在外部語句塊中定義的變量在內部語句塊中也是被定義的。
如果在一個語句塊中聲明一個變量,而外部語句塊中也有一個這種名稱的變量,情況將如何呢?在聲明位置到內部語句塊結束的范圍之內,新變量將隱藏舊變量;然後舊變量再次可見。
while循環
while循環是沒有初始化和更新部分的for循環,它只有測試條件和循環體:
while(test-condition)
body
首先,程序計算圓括號內的測試條件表達式。如果該表達式為true,則執行循環體中的語句。
顯然,如果希望循環最終能夠結束,循環體中的代碼必須完成某種影響測試條件表達式的操作。
while循環的結構
while.cpp
#include<iostream> const int ArSize = 20; int main() { using namespace std; char name[ArSize]; cout << "Your first name,please:"; cin >> name; cout << "Here is your name,varticalized and ASCⅡized:\n"; int i = 0; /*循環在遇到空值字符時停止。 這種逐字符遍歷字符串的技術是C++處理C-風格字符串的標准方法 由於字符串中包含了結尾標記,因此程序通常不需要知道字符串的長度*/ /*可以這樣修改while行:while(name[i]) 經過這種修改後,程序的工作方式將不變。這是由於name[i]是常規字符,其值為該字符的編碼——非零值或true。*/ while (name[i] != '\0') { /*要打印字符的ASCⅡ碼,必須通過強制類型轉換將name[i]轉換為整型。這樣,cout將把值打印成整數,而不是將它解釋為字符編碼。*/ cout << name[i] << ":" << int(name[i]) << endl; /*省略這一步將導致循環停留在同一個數組元素上,打印該字符串及其編碼,直到強行終止該程序。 導致死循環是循環最常見的問題之一。通常*/ i++; } cin.get(); cin.get(); return 0; }
輸出
Your first name,please:Maple Here is your name,varticalized and ASCⅡized: M:77 a:97 p:112 l:108 e:101
for與while
由於for循環和while循環幾乎是等效的,因此究竟使用哪一個只是風格上的問題。它們之間存在三個差別。首先,在for循環中省略了測試條件時,將認為條件為true;其次,在for循環中,可使用初始化語句聲明一個局部變量,但在while循環中不能這樣做;最後,如果循環體中包括了continue語句,情況將稍有不同。
通常程序員使用for循環來為循環計數,因為for循環格式允許將所有相關的信息——初始值、終止值和更新計數器的方法——放在同一個地方。在無法預先知道循環將執行的次數時,程序員常使用while循環。
編寫延時循環
waiting.cpp
#include<iostream> #include<ctime> int main() { using namespace std; cout << "Enter the delay time,in seconds:"; float secs; cin >> secs; clock_t delay = secs* CLOCKS_PER_SEC; cout << "starting\a\n"; clock_t start = clock(); while (clock() - start < delay) ; cout << "done\a\n"; cin.get(); cin.get(); return 0; }
do while循環
do while循環是出口條件循環。這意味著這種循環將首先執行循環體,然後再判定測試表達式,決定是否應繼續執行循環。如果條件為false,則循環終止;否則,進入新一輪的執行和測試。
句法:
do
body
while(test-expression)
do while循環的結構
有時do while測試很合理。例如,請求用戶輸入時,程序必須先獲得輸入,然後對它進行測試。
基於范圍的for循環(C++11)
這種循環簡化了一種常見的循環任務:對數組(或容器類,如vector和array)的每個元素執行相同的操作。
double prices[5]={4.99,10.99,6.87,7.99,8.49};
for(double x:prices)
cout<<x<<<std::endl;
其中,x最初表示數組prices的第一個元素。顯示第一個元素後,不斷執行循環,而x依次表示數組的其他元素。
循環和文本輸入
cin對象支持3種不同模式的單字符輸入,其用戶接口各不相同。下面介紹如何在while循環中使用這三種模式。
使用原始的cin進行輸入
#include<iostream> int main() { using namespace std; char ch; int count = 0; cout << "Enter characters;enter # to-quit;\n"; cin >> ch;//在循環之前讀取第一個字符,這樣循環可以測試第一個字符。這很重要,因為第一個字符可能是# while (ch != '#'/*哨兵字符,作為停止標記*/) { cout << ch;//回顯讀取的字符 ++count;//計算讀取的字符數 cin >> ch; } cout << endl << count << "characters read";//報告處理的總字符數 cin.get(); cin.get(); return 0; }
嵌套循環和二維數組
C++沒有提供二維數組類型,但用戶可以創建每個元素本身都是數組的數組。
for(int row=0;row<4;row++) { for(int col=0;col<5;++col) cout<<maxtemps[row][col]<<"\t"; cout<<endl; }