C# 程式設計 第一部分 第1-4章 C# 程式設計 - 南華大學資管系
程式語言(Programming Language) 機器語言(Machine Language) - 使用0和1二進位來表示程式碼,電腦可以直接執行機 器語言的程式碼。 - 單一CPU只懂一種機器語言(指令集)。 組合語言(Assembly Language) - 使用簡單符號的指令集,來代表二進位的機器碼。 高階語言(High Level Language) -語法接近人類語言的程式語言。 0111 0001 0000 1111 1001 1101 1011 0001 C# 程式設計 - 南華大學資管系 MOV AX , 01 MOV BX , 02 ADD AX , BX 組譯程式 (Assembler) X=X+Y 編譯器(Compiler)或直譯器(Interpreter)
Visual C# 與 .NET Framework .NET Framework是Microsoft新世代的程式開發平台, 它是由CLR(Common Language Runtime)和.NET Framework 類別庫(Class Library)所組成。 Visual C# 語言是一種支援 .NET Framework平台的物件 導向程式語言。 (a) 其應用程式的基本架構就是許許多多的類別(Classes) (b) 類別是一個用來建立物件(Object)的藍圖。該藍圖描述 內含的資料成員(Data Members)以及處理資料的成員 方法(Member Methods)。 (c) .NET Framework 類別函數庫是一個龐大且良好組織 架構的函式庫。 (d) 程式設計師可以利用和擴充類別函式庫,以開發各式 各樣功能的應用程式。 先求寫出正確執行的程式,再求寫出高效率、組織良好易 維護的程式。 C# 程式設計 - 南華大學資管系
C#程式的開發與執行 Source Code 使用者解決問題的邏輯 Editor 編輯器 (原始碼) .NET 編譯程式 .NET a.cs b.cs . Source Code (原始碼) .NET 類別函式庫 .NET 編譯程式 Portable Executable (PE) File MSIL Code+ metadata CLR JIT Compiler 轉成Native Code(第一次執行時),載入主記憶體中,由CPU執行 C# 程式設計 - 南華大學資管系 【跨平台】
C# 程式開發環境 Visual Studio (Visual C# Express) 提供整合開發環境(Integrated Development Environment, IDE),只需在同一個應用程式(環境)中,就可利用一組工具程式來編輯、編譯、執行和維護應用程式。 以專案(Project)的方式來控管應用程式的相 關資源。 C# 程式設計 - 南華大學資管系
主控台應用程式 (CONSOLE APPLICATIONS) 以文字模式執行的應用程式。 新增專案(Project) -選擇主控台應用程式(輸入專案名稱、位置) -方案總管(已有自動產生的相關檔案) -起始物件:Program.cs 執行:建置方案→啟動但不偵錯。 儲存,關閉方案,開啟方案。 using System; - - - - namespace 專案名稱 { class Program { static void Main(String[] args) { // 程式執行的入口(起始點) // { } 程式區塊(Block) } C# 程式設計 - 南華大學資管系
利用程式語言(語法)將解題的邏輯轉換成程式 編輯程式碼與存檔 問題: 《兩位數相加》 數字一:10 數字二:30 10 + 30 = 40 解法分析: 1. 輸入與輸出介面。 2. 資料的取得。 3. 資料在記憶體中的表示(變數)。 4. 資料的存取與運算。 C# 程式設計 - 南華大學資管系 利用程式語言(語法)將解題的邏輯轉換成程式
ConsoleApplication1 (程式碼) 1/2 提示(輸出):Console.WriteLine(“<<兩位數相加>>"); 取得資料(兩個二位數) :由鍵盤輸入並存在主記憶中。 - 宣告變數:儲存的型態與名字 - 提示讀入資料並轉換型態 string input1; int num1; C# 程式設計 - 南華大學資管系 input1 = Console.ReadLine(); num1 = Convert.ToInt16(input1);
ConsoleApplication1 (程式碼) 2/2 3. 運算(相加):變數的存取。 4. 輸出結果(格式化輸出)。 " + = " 5. 程式碼的整理。 int result; result = num1 + num2; C# 程式設計 - 南華大學資管系 Console.WriteLine(" {0} + {1} = {2} " , num1, num2, result);
程式碼的語法測試與執行 可利用“註解”(Comments)來測試不同程式碼片段的語法和執行結果 新的主控台程式範例 /* 這是多行註解 編譯器不會處理 */ // 這是單行註解,編譯器不會處理 新的主控台程式範例 將不想測試的程式碼加以註解,只加上目前欲測試的程式碼即可。(不須要新增專案) 程式也可以在IDE之外執行。 C# 程式設計 - 南華大學資管系
視窗型應用程式(Windows Application) 新增方案: Windows → Windows Form 應用程式。 自動產生相關的檔案: - 已可執行(建置方案→啟動但不偵錯) - 觀察: Graphic User Interface (GUI,圖形使用者介面) + Event-driven Programming (事件驅動程式設計)。 Program.cs Form1.cs 類別→物件 #region ~ #endregion C# 程式設計 - 南華大學資管系
Graphic User Interface 在工具箱中提供多樣的控制項(類別) (a) 表單(Form類別所產生的物件)可視為控制項的容 器 (container)。 (b) 在表單內依需要加入控制項(產生對應的物件) - Label標籤 (提示、輸出) - TextBox文字盒 (輸入、輸出) - Button按鈕 (動作) (c) 依介面的設計需要,在屬性視窗中設定屬性的內容 值 (設計階段) - 控制項和屬性視窗的同步 - 常用的屬性:Name、Text、Font C# 程式設計 - 南華大學資管系
事件處理程序 (Event Handler) 事件驅動的程式設計方式 (a) 當事件(按一下按鈕、表單載入、按鍵等)發生時才觸 發對應的處理程序加以反應。 若沒有給予對應的 event handler,則不會有任何動 作發生。 (b) 當事件發生時(一般是由使用者所引發),系統會捕捉 到。系統會準備好對應的事件物件,連同產生事件的 控制項物件,一起傳給 event handler 處理。 (c) 依應用的需要撰寫處理事件的程式碼。 C# 程式設計 - 南華大學資管系
建立事件處理程序 預設事件:在控制項上按二下 其他事件: 選取控制項→屬性視窗→閃電圖示→找到事件→在欄位上 按二下(也可以選取共用的 event handler,如果有的話) 控制項 預設事件 預設的Event handler 表單(Form1) Load Form1_Load() 按鈕(button1) Click button1_Click() 標籤(label1) label1_Click() 文字盒(textBox1) TextChanged textBox1_TextChanged() C# 程式設計 - 南華大學資管系
Event Handler的程式碼 在執行階段改變控制項屬性值 由控制項上取得資料。 資料的表示與處理。 將變數的內容顯示在控制項上 -將資料儲存在記憶體(變數)中,以便計算。 必要時可進行型態轉換 將變數的內容顯示在控制項上 控制項名字.屬性名字 (例如,textBox1.Text) C# 程式設計 - 南華大學資管系 int n1 = Convert.ToInt16(textBox1.Text); lblResult.Text = “結果 = ” + result; 在執行階段改變控制項屬性值
WindowsFormsApplication1 程式碼 1/2 1. GUI的設計(設計階段) (a) 在表單(容器)中,依序加入文 字盒、標籤、按鈕等控制項 (通用控制項)。 (b) 在屬性視窗中設定屬性值, 如:Name、Text、Font等。 (c) 觀察 Form1.cs 以及 Form1.Designer.cs C# 程式設計 - 南華大學資管系 字首 控制項 屬性 frm 表單 Form Name , Text , Font , StartPosition lbl 標籤 Label Name , Text , AutoSize , BorderStyle txt 文字盒 TextBox Name , Text btn 按鈕 Button
WindowsFormsApplication1 程式碼 2/2 2. 處理"結束"按鈕的Click事件。 3. 處理"相加"按鈕的Click事件。 (a) 取得資料: (b) 計算: (c) 輸出結果:(在執行階段改變控制項屬性值) [this.]Close(); int num1=Convert.ToInt16(txtN1.Text); C# 程式設計 - 南華大學資管系 int result = num1 + num2; lblResult.Text = num1+" + " +num2+ " = " +result;
指定起始的表單 新增應用範例 新增表單 在 Program.cs 中指定執行的起始表單 程式碼 - 在專案按右鍵→加入→Windows Form 在 Program.cs 中指定執行的起始表單 Application.Run( new ch2ex() ); 程式碼 lblOutput.Text = txtInput.Text; lblOutput.BackColor = Color.Yellow; C# 程式設計 - 南華大學資管系
C# 應用程式架構與寫作風格 1/2 1. 基本架構就是Classes(類別)→產生物件。 2. 有豐富且組織良好的類別庫可以使用。 3. Using 指引指令 (匯入 .Net Framework 提供的 類別,須指定所在的名稱空間)。 4. namespace 名稱空間的名字 { // 群組的類別 // 每個名稱空間能夠擁有多個類別 // 每個類別可定義其相關的資料和方法 } using System; C# 程式設計 - 南華大學資管系
C# 應用程式架構與寫作風格 2/2 5. 類別(Class):Program.cs、Form1.cs、 Form1.Designer.cs 6. 程式敘述(以;結尾) → 程式區塊。 7. 自由格式(Free-format)的程式語言。 8. 善用註解。 Block,由多個敘述所構成,{ } C# 程式設計 - 南華大學資管系 適當的縮排,增加可讀性
變數(Variable)的命名與宣告 變數名字(識別字):用來代表記憶體位址。具有命名規則,不可用關鍵字,區分大小寫。 資料型態:決定記憶體大小以及記憶體內容的解釋方式(資料格式) 變數宣告:型別名稱 變數名稱 [ = 初值 ]; 給值:指定敘述 (Assignment Statement ) 。 存 取 L值 = R值 C# 程式設計 - 南華大學資管系
變數的存取 兩變數值的交換 (善用暫存變數) int a = 5 , b = 10; int temp; a = b; temp = a; b = a; int temp; temp = a; a = b; b = temp; C# 程式設計 - 南華大學資管系
基本型態(Primitive Data Types)、 單一値的資料型態 1/5 如 char, short, int, long, float, double 記憶體大小與值的範圍(有限) 資料型態 位元組 範圍 char 2 bytes 0~65535 (Unicode) short -32,768~32,767 int 4 bytes -2,147,483,648~2,147,48,3647 long 8 bytes -9,223,372,036,854,775,808~ 9,223,372.036,854,775,807 float -3.402823E38~3.402823E38 double -1.79769313486232E308~ 1.79769313486232E308 C# 程式設計 - 南華大學資管系
基本型態(Primitive Data Types)、 單一値的資料型態 2/5 字面值(literal)的預設型態。 可以指定字面值的型態(利用Type Characters) 變數值的範圍是有限的 123 → int 3.1415 → double 123L, 3.1415F C# 程式設計 - 南華大學資管系 short a = 456;// OK short s = 40000;/* Error, Overflow(溢位) 無法轉換, 明顯轉換也不行 */
基本型態(Primitive Data Types)、 單一値的資料型態 3/5 Implicit Conversions (隱含型態轉換) int k = 40000; long l = k; short s = k;// X int i = 1.23f; // X float 不能隱含轉換為 int int i = 1.23; // X double 不能隱含轉換為 int Explicit Conversions (明顯型態轉換) (利用Cast operator,型態轉換運算子) C# 程式設計 - 南華大學資管系 short s = (short) k;// √ 結果 = -25536 int i = (int) 1.23f ;// √ 結果 = 1
基本型態(Primitive Data Types)、 單一値的資料型態 4/5 不同型態的資料在運算時會進行隱含型態轉換 (a) int num = 125; double d ; d = num + 123.45f; (b) int a = 17, b = 5; float f; f = a / b; // 3.0 f = (float) a / (float) b; // 3.4 C# 程式設計 - 南華大學資管系
基本型態(Primitive Data Types)、 單一値的資料型態 5/5 字元型態(Char Type):單一Unicode 內碼的字元。 字元字面值(Character literals):使用單引號括起的 字元。 char a = 'A' ; char c = '\u0020' ; // 空白字元(space) C# 程式設計 - 南華大學資管系 Escape Character
參考資料型態(Reference Data Types) 如 string (字串), array (陣列) , object (物件)。 其變數值是(資料存放的)記憶體位址:間接存取 字串字面值(string literals):由雙引號括起的文字 內容。 如何輸出含有特殊字元的字串: My "C#" program 使用Escape Character (逸出字元) C# 程式設計 - 南華大學資管系 string str1 = "Hello World!" ; Console.WriteLine("My \"C#\" program");
算術運算式 (Arithmetic Expressions) 運算元(operand):X , 2 , 3 (算術)運算子(operator):*, - , + - 注意運算子的優先順序(precedence) 及 結合性(Associativity)。 Ex:C = (5.0 / 9.0) * (f - 32) C# 程式設計 - 南華大學資管系
「+」:加法與串接 int a = 100 , b = 120 ; 1. a + b → 220 (+) 2. "a = " + "100 " → "a = 100 " (串接) 3. "a = " + a → "a = 100" (串接) 4. a + " + " + b + " = " + (a + b) (+、串接) → "100 + 120 = 220" C# 程式設計 - 南華大學資管系
int num1 = Convert.ToInt32(txtN1.Text); 練習:整數四則運算 表單屬性:Text , Font , ControlBox。 Close(); // 關閉表單。 數字字串轉換成整數 利用字串串接輸出結果(txtResult)。 利用空字串(“ ”)清除文字盒(TextBox)。 C# 程式設計 - 南華大學資管系 int num1 = Convert.ToInt32(txtN1.Text);
同義的運算 1. X = X + 1 ; ≡ X += 1; ≡ X ++ ; ≡ ++ X; 2. string s = "2*2 = 4;" ; s = s + "3*3 = 9;";(串接) ≡ s += "3*3 = 9;"; s 內容 → "2*2 = 4;3*3 = 9;" 3. int a = 10; (累加) a = a + 10; ≡ a += 10; a內容 → 20 C# 程式設計 - 南華大學資管系
基本流程控制:選擇結構(Selection) 單一選擇:依條件的真假,決定是否進行特定的動作。 布林型態(Boolean Type):其值只有 true 和 false 兩個值。 關係運算子(Relational Operators) bool isFound = true; C# 程式設計 - 南華大學資管系 int a = 16 , b = 13; a == b → false a != b → true a >= b → true a < (b+2) → false
選擇結構:單選 false false true true if (C) S1 ; S2 ; S3 ; (X) if (C) { S1; } S3; C# 程式設計 - 南華大學資管系 (X) (√) (√) if (C) S1 ; S2 ; (√) if (C) {S1 ;} S2;
lblResult.Text = "錯誤:數字一超過99"; 練習:整數四則運算 檢查範圍 (0~99)。 輸出錯誤訊息。 Return 敘述。 if (num1 < 0) { lblResult.Text = "錯誤:數字一小於Ø " ; return ; } if (num1 > 99) { lblResult.Text = "錯誤:數字一超過99"; return; C# 程式設計 - 南華大學資管系
訊息方塊(MessageBox) 使用訊息方塊來顯示訊息文字或輸出結果 MessageBox.Show(訊息文字,[標題文字,顯示按鈕,顯示圖示]) MessageBox.Show("數字一小於Ø", // 訊息 "錯誤訊息", // 標題 MessageBoxButtons.OK , //確定鈕 MessageBoxIcon.Error // 圖示 ); C# 程式設計 - 南華大學資管系
練習:輸入三個0~99數字 輸出最大值和最小(MessageBox) int max = n1 ; if (n2 > max) max = n2 ; if (n3 > max) max = n3 ; MessageBox.Show( "最大值 = " + max , " 三數比較 " , MessageBoxButtons.OK , MessageBoxIcon.Information ) ; C# 程式設計 - 南華大學資管系
例外處理(Exception Handling) (e.g. 除以0,格式不符) try { // 測試的程式碼(可能有例外發生) } catch (Exception ex) { // 可以有多個Catch // 例外處理的程式碼(顯示錯誤訊息) // ex.ToString(), ex.Message finally { // 選擇性的程式區塊。 // 如果有的話,一定會執行。 C# 程式設計 - 南華大學資管系
練習:整數四則運算(除法) 除以Ø (整數) 格式不符 int num1 = Convert.ToInt32(txtN1.Text) ; try { int num1 = Convert.ToInt32(txtN1.Text) ; if (num1 < 0) { . . . . . . . } if (num1 > 99) { . . . . . . . } int num2 = . . . … output = output + num1 + " / " + num2 + " = " + (num1 / num2); } catch(Exception ex) { MessageBox.Show(ex.Message , "錯誤訊息" , . . . . ); C# 程式設計 - 南華大學資管系