我們思考一下怎么寫這個程序。流程如下:
解釋一下上面的流程圖。
首先聲明變量a=0;
判斷一下a是否在0到100;
如果不在,則結束,如果在的話,我們再判斷一下a是否能被3整除或者被5整除余2;
如果上一步真,則輸出a,並且執行i++,然后循環至第二步,如果上一步為假,那么直接執行i++;
直至程序結束。
以上的過程不是很難理解,多看幾次就明白了。問題在於我們之前學的知識無法解決這里的判斷或者循環問題。今天我們就來學流程控制。
判斷或者選擇(if esle)
先來介紹其語法格式,常見的有兩種:
第一種:
if (這里寫邏輯表達式) { 當上面邏輯表達式結果為真的時候,執行這里的代碼 } else { 當上面邏輯表達式結果為假的時候,執行這里的代碼 }
第二種:
if (這里寫邏輯表達式1) { 當上面邏輯表達式1結果為真的時候,執行這里的代碼 } if (這里寫邏輯表達式2) { 當上面邏輯表達式2結果為真的時候,執行這里的代碼 } ...... else { 當上面邏輯表達式結果全部為假的時候,執行這里的代碼 }
當然,還有其他的變種,也就是靈活運用的結果。例如第一種的嵌套,還有就是只有if語句,省略了else語句。
下面我們寫幾個例子:
例1 給定一個數,判斷是否是偶數還是奇數,並輸出結果
這里我們先不通過鍵盤輸入數,先寫死到程序里,例如下面的程序:
int a = 7; if (a % 2 == 0) { Console.WriteLine("這個數是偶數"); } else { Console.WriteLine("這個數是奇數"); }
分析:給定這個數后,我們要先判斷是不是偶數。(怎么判斷呢,當然是除2取余數啦)我們把條件判斷寫在if后面的圓括號里面。如果是真的,那就執行if下面的花括號內的內容,也就是輸出這個數是偶數,否則執行else部分,輸出這個數是奇數(除了奇數不就是偶數么,莫非你還想說有小數?)
例2 給定一個數,判斷能否被3整除,如果能,則輸出可以被3整除,如果能被5整除,再輸出可以被5整除,否則輸出此數既不是3的倍數,也不是5的倍數
先來分析一下,這個題需要判斷兩次,第一次是3的倍數,第二次是5的倍數,很顯然,需要if的第二種格式。代碼如下:
int a = 7; if (a % 3 == 0) { Console.WriteLine("這個數是3的倍數"); } if (a % 5 == 0) { Console.WriteLine("這個數是5的倍數"); } else { Console.WriteLine("這個數是既不是3的倍數也不是5的倍數"); }
我想你寫的和我的是一樣的。
從上面兩個例子看出來,選擇或者判斷流程不是很難,只要給定判斷條件,就可以進行判斷了。
思考下面的一個問題,學校里在進行成績分級時通常這么做,如果你是優,則代表你是90-100的分數段,如果是良,則80-89,中70-79,及格60-69,不及格60一下,那么我們怎么用程序表達呢?
你是否想用第二種形式的呢?但是我覺得還是太麻煩,得寫5個if,是否有簡單的寫法呢?先看我給出的程序:
string score = "中"; switch (score) { case "優": Console.WriteLine("你的成績在90-100"); break; case "良": Console.WriteLine("你的成績在80-89"); break; case "中": Console.WriteLine("你的成績在70-79"); break; case "及格": Console.WriteLine("你的成績在60-69"); break; case "不及格": Console.WriteLine("你的成績在0-59"); break; default: Console.WriteLine("你給的等級不存在!"); break; }
哈哈,貌似也不簡單。來吧,分析一下這個語法結構。(由於等級無法用整數變量表示,所以我用的字符串類型,string,string賦值時需要雙引號,你還記得這點么?)
首先是witch關鍵字,后面有個括號,這個括號里不能放if里的那種條件表達式,這里只能是一個變量,而后面的花括號里,才要進行判斷。
花括號里優三個關鍵字,case,break和default。case后面跟的是一個值,也就是上面變量的值,如果那個值等於這個,則執行后面的語句,然后緊跟break,跳出判斷。
最后的default是在前面的值都無法匹配時執行的。當然,你可以省略此句。
所以switch的判斷適合這種定值匹配的,也就是說變量的值是固定個數的,這就是和if的區別。
if和?:運算符的區別
還記得上節中的三元運算符找最大值得例子么,我們可以用if改寫。這里有個結論,所有的三元運算符都可以用if改寫,反之不成立。改寫的代碼如下:
int a = 2; int b = 3; int max; //max = a > b ? a : b;這是我們上節中的寫法 if (a > b) { max = a; } else { max = b; }
今天的寫法更清晰明了吧。但是三元運算符更簡潔。至於選哪種,你自己決定吧。
本節的內容不多,但是難度大。主要是對程序運行過程的理解,和語法的記憶。循環下節中介紹。
總結:
- 判斷選擇的兩種寫法(if…else…)
- 定值判斷(switch…case…)
- 三元運算符和if的相互轉化
練習:
- a=5,b=4,c=7,用程序判斷這三邊是否可以組成三角形,如果可以則輸出能組成三角形,如果不能,則輸出不能組成三角形。(兩邊之和大於第三邊,兩邊之差小於第三邊)
- 已知點(3,-5),用程序判斷其在直角坐標系的第幾象限,並輸出結果。
- a=5,b=4,c=7,找出最大值輸出。
- 已知一元二次方程的系數為A=10,B=-3,C=4,如果方程有實數根,則求出結果,如果沒有則輸出無實數根。