<!-- 使用 C# 撰寫您的第一個程式碼 (開始使用 C#,第 1 部分) --> ### Q:Console.Write 和 Console.WriteLine 之間有何差異? 1.Console.WriteLine會在新的一行上列印輸出。 =>不正確。 Console.WriteLine 會在**現有行上**列印輸出,**並在該行之後附加新的一行**。 2.Console.WriteLine 會在輸出之後附加新的一行。 =>正確! Console.WriteLine 會在現有行上列印輸出,並在該行之後附加新的一行。 **Console.Write 不會換行 Console.WriteLine 會換行** ### 什麼是編譯? 稱為編譯器的特殊程式,會將您的原始程式碼轉換成電腦的中央處理器 (CPU) 可以執行的不同格式。 ### 資料型別: * string 代表要呈現而非計算的單字、片語或任何英數資料 * 其中string.Empty欄位,代表來測試字串是否為 null,是利用IsNullOrEmpty 是一種方便的方法。 * * char 代表單一英數字元 * decimal 代表具有小數部分的數字 * bool 代表 true/false 值 ### 常值: 常值(是硬式編碼的值)又分常數(硬式編碼值是常數且在整個程式執行過程中未變更的值。)與變數(使用非硬式編碼的資料=>宣告變數,用來儲存數值型別的容器。) 建立新的變數,您必須先宣告變數的資料類型,然後為它命名 => string firstName; 變數名稱是編譯器指派給記憶體位址的易記標籤。 **資料類型的變數宣告範例:** * char userOption; * int gameScore; * decimal particlesPerMillion; * bool processedCustomer; * var message = "Hello world!"; 在此範例中,字串變數的建立會使用 var 關鍵字,而不是 string 關鍵字。 var 關鍵字會告知 C# 編譯器,指派的值會暗示資料類型。 暗示類型後,變數的行為會好像已經使用實際的資料類型來宣告它一樣。 類型很冗長或內容中的類型很明顯時,var 關鍵字可用於節省按鍵輸入的次數。 Q:將下列值儲存在變數中: Bob 3 34.4 錯誤寫法: ``` Console.Write("Hello,"); string firstName; firstName = "Bob"; Console.Write(firstName); Console.Write("! "); Console.Write("You have"+" "+3+" "+"messages in your inbox."); Console.Write(" "+"The temperature is "); Console.Write("34.4"+" "+"celsius"); ``` 正確寫法: ``` string name = "Bob"; int messages = 3; decimal temperature = 34.4m; Console.Write("Hello, "); Console.Write(name); Console.Write("! You have "); Console.Write(messages); Console.Write(" messages in your inbox. The temperature is "); Console.Write(temperature); Console.Write(" celsius."); ``` 類型為 string 的變數來存放名稱 "Bob"。 類型為 int 的變數來儲存訊息數目。 類型為 decimal、float 或 double 的變數來儲存溫度。 **測驗錯誤紀錄** 這行程式碼有什麼問題:var message; 1.var 不是資料類型。 =>不正確。 var 不是資料類型,但這不是此程式碼的問題。 2.使用 var 關鍵字而不初始化變數 正確! var 資料類型必須具有初始化的值。 ### \逸出字元序列 **\n 序列會新增一行,而 \t 序列會新增定位字元。** `Console.WriteLine("Hello \"World\"!"); =>Hello "World"!` 若要顯示檔案路徑=>`Console.WriteLine("c:\\source\\repos");`即可輸出`c:\source\repos` 逐字字串常值將會保留所有空白與字元,您不需要逸出反斜線。 若要建立逐字字串,請在常值字串前面使用 @ 指示詞。 **程式碼精簡化做法:** 字串插補:會透過使用「範本」與一或多個「插補運算式」將多個值合併為單一常值字串。 透過$與{},常值字串具有前置 $ 字元時,其會變成範本。 ``` string firstName = "Bob"; string greeting = "Hello"; // string message = greeting + " " + firstName + "!"; string message =$"{greeting} {firstName}!"; //若沒有加$只會印出{greeting} {firstName}! Console.WriteLine(message); ``` 更精簡版: 將以下兩行改寫成一行 ``` string message =$"{greeting} {firstName}!"; Console.WriteLine(message); =>Console.WriteLine($"{greeting} {firstName}!"); =>Hello Bob! ``` <!-- -------------------------------------------------------------------------- --> 若要出現以下結果: View English output: c:\Exercise\ACME\data.txt Посмотреть русский вывод: c:\Exercise\ACME\ru-RU\data.txt Code: ``` string projectName = "ACME"; //代表英文 string englishLocation = $@"c:\Exercise\{projectName}\data.txt"; Console.WriteLine($"View English output:\n\t\t{englishLocation}\n"); ``` //利用$將這串變成範本,利用\n增加一行並且\t\t多兩個字元的位置,{存放要放置的位置} //代表俄文 ``` string russianMessage = "\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u0432\u044b\u0432\u043e\u0434"; string russianLocation = $@"c:\Exercise\{projectName}\ru-RU\data.txt"; Console.WriteLine($"{russianMessage}:\n\t\t{russianLocation}\n"); ``` **在 C# 中執行基本字串格式設定單元測試錯誤** Q: Unicode 字元內嵌在 C# 字串中,讓主控台應用程式以泰文呈現問候訊息。 不過,訊息只會顯示為問號字元。 可能的原因為何? 1.您缺少代表 Unicode 字元的 \u 逸出序列。 不正確。 如果未使用 Unicode 字元的 \u 逸出序列,則只會顯示數字,不會顯示問號。 2.使用者的主控台不支援 Unicode 字元。 正確。正確! ## 針對 C# 中的數字執行基本作業 **基本數學運算:** * 除法 / int quotient = 7 / 5; =>1 因為是整數而無法取得小數點 若要取得小數點,應要decimal // int quotient = 7 / 5; ``` decimal decimalQuotient = 7.0m / 5; Console.WriteLine("Quotient: " + decimalQuotient); ``` 另一種印出寫法 `Console.WriteLine($"Decimal quotient: {decimalQuotient}");` *decimal decimalQuotient = 7 / 5;* 可以執行結果為1,但並非正確答案 若要將兩個int類型的變數相除,但又不想截斷結果,可以利用資料轉換方式 轉換 (Cast) 是一種資料轉換 (Conversion),它會指示編譯器暫時將某個值視為不同的資料類型。 ``` int first = 7; int second = 5; decimal quotient = (decimal)first / (decimal)second; ``` //在整數first前()想轉換的資料類型 `Console.WriteLine(quotient); =>1.4` **int整除可以有餘數的運算子 => %** ### C# 會遵循與 PEMDAS 相同的順序 何謂PEMDAS,是數學中可以協助學生記住運算順序的縮寫 1. Parentheses (括弧) (必須先執行括弧內的內容) 1. Exponents (指數) 1. Multiplication (乘法) 與 Division (除法) (由左至右) 1. Addition (加法) 與 Subtraction (減法) (由左至右) 遞增與遞減: ``` int value = 0; // value is now 0. value = value + 5; // value is now 5. value += 5; // value is now 10. int value = 0; // value is now 0. value = value + 1; // value is now 1. value++; // value is now 2. int value = 1; value = value + 1; Console.WriteLine("First increment: " + value); =>2 value += 1; Console.WriteLine("Second increment: " + value); =>3 value++; Console.WriteLine("Third increment: " + value); =>4 value = value - 1; Console.WriteLine("First decrement: " + value); =>3 value -= 1; Console.WriteLine("Second decrement: " + value); =>2 value--; Console.WriteLine("Third decrement: " + value); =>1 **int value = 1; value++; Console.WriteLine("First: " + value); =>1 Console.WriteLine($"Second: {value++}"); =>2 Console.WriteLine("Third: " + value); =>3 Console.WriteLine("Fourth: " + (++value)); =>4** ``` 華氏轉換為攝氏 結果要顯示:The temperature is 34.444444444444444444444444447 Celsius. ``` int fahrenheit = 94; decimal celsius = (fahrenheit - 32m) * (5m / 9m); ``` //只要寫到32m就可以得出結果 `Console.WriteLine("The temperature is " + celsius + " Celsius.");` #### 針對 C# 中的數字執行基本作業測驗錯誤 1. 下列哪一行程式碼無法輸出文字 Windows 11? Console.WriteLine("Windows " + 7 + 4); => Windows74 Console.Write("Windows " + 1 + 1); =>會11串聯到字串並顯示Windows11 2. int result = 3 + 1 * 5 / 2; =>5