---
# System prepended metadata

title: 開始使用 C#----CH01

---



<!--  使用 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