【C#學習筆記】【5】找出0-100以內的所有的能被3整除或者被5整除余2的數(一)(流程控制)


我們思考一下怎么寫這個程序。流程如下:

Sample Flowchart Template (1)

解釋一下上面的流程圖。

首先聲明變量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;
}

今天的寫法更清晰明了吧。但是三元運算符更簡潔。至於選哪種,你自己決定吧。

本節的內容不多,但是難度大。主要是對程序運行過程的理解,和語法的記憶。循環下節中介紹。

總結:

  1. 判斷選擇的兩種寫法(if…else…)
  2. 定值判斷(switch…case…)
  3. 三元運算符和if的相互轉化

練習:

  1. a=5,b=4,c=7,用程序判斷這三邊是否可以組成三角形,如果可以則輸出能組成三角形,如果不能,則輸出不能組成三角形。(兩邊之和大於第三邊,兩邊之差小於第三邊)
  2. 已知點(3,-5),用程序判斷其在直角坐標系的第幾象限,並輸出結果。
  3. a=5,b=4,c=7,找出最大值輸出。
  4. 已知一元二次方程的系數為A=10,B=-3,C=4,如果方程有實數根,則求出結果,如果沒有則輸出無實數根。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM