第二章 資料型別與主控台應用程式輸出入 資訊教育研究室 編著 注意: 本投影片僅供上課使用,非經同意,請勿散播或轉載。
章節大綱 2.1 程式的構成要素 2.4 運算子與運算式 2.2 常值與變數 2.5 主控台應用程式輸出入方法 2.3 如何宣告變數的資料型別 2.6 Escape sequence 控制字元 備註:可依進度點選小節
2.1 程式的構成要素 2.1.1 識別項 每個人一出生都需要取個名字來加以識別 在程式中所使用的變數、陣列、結構、函式、類別、 介面和列舉型別等,也都需賦予名稱,以方便在程式 中識別 名稱命名都需遵行識別項的命名規則。
識別項的命名規則: 第一個字元需 Unicode 的大小寫字母、底線 _ 字元 或中文字開頭,接在後面的字元可以是字母、數字 或底線 _ 或中文字。中間不允許有空白出現。 合法識別項:_pagecount、Part9、僑大_Number 無效識別項:101Metro(數字開頭),M WR(空白字元) 關鍵字是不允許當作識別項,關鍵字前加前置字元@ 可當識別項。 如 if 為關鍵字, @if 當識別項。 大小寫視為不同 如 tobe 和 ToBe 視為不同。
2.1.3 關鍵字 (KeyWord) 所謂「關鍵字」或稱保留字(Reserve Word),是對編譯器有特殊意義而預先定義的保留識別項。 在撰寫 VC# 2010 程式時,若陳述式中有些字串以藍色字顯現,表示這些識別項就是 VC# 2010的關鍵字。
2.1.2 陳述式 (Statement) 程式(program) 由一行一行的陳述式所構成。 陳述式或稱敘述是高階語言所撰寫程式中最小可執行單位。 VC# 2010中每行敘述結尾是以「;」分號做區分 允許將多行敘述寫成一行,中間使用分號隔開即可,但為使程式方便閱讀建議不宜使用。 Console.WriteLine(“Hello”) ; Console.Read() ; Console.WriteLine(“Hello”) ; Console.Read() ;
2.2 常數與變數 電腦主要是用來處理資料。 依程式執行時資料是否具有變動性,將資料分成 常數(Constant) 變數(Variable) 例如:X = Y + 10 ; 10 是常數:記憶體儲存10的位址,其內容固定無法改變 X、Y 是變數: 儲存 X 和 Y 的位址,內容是可改變。
2.2.1 常數 (Constant) 常數是程式執行過程中其值是固定無法改變。 將常數細分成: 常值常數 (Literal Constant) 程式中直接以特定值的文數字型態存在於程式碼中 稱為「常值常數」。 15、”Price” 符號常數 (Symbolic Constant)
一、常值常數 程式中直接以特定值的文字、數字型態,存在於程式碼中稱為「常值常數」。 C# 允許使用的常值常數型別有:
二. 符號常數 符號常數是以有意義名稱,來取代程式中不會改變的 數字或字串。 例如:圓周率為3.1416,可用PI符號常數代表 符號常數在程式中經宣告後,應用程式執行過程中維持不變的值,無法修改或指派新的值。 符號常數是用 const 關鍵字及運算式來宣告並設定初值。
符號常數宣告方式:
舉例說明: const int DaysInYear=365; const double PI=3.1416; (圓面積 Area = PI*R2) const string SchoolName=“僑先部" ; 多個符號常數一起宣告 const int four = 4, five=5;
2.2.2 變數 (Variable) 一個變數代表一個特定資料項目或值,並在記憶體預留一個位置(位址)來儲存該資料內容。 程式執行時碰到變數,會到該變數位址,取出該值加以運算。 使用變數前必須先宣告 變數和常數不一樣,程式執行過程中常數的值是固定不變,而變數允許重複指定不同的值。
變數的種類
2.3 如何宣告變數的資料型別 程式中使用的變數,必須事先經過宣告 經宣告過變數,可知道該資料的資料型別 程式在編譯時,便可保留適當的記憶體空間給該資料使用。 宣告變數的資料型別,語法: 資料型別 變數名稱 ; int X ;(宣告X是整數變數)
VC# 2010允許使用下表的資料型別來宣告變數: 有符號 (signed) 無符號 (unsigned)
string a=“NUPS” ;
宣告變數時能在同一行敘述中同時宣告多個變數, 各變數間使用逗號隔開。 如:同時宣告 a 和 b 是整數變數。寫法: int a , b ; 宣告變數時亦允許同時對變數初始化(設定初值), 寫法: 資料型別 變數名稱1=初值1, 變數名稱2=初值2, …;
[例1] 宣告 a 是一個整數變數且初值為10。寫法: int a=10; [例2] 宣告 a 是一個整數變數且初值為10; 宣告 b 為布林變數且初值為 false。寫法: int a =10 ; bool b =false; [例3] 宣告 a, b, c 是倍精確度變數,初值依序1.1, 2.2, 3.3 寫法: double a=1.1, b=2.2, c=3.3;
結論 變數宣告 Double Pi = 3.1416; 常數宣告 Const Double Pi = 3.1416;
Take a Break ….
2.4 運算子與運算式 2.4.1 運算子(Operator) 與運算元(Operand) 運算子是指運算的符號 如四則運算的+、-、×、÷、…。 運算式(Expression):就是由運算子和運算元組合而成的。 例如: price * 0.05 (*為乘法運算子,price及0.05為運算元)
若運算子按照特性分類分成六大類: 算術運算子 指定(複合)運算子 關係運算子 邏輯運算子 合併運算子 移位運算子
2.4.2 算術運算子
2.4.3 關係運算子 經過比較後得到 true(真) 或 false(假)。 false true
2.4.4 邏輯運算子 一個關係運算式就是一個條件。 當有多個關係式要一起判斷時需用到邏輯運算子來連結。 VC# 2010所提供的邏輯運算子如下: and 邏輯運算子(且; A/B全部 true, 才是 true) 1 1 1 假設score=65 false 例 70 < score 79 條件式: (score > 70) && (score<=79);
or 邏輯運算子(或; A/B一個 true, 就是 true) [例] score<0 或score 100 條件式寫法: (score<0) || (score>=100) 1 1 1 假設score = -50 true
3. xor邏輯運算子 (互斥; A/B相同是 false, 不同是true) 1 1 1 4. not 邏輯運算子 1 1
2.4.6 合併運算子 + 符號除可當加法運算子外,也可用來合併字串。 若 + 運算子前後的運算元都是 數值資料 ,會視為加法運算處理,其結果為數值。 字串資料,視為合併運算子,將兩個運算元前後合併 成一個字串。 例如: int a ; //宣告整數變數 string myStr ; //宣告字串變數 a = 20 + 30 ; //加法運算 myStr = “To be ” + “Or Not to be”; //合併運算 (結果:a = 50 / myStr=“To be Or Not to be”)
千 百 十 個 103 102 101 100 2468 =2*103 + 4*102 + 6*101 + 8*100 十進位運算 千 百 十 個 23 22 21 20 1010 =1*23 + 0*22 + 1*21 + 0*20 (10) 人的手指、腳指各十隻。 電腦數位系統0及1(沒電/有電)。 二進位運算
十進位 二進位 二進位轉成十進位 十進位 1 1 1*20 2 10 1*21 + 0*20 3 11 1*21 + 1*20 4 100 1 1 1*20 2 10 1*21 + 0*20 3 11 1*21 + 1*20 4 100 1*22 + 0*21 + 0*20 5 101 1*22 + 0*21 + 1*20 6 110 1*22 + 1*21 + 0*20 7 111 1*22 + 1*21 + 1*20 8 1000 1*23 + 0*22 + 0*21 + 0*20 9 1001 1*23 + 0*22 + 0*21 + 1*20 10 1010 1*23 + 0*22 + 1*21 + 0*20 十進位 11 91 12 92 13 93 14 94 15 95 16 96 17 97 18 98 19 99 20 100
大學重要計概考題 & 0 1 0 ---------- 0 0 0 | 0 1 0 ---------- 1 1 1 ^ 0 1 1 5&2=? 5|2=? 5 ^ 3=? 5>>1=? 5<<1=? 邏輯運算:and(&)、or (|)、xor(^) 移位運算: >>(右移)、<< (左移) 0 1 0 1 & 0 1 0 ---------- 0 0 0 1 0 1 | 0 1 0 ---------- 1 1 1 1 0 1 ^ 0 1 1 ---------- 1 1 0 7 6 7 1*22 + 1*21 + 1*20
2.4.5 指定運算子 1 0 1 ^ 0 1 0 ---------- 1 1 1 7 1*22 + 1*21 + 1*20
1 0 1 & 0 1 0 ---------- 0 0 0 1 0 1 | 0 1 0 ---------- 1 1 1
2.4.7 移位運算子 移位運算子用在數值資料。 對二進制正整數或帶小數整數。 該數值往左移一個位元,即將該數值乘2。 若往右移一個位元,即該數值除以2。 可用移位運算子: << :左移運算子 >> :右移運算子
移位運算子-例子 10 >> 1 = ? 10 << 2 = ? 1010 = 10102 1010 = 10102 1012 = 510 (右移一位) 10 << 2 = ? 1010 = 10102 1010002 = 4010 (左移兩位) 101 1*22 + 0*21 +1*20 101000 1*25 + 0*24 +1*23 + 0*22 + 0*21 + 0*20
大學重要計概考題 1 0 1 1 0 1 0 1 1 0 1 0 5&2=? 5|2=? 5 ^ 3=? 5>>1=? 5<<1=? 邏輯運算:and(&)、or (|)、xor(^) 移位運算: >>(右移)、<< (左移) 1 0 1 1 0 2 10 1*23 + 0*22 +1*21 + 0*20 10 1 0 1 1 0 1 0
如何寫程式作運算-例子 & 0 1 1 ---------- 0 0 1 1 0 1 & 0 1 1 ---------- 0 0 1 如何寫程式作運算-例子 int a=5, b=3; Console.WriteLine(a & b); Console.WriteLine(5 ^ 3); Console.WriteLine(a << 2); Console.WriteLine(20 >> 1); Console.Read(); 6 1*22 + 1*21 + 0*20 1 0 1 ^ 0 1 1 ---------- 1 1 0 1 6 20 1 0 1 0 0 10 1 0 1 0
The End
大學重要計概考題 & 0 1 0 ---------- 0 0 0 | 0 1 0 ---------- 1 1 1 ^ 0 1 1 5&2=? 5|2=? 5 ^ 3=? 5>>1=? 5<<1=? 邏輯運算:and(&)、or (|)、xor(^) 移位運算: >>(右移)、<< (左移) 0 1 0 1 & 0 1 0 ---------- 0 0 0 1 0 1 | 0 1 0 ---------- 1 1 1 1 0 1 ^ 0 1 1 ---------- 1 1 0 7 6 7 1*22 + 1*21 + 1*20 1 0 1 1 0 2 10 1*23 + 0*20 +1*22 + 0*20 10 1 0 1 1 0 1 0
2.4.8 運算子優先順序和順序關聯性 如運算式 x + y * z 的評估方式是 x + (y * z) 因為 * 運算子的運算次序比 + 運算子高。 一般原則:先乘除,後加減;由左至右
下表由高至低列出各運算子優先執行順序;同列內運算子 具有相同優先順序,且依表中第三欄指定方向進行運算: 下表由高至低列出各運算子優先執行順序;同列內運算子 具有相同優先順序,且依表中第三欄指定方向進行運算:
The End
2.5 主控台應用程式輸出入方法 Console是系統命名空間(NameSpace)內所定義的類別(Class)之一。 如: Read 或 ReadLine 方法提供由鍵盤輸入字元。 Write 或 WriteLine 方法將資料顯示在螢幕上。
2.5.1 Write / WriteLine 方法 一. Console.Write() 方法 顯示:光陰的故事_
如果輸出的字串中間要插入指定的變數或 運算式的內容。 譬如:假設單價price整數變數值為120, 數量為常數常值50,欲在目前游標處顯示 “單價:120 數量:50” 寫法:
寫出輸出結果如下的程式碼
二. Console.WriteLine() 方法
2.5.2 Read / ReadLine 方法 一. Console.Read() 方法 從標準輸入裝置(鍵盤)讀取一個字元, 不等待按 鍵便直接讀取。 使用時機是當需按任意鍵繼續時或只允許 需輸入一個字元時使用。 可將輸入字元放入 char 資料型別所宣告 字元變數。
二. Console.ReadLine() 方法 從標準輸入裝置(鍵盤)讀取一整行字元, 一直到按 鍵為止。 使用時機是當需要輸入字串時用,可將輸入 字串放入 string 資料型別宣告的字串變數。 Console.ReadLine() 方法傳入的資料是屬string 型別,若使用 ConsoleReadLine()方法將傳入 的字串資料指定給整數變數時,需用 int.Parse() 或 Convert.ToInt32()方法將字串轉成整數。 int.Parse()-將字串轉成整數integer資料(參考附錄A-5) Convert.ToInt32-將字串轉成32位元整數(參考Page2-8)
本週作業(Page 2-22~23)
FileName : readline1.sln 05 static void Main(string[] args) 06 { 07 string str1; 08 int price, qty; 09 Console.WriteLine(); 10 Console.WriteLine(" 博碩電腦圖書廣場"); 11 Console.WriteLine("======================"); 12 Console.Write(" 1. 書名:"); 13 str1 = Console.ReadLine(); // 輸入書名並指定給str1變數 14 Console.Write(" 2. 售價:"); 16 price = int.Parse(Console.ReadLine()); // 售價轉成整數,再指定給price 17 Console.Write(" 3. 數量:"); 19 qty = Convert.ToInt32(Console.ReadLine()); // 數量轉成整數,指定給qty 20 Console.WriteLine("======================"); 21 Console.WriteLine(" 4. 金額:{0}", price * qty); 22 Console.Read(); 23 }
2.6 Escape sequence 控制字元 在 C# 中若欲印出「’」單引號、「”」雙引號 或「\」倒斜線等符號,需用逸出序列來達成。 當編譯器遇到這些逸出字元時,將使得接在 倒斜線字元 (\) 後的字元,被當成某種特殊 意義的符號來處理。
[簡例] Console. WriteLine("\"烏龍派出所\"");. //印出 "烏龍派出所" Console [簡例] Console.WriteLine("\"烏龍派出所\""); //印出 "烏龍派出所" Console.WriteLine("Jack\'s Wang"); //印出 Jack's Wang Console.WriteLine("Why 1\\2"); // Why 1\2
作業 練習把readline1程式,略作修改後(參考Page 2-22~23),儲存成學號,最後壓縮,並E-mail至jllioutw@hotmail.com Mail主旨(主題 ,Subject):學號
The End