PPT1 - NHU IMBI Lab

Download Report

Transcript PPT1 - NHU IMBI Lab

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