C# 入門指南

單元 5 - 陳述與運算式

~~學習進度表~~

陳述 (statement) 是程式中執行的單位, C# 中的陳述要以分號結尾

statement;

C# 的陳述只能有以下四種

宣告是設定變數的型態種類,指派就是替變數設定數值,例如以下宣告整數變數 a ,同時用等號指派 0a

int a = 0;

呼叫是指呼叫方法 (method) ,方法內設定專屬於方法的程式碼,藉由呼叫來執行這些程式碼,例如 ConsoleWriteLine() 可以印出參數 (parameter) ,如果呼叫時沒有提供參數就會印出新行

Console.WriteLine();

遞增

a++;
a--;

建立新物件使用關鍵字 (keyword) new ,例如

new int();

其他用 C# 進行的任何運算都必須包含在以上四種陳述中。

運算式 (expression) 由運算元 (operand) 與運算子 (operator) 組合而成,最簡單的運算式為使用單元運算子的正、負號,如下

運算子功能範例
++a
--a

正、負號適用在數字型態,例如

using System;

namespace ExpDemo01
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = -1;
            int b = +a;
            int c = -a;
            Console.WriteLine(b);
            Console.WriteLine(c);
        }
    }
}

//《程式語言教學誌》的範例程式
// http://kaiching.org/
// 專案:ExpDemo01
// 檔名:Program.cs
// 功能:示範 C# 的運算式
// 作者:張凱慶

跟數學上一樣,正號不會改變正負值,負號則會負負得正,以上例子執行結果如下

C:\ExpDemo01> dotnet run
-1
1
C:\ExpDemo01>

一般運算子都須結合兩個運算元,像是邏輯運算子 (logical operator)

運算子功能範例
&a & b
&&條件式且a && b
|a | b
||條件式或a | b
^互斥或a ^ b
!!a

! 也是單元運算子, &&&|||^ 則需要兩個運算元,例如

using System;

namespace ExpDemo02
{
    class Program
    {
        static void Main(string[] args)
        {
            bool a = true;
            bool b = false;
            Console.WriteLine(a & b);
            Console.WriteLine(a | b);
            Console.WriteLine(a ^ b);
            Console.WriteLine(!a);
        }
    }
}

//《程式語言教學誌》的範例程式
// http://kaiching.org/
// 專案:ExpDemo02
// 檔名:Program.cs
// 功能:示範 C# 的運算式
// 作者:張凱慶

執行結果如下

C:\ExpDemo02> dotnet run
False
True
True
False
C:\ExpDemo02>

條件式且 && 與條件式或 || 會先計算第一個運算元的值,若 a && bafalse ,就直接回傳 false ,此時不會再計算 b ,因此可以縮短計算時間,同樣的 a || batrue 的話,就直接回傳 true

算術運算子 (arithmetic operator) 可用在整數 (integer) 及浮點數 (floating-point number) ,計算結果也為整數或浮點數

運算子功能範例
++遞增a++
--遞減a--
+a + b
-a - b
*a * b
/a / b
%取餘數a % b

例如

using System;

namespace ExpDemo03
{
    class Program
    {
        static void Main(string[] args)
        {
            double a = 100.0;
            double b = 5.0;
            a++;
            Console.WriteLine(a);
            a--;
            Console.WriteLine(a);
            Console.WriteLine(a + b);
            Console.WriteLine(a - b);
            Console.WriteLine(a * b);
            Console.WriteLine(a / b);
            Console.WriteLine(a % b);
        }
    }
}

//《程式語言教學誌》的範例程式
// http://kaiching.org/
// 專案:ExpDemo03
// 檔名:Program.cs
// 功能:示範 C# 的運算式
// 作者:張凱慶

執行結果如下

C:\ExpDemo03> dotnet run
101
100
105
95
500
20
0
C:\ExpDemo03>

加號 + 另外可做字串 (string) 相接與委派組合,減號 - 可做委派移除。

比較運算子用於測試兩個運算元之間的關係,結果回傳布林值

運算子功能範例
==相等a == b
!=不相等a != b
>大於a > b
>=大於等於a >= b
<小於a < b
<=小於等於a <= b

例如

using System;

namespace ExpDemo04
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 11;
            int b = 22;
            bool c = a >= b;
            Console.WriteLine(c);
            bool d = a <= b;
            Console.WriteLine(d);
            bool e = a == b;
            Console.WriteLine(e);
            bool f = a != b;
            Console.WriteLine(f);
        }
    }
}

//《程式語言教學誌》的範例程式
// http://kaiching.org/
// 專案:ExpDemo04
// 檔名:Program.cs
// 功能:示範 C# 的運算式
// 作者:張凱慶

執行結果如下

