430 likes | 556 Views
實值變數與運算式. 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所. 示範程式 UsingVariable 重要片段. char aChar = 'a'; Console.WriteLine(aChar); int anInt = 123; Console.WriteLine(anInt); double aDouble; aDouble = 123.456; Console.WriteLine(aDouble); bool aTrueValue = true ; Console.WriteLine(aTrueValue);.
E N D
實值變數與運算式 鄭士康 國立台灣大學 電機工程學系/電信工程研究所/ 資訊網路與多媒體研究所
示範程式UsingVariable重要片段 char aChar = 'a'; Console.WriteLine(aChar); int anInt = 123; Console.WriteLine(anInt); double aDouble; aDouble = 123.456; Console.WriteLine(aDouble); bool aTrueValue = true; Console.WriteLine(aTrueValue);
主記憶系統概念 *J. G. Brookshear, Computer Science – An Overview, 8th edition, Addison-Wesley, 2005
使用變數 • 變數宣告與地址觀念 • 變數命名 • 命名規定與關鍵字 • 維護考量 • 軟體紀律 • 匈牙利命名法 • 設值 (Assignment) 與初始化 (Initialization) • 型別相容
示範程式UsingNumeric重要片段 int x = 256; Console.WriteLine("x : " + x); byte y = 255; Console.WriteLine("y : " + y); double z = 123.45; Console.WriteLine("z : " + z); float f = 123.45f; Console.WriteLine("f : " + f); decimal d = 123.45m; Console.WriteLine("d : " + d);
整數型別 • sbyte: -128 ~ 127 • byte: 0 ~ 255 • short: -32768 ~ 32767 • unshort: 0 ~ 65535 • int: -2147483648 ~ 2147483647 • uint: 0 ~ 4294967295 • long: -9223372036854775808 ~ 9223372036854775807 • ulong: 0 ~ 18446744073709551615 • char: U+0000 ~ U+ffff
浮點數型別 • float: 7 位精確度, 正負1.5e-45 ~ 3.4e38, 32 位元 • double: 15~16位精確度, 正負5.0e-324 ~ 1.7e308, 64 位元 0
decimal 型別 • 28 ~ 29 位小數, 正負1.0e-28 ~ 7.9e28,128 位元
示範程式UsingChar重要片段 char c1 = 'a'; char c2 = '文'; char c3 = '\x0059'; char c4 = '\u0058'; char c5 = '\n'; char c6 = '\'';
字元表示 • ASCII vs. Unicode • 十六進位與Unicode表示法 • 逸散字元( Escaped character ) • ‘\a’:警示(alarm) • ‘\b’:退格(backspace) • ‘\’’: 單引號(apostrophe) • ‘\\’: 倒斜線(backslash) • ‘\t’:水平定位(tab) • ‘\n’:換行(next line)
字串與字元 string s1 = “abc”; string s2 = “a”; char c = ‘a’;
Heap 堆疊(Stack)與堆積(Heap) . . . Stack
實值型別儲存方式 堆疊(Stack) int x = 100; 100 x
參考型別儲存方式 堆積(Heap) 堆疊(Stack) string x = “abc”; ‘a’ 參考 x ‘b’ ‘c’
練習 • 撰寫一程式,宣告與設定數個變數,並予輸出。
示範程式Conversion重要片段 int a = 10; double b = 0; b = a; b = 20.5; a = (int)b; float c = 20; c = 20.5f; c = (float)20.5; char d = (char)65;
變數設值與型別轉換 • 變數設值 (Assignment) • 隱含轉換 (Implicit conversion) • 強制轉換 (Explicit conversion)
型別轉換錯誤三例 • 例1 byte bValue = 254; bValue = bValue*2; • 例2 byte bValue; int aa = 0; bValue = aa + 0; • 例3 float f = 0; f = 0.1 + 0.1;
示範程式UsingMathOperator重要片段 Console.WriteLine("請輸入第一個整數值x :"); int x = int.Parse(Console.ReadLine()); Console.WriteLine("請輸入第二個整數值y :"); int y = int.Parse(Console.ReadLine()); Console.WriteLine(" x + y = {0} ", x + y); Console.WriteLine(" x - y = {0} ", x - y); Console.WriteLine(" x * y = {0} ", x * y); Console.WriteLine(" x / y = {0} ", x / y); Console.WriteLine(" x % y = {0} ", x % y);
設值與算術運算 • 運算元(Operand)與運算子(Operator) • 設值運算子(Assignment) • 算術運算子 • 加、減、乘、除 • 模數 • 括弧使用與計算順序
示範程式UsingMathFunctions重要片段 Console.WriteLine("Sqrt(2) = " + Math.Sqrt(2.0)); Console.WriteLine("PI = " + Math.PI); Console.WriteLine("Sin(PI/6.0) = " + Math.Sin(Math.PI / 6.0)); Console.WriteLine("Pow(2.0, 0.5) = " + Math.Pow(2.0, 0.5)); Console.WriteLine("Exp(1) = " + Math.Exp(1.0)); Console.WriteLine("ln(e) = " + Math.Log(Math.E)); Console.WriteLine("log10(100) = " + Math.Log10(100.0));
練習 • 撰寫一程式,宣告變數,以算式與數學函式設值,並予輸出。
示範程式UsingConstant重要片段 int anInt = 123; const int A_CONST = 456; anInt = 321;
使用常數 • 常數設定 • 常數特性 • 常數與程式維護
示範程式UsingInDeOperator重要片段 Console.WriteLine("請輸入整數變數x初值"); int x0 = int.Parse(Console.ReadLine()); Console.WriteLine("請輸入所要加總的整數值add"); int add = int.Parse(Console.ReadLine()); int x = x0; x = x + add; x = x0; x += add; int post; x = x0; post = x++; int pre; x = x0; pre = ++x;
遞增遞減運算子 • 運算子 +=、-=、*=、/-、%= • 運算子++、-- • 前置運算子(prefix) result = ++x; • 後置運算子(postfix) result = x++;
練習 利用偵錯器觀察遞增遞減算式的作用
示範程式UsingLB重要片段 bool x = 7 > 3; bool y = 2 < 0; bool xORy = x | y; bool xANDy = x & y; bool xOy = (x & y) | (x | y); bool xNy = (x & y) & (x | y);
布林型別與算式 • 邏輯敘述, 流程控制, Debug.Assert() • x > 1 • true/false, 不可寫為數值如1或 0 • 關連算式 • 布林算式
Short-Circuit 邏輯運算 • && 與 || • 範例 • x && y • x || y • (x & y) || (x | y) • (x & y) && (x | y)
字串物件比較 string first = “one”; string second = “One”; string third = “one”; Console.WriteLine( first == second ); Console.WriteLine( first == third ); Console.WriteLine( first != second ); Console.WriteLine( first != third );
if 流程 grade < 60 false true grade = 60
示範程式UsingSimpleIf重要片段 Console.Write( "請輸入一個小於100的整數原始成績: "); int grade = int.Parse(Console.ReadLine()); // 調分公式 if (grade < 60) { grade = 60; } Console.WriteLine("調分後成績: " + grade);
if-else 流程 grade < 60 true false result = grade result = 60
示範程式UsingTerOp重要片段 Console.Write( "請輸入一個小於100的整數原始成績: "); int grade = int.Parse(Console.ReadLine()); int result = grade < 60 ? 60 : grade; // 調分公式 Console.WriteLine("調分後成績: " + result);
運算子優先順序 • 算術運算優先順序 • 一元遞增遞減運算子 • 正負號 • 四則運算與模數計算 • 關連運算子 • 邏輯運算子 !, &, ^, |, &&, || • 三元運算子 • 設定 =,*=,/=,%=,+=,-=,&=,^=,|= • 使用括弧改變順序
練習 • 撰寫程式混合運用學過的運算式與if或三元算符敘述,添加註解說明程式目的、作者、時間、關鍵算式
示範程式UsingEnum重要片段(1/2) enum WeekDay { SUN = 1, MON = 2, TUE = 3, WED = 4, THU = 5, FRI = 6, SAT = 7 }
示範程式UsingEnum重要片段(2/2) WeekDay day = WeekDay.TUE; switch (day) { case WeekDay.SUN: Console.WriteLine("星期日為一週的第{0}天!!", (int)WeekDay.SUN); break; case WeekDay.TUE: Console.WriteLine("星期二為一週的第{0}天!!", (int)WeekDay.TUE); break; default: Console.WriteLine("一週的第{0}天!!", (int)day); break; }
列舉型別 (Enumeration) • 組織整數常數與程式維護 • 省略數值指定 • 應用列舉型別
練習 • 宣告並測試列舉型別Season,其中包括常數Spring、Summer、Fall、Winter