執行for重複結構時,聲明控制變量counter並將其初始化爲1。而後檢查循環條件counter <=10。因爲counter的初始值爲1,所以條件知足,打印Counter的值(1)。而後在表達式Counter++中遞增控制變量counter,再次進行循環和測試循環條件。因爲這時控制變量等於2,沒有超過最後值,所以程序再次執行語句體。這個過程一直繼續,直到控制變量counter遞增到11,使循環條件的測試失敗,重複終止。程序繼續執行for結構後面的第一條語句(這裏是程序末尾的return浯句)。ios
// Fig. 2.17:fig02 17.cpp // Counter-controlled repetition with the for structure #include < iostream.h> int main() { // Initialization, repetition condition, and incrementing // are all included in the for structure header. for ( iht counter = 1; counter <= 10; counter++ ) cout << counter << endl; return O; }
圖2.18更進一步研究了圖2.17中的for結構。注意for結構指定計數器控制重複所需的每一個項目。若是for結構體中有多條語句,則應把語句體放在花括號中。c++
注意圖2.17用循環條件counter <=10。若是循環條件變爲counter<lO,則循環只執行9次,這種常見的邏輯錯誤稱爲差1錯誤。程序員
for 關鍵字 控制變量名 控制變量終值 ↓ ↓ ↓ for ( int counter = 1; counter <= 10; counter++) ------------- ↑ ↑ ↑ 控制變量初始化 循環條件 控制變量遞增 圖 2.18 典型for首部的組件
while或for條件中使用不正確的關係運算符和不正確的循環計數器終值會致使差1的錯誤。算法
在while或for條件中使用終值和用關係運算符 <=能夠避免差1的錯誤。例如,對打印1到10的循環,循環條件應爲counter<=10而不是counter<10(致使差1錯誤)或counter(雖然正確)。許多程序員喜歡基於O的計數,在循環中重複10次.courter初姑化爲O,循環條件測試爲counter<10。express
for結構的通常格式以下:編程
for(expression1;expression2;expression3) statement
其中expression1初始化循環控制變量的值,expression2是循環條件,expression3遞增控制變量。大函數
多數狀況下,for結構能夠表示爲等價的while結構:測試
expression1 while(expression2){ statement expression3; }
唯一的例外將在2.18節介紹。spa
若是for結構首部中的expression1(初始化部分)定義控制變量(即控制變量類型在變量名前 面指定).則該控制變量只能在for結構體中使用,即控制變量值是for結構以外所未知的。這種限制控制變量名的用法稱爲變量的做用域(scope)。變量的做用域定義其在程序中的使用範圍。做用域將在第3章「函數」中介紹。code
若是for結構首部中的初始化部分定義控制變量,則在該結構體以後使用這個控制變量是個語法錯誤。
在新的C++草案標準中,for結構初始化部分聲明的控制變量範圍與舊式的C++編譯器中不一樣。舊式的c++編譯器產生的C++代碼在支持新的C++草案標準妁編譯器中編譯時可能遭到破壞。能夠用兩個編工程策略防止這個問題:在每一個for結構中定義不一樣名稱的控制變量或者在多個for結構中定義相同名稱的控制變量,並在第一個for循環以外和以前定義控制變量。
有時,exprossion1和expression3是由逗號分開的表達式列表。這裏用逗號做爲逗號運算符(comma operator),保證從左向右求值表達式列表。逗號運算符在全部C++運算符中的優先級量低。逗號分隔表達式列表的值和類型是列表中最右邊表達式的值和類型。逗號運算符最經常使用於for結構,其主要用途是讓程序員使用多個初始化表達式或多個遞增表達式。例如,一個for結構中可能有多個控制變量須要初始化和遞增。
只把涉及控制變量的表達式放在for結構的初始化和遞增部分。其餘變量的操做應放在循環以前(若是像初初化語句同樣只執行一次)或循環體中(若是對每一個循環環執行一次,如遞增和遞減語句)。
for結構中的三個表達式是可選的。若是省略expression2,則C++假設循環條件爲真,從而生成無限循環。若是程序其餘地方初始化控制變量,則能夠省略expression1。若是for語句體中的語句計算增量或不須要增量,則能夠省略expression3。for結構中的增量表達式就像是for語句體末尾的獨立語句。所以,下列表達式:
在for結構的遞增部分都是等價的。許多程序員喜歡counter++,由於遞增在執行循環體以後發生,所以,後置自增形式彷佛更天然。因爲這裏遞增的變量沒有出如今表達式中,所以前置自增與後置自增的效果相同。for結構首部中的兩個分號是必需的。
for結構首部中的兩個分號改爲逗號會形成語法錯誤。
將分號放在for結構首部的右括號後面令使該for結構體變爲空語句.一般是個邏輯錯誤。
將分號放在緊接着for結構首部的後面有時能夠生成所謂的延遲循環。這種for的循環體是空語句,表示計算空循環的次數。例如,能夠用空循環減慢程序速度,以免其在屏幕上輸出太快,沒法閱讀。
for結構的初始化、循環條件和遞增部分能夠用算術表達式。例如,假設x=2和y=10,若是x和y的值在循環體中不被修改,則下列語句:
for (int j= x; j <= 4* x* y; j += y/ x )
等於下列語句:
for(int j=2;j <=80;j+=5)
for結構的增量也多是負數(其實是遞減,循環向下計數)。
若是循環條件最初爲false,則for結構體不執行,執行for後面的語句。for結構中常常打印控制變量或用控制變量進行計算,控制變量經常使用於控制重複而不在for結構體中說起這些控制變量。
儘管控制變量值能夠在for循環體中改變,但最好不要這樣作,固爲這樣可能形成必定的邏輯錯誤。
for結構的流程圖與while結構類似。例如,圖2.19顯示了下列for語句的流程圖:
for(int counter=l;counter >=10;counter++) cout << counter<< endl;
從這個流程圖能夠看出初始化發生一次,井在每次執行結構體語句以後遞增。注意,流程圖(除了小圓框和流程以外)也只能包含表示操做的矩形框和表示判斷的菱形框。這是咱們強調的操做/判斷編程模型。程序員的任務就是根據算法使用堆棧和嵌套兩種方法組合其餘幾種控制結構,而後在這些框中填入算法所要的操做和判斷,從而生成程序。
2016考研複試技巧http://www.kyjxy.com/fushi/zhinan/
考研專碩備考資料http://www.kyjxy.com/zhuanshuo/
考研院校政策http://www.kyjxy.com/yuanxiao/zhengce/