C:\ExpDemo04> dotnet run
False
True
False
True
C:\ExpDemo04>

我們運用的等號,其實屬於指派運算子 (assignment operator) ,所謂的指派是把等號右邊的值給左邊的變數

運算子功能範例
=指派a = b
+=相加同時指派a += b
-=相減同時指派a -= b
*=相乘同時指派a *= b
/=相除同時指派a /= b
%=取餘數同時指派a %= b
**=取指數同時指派a **= b

除了算術運算子可以和指派運算子連在一起用之外,邏輯運算子也可以和指派運算子連在一起用。

例如

using System;

namespace ExpDemo05
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 1;
            a += 2;
            a -= 2;
            a *= 2;
            a /= 2;
            a %= 2;
            Console.WriteLine(a);
        }
    }
}

//《程式語言教學誌》的範例程式
// http://kaiching.org/
// 專案:ExpDemo05
// 檔名:Program.cs
// 功能:示範 C# 的運算式
// 作者:張凱慶

執行結果如下

C:\ExpDemo05> dotnet run
1
C:\ExpDemo05>

有沒有看的眼花撩亂?居然有 f = a != b 之類的式子出來,這是因為運算子有計算的優先次序 (precedence) ,由於 != 的優先順序在 = 之前,所以 a != b 會先被計算,結果才會指派到 f 之中。如果不是很清楚各個運算子的優先次序,保險一點的做法可以用小括弧,先把要先被計算的運算式圍起來,例如

bool f = (a != b);

這是因為小括弧有最高的優先計算次序。

以上示範的都是寫在單一行的陳述,然而許多控制結構 (control structure) 是屬於多行的複合陳述 (compound statement) ,我們先來討論控制結構中的選擇結構!

相關教學影片

上一頁 單元 4 - 命名規則與習慣
回 C# 入門指南首頁
下一頁 單元 6 - 選擇
回 C# 教材首頁
回程式語言教材首頁
中英文術語對照
算術運算子arithmetic operator
指派assignment
指派運算子assignment operator
呼叫call
複合陳述compound statement
控制結構control structure
宣告declaration
遞減decrement
運算式expression
浮點數floating-point number
遞增increment
整數integer
關鍵字keyword
邏輯運算子logical operator
方法method
運算元operand
運算子operator
物件object
參數parameter
計算的優先次序precedence
陳述statement
陳述式關鍵字statement keyword
字串string
參考資料
1. C# 參考 | Microsoft Docs - C# 運算子
2. C# 參考 | Microsoft Docs - 算術運算子
3. C# 參考 | Microsoft Docs - 布林值邏輯運算子
4. C# 參考 | Microsoft Docs - 等號比較運算子
5. C# 參考 | Microsoft Docs - 比較運算子
6. C# 參考 | Microsoft Docs - = 運算子
7. C# 參考 | Microsoft Docs - + 及 += 運算子
8. C# 參考 | Microsoft Docs - - 及 -= 運算子
9. C# 參考 | Microsoft Docs - new 運算子
重點整理
1. 陳述是程式中執行的單位, C# 中的陳述要以分號結尾。
2. C# 的陳述只有四種,分別是宣告與指派、呼叫、遞增或遞減、建立新的物件或使用陳述式關鍵字。
3. 運算式由運算元與運算子組合而成。
4. 正號不會改變運算元的正負值,負號會負負得正。
5. 邏輯運算子包括且、條件式且、或、條件式或、互斥或、非。
6. 算術運算子包括遞增、遞減、加、減、乘、除、取餘數。
7. 比較運算子包括相等、不相等、大於、大於等於、小於、小於等於。
8. 等號是指派運算子,指派運算子可以和算術運算子、邏輯運算子連在一起用。
9. 小括弧具有最高的計算優先次序。
問題與討論
1. 邏輯運算子可以運用在整數、浮點數或字串嗎?
2. 字串為什麼可以用加法?那也可以用乘法、減法或除法嗎?
3. 為什麼測試兩個變數相等的運算子為連續兩個等號?
4. 為什麼計算的優先次序很重要?
練習
1. 建立一個新專案 Exercise0501 ,建立兩個 int 變數 aba 設定為 2b 設定為 8 ,利用 +-*/% 計算出兩者加、減、乘、除、取餘數的結果。
2. 承上題,另建立一個新專案 Exercise0502 ,利用 ConsoleReadLine() 方法取得使用者輸入的字串,並用 Convert.ToInt32() 轉換為整數,將取得的整數指派給 ab 後,然後再計算出結果。
3. 建立一個新專案 Exercise0503 ,宣告一個字串變數 a ,並且將 a 的值設定為 "*" ,然後印出 aa + aa + a + aa + a + a + aa + a + a + a + a