上節課的最後我們介紹了if判斷分支,我們接著介紹流程控制裡面的分支:
除了之前說的if-else分支之外,我們還有另乙個分支:switch-case分支。
switch-case分支:
int num = convert.toint32(console.readline());
switch(num)
console.readkey();
在switch-case分支中,switch是判斷條件,case是分支,上面這個語句首先在switch中判斷num的值,當num等於0時,執行case 0後面的語句,當num等於1時,執行case 1後面的語句,當num等於2時,執行case 2後面的語句,以此類推。
最後有個default,意思是「預設」,就是說當switch中的判斷條件不為case後面的所有值時,就認為它的值是預設的,就執行default後面的語句。
上面說的if、if-else、switch-case都是分支語句,下面介紹迴圈語句:while迴圈、do-while迴圈和for迴圈
while迴圈:
int num = 0;
while(num<=20)
while後面就是判斷條件,它判斷返回的結果是是bool值,只有它的判斷條件是true時,才會執行花括號裡面的語句,當判斷條件為false時,while根本不理會你,因為你不夠格,沒有權利讓我執行我裡面的**了。
這裡要注意不要弄出死迴圈了!!!
while迴圈之後我們就學習do-while迴圈,其實這兩個是相似的:
int num = 0;
dowhile(num<=20);
根據**自上而下的順序我們可以看出do-while迴圈實際上是先執行迴圈體,然後才進行條件判斷,它和while的區別就像a++和++a的區別一樣。
它們都是判斷while裡面的條件,但不同的是do-while迴圈中迴圈體的執行次數大於等於1,而while迴圈中迴圈體的執行次數則是大於等於0.一般do-while迴圈不常用,大多數情況下用while迴圈要比do-while迴圈更方便一些。
無論是do-while迴圈還是while迴圈,它們有乙個共同點:容易產生死迴圈,這是相對於for迴圈來說的,接下來說說for迴圈來解釋一下:
for (int i = 0; i <= 20;i++ ) //注意for迴圈括號裡面的內容的執行順序;初始化可以不寫;條件變化也可以不寫;判斷條件也可以不寫,但那樣的話就是死迴圈了
這裡說的不寫不是說不需要寫,而是可以不用放在這裡來寫,可以放到別的位置來寫:
int num = 0;
for (; num <= 20; )//可以不寫,但是格式要保持
我們看,for迴圈中一般都有類似於上面「num++」的語句,無論num多小,也無論判斷條件有多大,for迴圈總有終止的時候,(一般情況下都會終止,但是極個別會出現沒有「num++」語句,那就是死迴圈了)。
我們在寫for迴圈的時候一般會下意識地寫:
for(int i=0;i
<=var;i++)
這裡我們順帶著就把條件以及上下限確定了,但是while迴圈和do-while迴圈判斷的時候只是簡單的判定,範圍還是要特意去寫,稍有遺漏就容易造成死迴圈。
但是我們有時候也可以利用死迴圈這一特性:
只要我沒有輸入0,這個迴圈就根本停不下來!利用這個特性我們可以實現很多邏輯功能。三種迴圈方式都是相通的,一種方法可以實現,稍微改變一下就可以用另乙個方法來實現。
到這裡我們流程控制的分支和迴圈就已經學習完畢了。
在迴圈控制裡面我們還有乙個知識點沒有說明:死迴圈或者說普通迴圈怎麼跳出?
在執行某個迴圈的時候,我想讓程式在某乙個迴圈的時候當即停止迴圈,跳到這個迴圈的外面,怎麼辦呢?
我們上面有乙個沒說明的break就是解決這個問題的:
while(true)
}console.readkey();
還是這個例子,不輸入0的時候就是乙個死迴圈,輸入0之後我們達到目的了,這個迴圈體就沒有必要繼續迴圈了,所以我們要跳出,用到了break!
break是跳出離它最近的迴圈體!!!break是跳出離它最近的迴圈體!!!break是跳出離它最近的迴圈體!!!重要的事情說三遍,至少這是我不太了解的地方。
如:
while (true)
}console.writeline("這是內迴圈!");
}console.writeline("這是外迴圈!");
從結果中,我們可以明確看到,它是跳出了從第三行開始,第十一行結束的迴圈體,而不是從第一行開始,第十四行結束的迴圈體。
為什麼要強調break是跳出距離它最近的迴圈體呢?那是因為迴圈巢狀的使用時要注意break跳出的正確位置,分析失誤的話有可能會出現隱患的。
另外還有一種語句經常能用到:return。
return就比較霸道和強勢了,我們說跳出暫時只是說跳出迴圈體,而return則是跳出當前方法,這是什麼概念?暫時只要知道乙個方法可以包含無數個迴圈體就好了。
對了,還有乙個很重要且經常能用到的語句差點忘了,那就是:continue!
要說它們幾個跳出的方法有沒有比較相近的,那continue和break要更近一些,goto不推薦用,就不考慮,return太強悍,就剩continue和break了。
break是剩下的語句不繼續執行了,跳出當前迴圈,迴圈就終止了;而continue則是剩下的語句不繼續執行了,跳過當前迴圈,進入下乙個迴圈,迴圈還在繼續!
這就是兩者的區別,我們看乙個例項:
int
sum = 0;
while (true)
else}}
當輸入的數字是奇數時,下面的語句不執行了,進入下乙個迴圈(要求使用者輸入),知道最終的和大於等於100時,迴圈才被終止。
以上是跳出迴圈的幾種方法。
今天的學習內容大概就是這些,來總結一下:
我們說了if分支、if-else分支,今天繼續說了switch-case分支;
分支介紹完畢後,介紹迴圈:while迴圈、do-while迴圈和for迴圈;
接著就是迴圈跳出的幾種方法:break、return、goto、continue,其實也不能說是迴圈跳出,說迴圈終止更準確些吧。
跟siki老師學C 第二天
今天我們學習的是c 中的一些符號,包括一些常用字元和運算子等。首先來看乙個例子 string playername 馬里奧 int playerlevel 10 int hp 200 float exp 800.9f console.writeline 主角的名字為 主角的等級為 主角的血量為 主角...
跟siki老師學C 第七天
今天我們要學習的內容是函式,也叫做方法。什麼叫方法?就是我們為了達到某個目的或者實現某項功能而設定的一系列步驟。為什麼要使用方法呢?我們在之前編寫的控制台應用程式都是寫在main 方法中的,在控制台應用程式中,程式的執行是以main 方法為程式入口的,也就是說無論你main 方法寫在 只要你執行這個...
跟siki老師學C 第八天
上一次我們學到方法的到時候說到乙個引數可以是陣列的情況 static void getarray int array 這裡是陣列作為乙個方法的引數,所以叫做陣列引數,還有乙個東西叫做引數陣列 在陣列引數中,我們在用這個方法的時候需要把我們自己構造的這個陣列傳過去作為引數,而引數陣列則不,它是在呼叫的...