C# 新手入門(2) 主控台應用程式 變數 計算 註解 輸出 輸入 轉型 字串插補

來自 | 7 月 7, 2024 | 程式 | 0 條留言

程式語言最常做的就是計算,計算的值要放的地方就稱為變數。這篇文章會介紹C#的最基本變數開始帶大家寫數字計算的程式。

什麼是變數?

先這樣理解就好,就是電腦記憶體當中,規劃一個小區域來放你的值。其實不太懂也沒關係,寫著寫著就會通了。

變數怎麼用?

int a = 1; //定義變數 並給初始值
int b = 2;
int result; //定義變數 不給初始值,這時result會是0
result = a + b; //相加後result會是 3
Console.WriteLine("result ="+ result.ToString()); //把結果印在螢幕上

這段程式我定義了一個變數a,一個變數b,然後定義了result來存放a+b的結果。

兩個斜線開頭是指註解,寫好註解對於寫程式很重要,後續會教怎寫好註解。

那我要怎麼把這段程式放到C#執行?

開啟Visual Studio 2022

ˊVisual Studio安裝完成

開啟前一回安裝的Visual Studio 2022,可以在開始找到或直接搜尋,通常我會釘選在開始工作列中。

第一次開VS會出現登入帳號,可以跳過

這邊可以跳過登入,選「暫時略過此步驟」。

開發的顏色環境選一個自己喜歡的就好,後續也可以改

開發的顏色環境選一個自己喜歡的就好,後續也可以改,然後按下「啟動Visual Studio」,前面這兩個步驟只會在第一次開VS會出現。

建立新的專案

建立新專案

主控台應用程式

搜尋主控台 → 選主控台應用程式(.NET Framwork)

建立Learning01專案

建立Learning01專案(或你可以選一個你想要的專案名字,中文也可),位置可以選一個自己喜歡的硬碟位置。

VS2022畫面說明

VS的畫面東西非常多,先記住幾個常用的

  1. 左邊方案總管是你程式碼專案的全部檔案,後續如果程式碼隨著需求越來越複雜就會拆成不同的檔案(先這樣記)。
  2. 上方有存檔+執行程式。
  3. 中間的區塊是你keyin程式碼的地方。

你會看到剛開起來的的程式碼長這樣

using System;
using System.CodeDom;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Learning01
{
    internal class Program
    {
        static void Main(string[] args)
        {
        }
    }
}

Using

using System;
using System.CodeDom;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

最開始的 using表示這程式用到的函數庫,讓程式執行時會一起載入。

Main()

static void Main(string[] args)
{
}

C#的世界這是稱為Main的方法Method(也有人稱為函數,但在物件導向稱為方法)

程式碼會從Main裡面的第一行開始執行,稱為程式進入點

開始寫程式

VS2022 程式碼手打上去

程式碼先照著打,學寫程式要自己打程式碼。

int a = 1;
int b = 2;
result = a + b;
Console.WriteLine("result = "+ result.ToString());

編譯&執行(熱鍵F5)

程式碼要執行可簡化成幾個步驟說明。

  1. 寫程式碼
  2. 編譯程式碼(把程式碼轉換成執行檔),這是編譯器的工作。
  3. 執行

新手先記得這三個步驟就好,裡面有很多細節先省略掉。

執行

執行,(會直接一閃而過),為了看清楚輸出結果,這時我們要對程式碼下中斷點。

下中斷點(Interrupt)

設定中斷點

執行

停在中斷點

程式的執行順序

程式碼是照著順序往下執行的,除非有遇到一些呼叫外部元件或者一些例外狀況。

程式碼運算的核心「=」assign (賦值)

assign

程式碼永遠都是等號左邊放結果要存的變數,右邊放算式,等號意思是assign 賦值,把右邊的計算結果存到等號左邊,幾乎所有的程式語言都是這樣做。

Example

a + b = c; //❌不能這樣寫
c = 1 + 5; //✔️可以這樣寫
c=1+5; //沒空格也OK,不過大家習慣把等號前後放空格,運算符號(+-*/)也放空格

程式碼的結尾

少打分號出現錯誤

少打分號怎麼看錯誤

C#這個程式語言多數的程式碼每一行都有分號;作為結束,如果忘記打會出現錯誤提示。

可以程式碼視窗底下可以開啟錯誤清單。

註解

C#的註解有兩種格式

  1. 單行註解,雙斜線 //我是註解
  2. 多行註解,斜線星號/*我是多行註解*/
//程式用途
//計算BMI
//公式= 體重/(身高公尺*身高公尺)
/*
程式用途
計算BMI
公式= 體重/(身高公尺*身高公尺)
*/

然後很多人會這樣打

/**********************************
**程式用途
**計算BMI
**公式= 體重/(身高公尺*身高公尺)
***********************************/

註解的功能

新手先記住幾個程式的用途

  1. 說明用途
  2. 解釋邏輯
  3. 備註還沒做的事情,稱為TODO

寫註解要避免的

  1. 翻譯程式碼(不需要)
  2. 寫誤導的註解。

變數類型

官方文件 內建類型 – C# reference | Microsoft Learn

C#的變數類型很多,新手先記住這幾個比較常用的。

  1. 整數 int
  2. 長整數 long
  3. 小數 float
  4. 更長的小數 double
  5. 字串 string
  6. 字元 char
  7. 布林值 bool (只有存True/False,可以想像成電燈開關,只有開跟關)
  8. 日期 Datetime
  9. 十進位 decimal (跟錢有關的會用這個儲存)

其餘還有各種東西像是dynamic、object、List、Tuple (我隨意舉的),不過新手先不用記太多。

運算符號(運算子)

官方參考 C# 運算子和運算式 – 列出所有 C# 運算子和運算式 – C# | Microsoft Learn

  1. +
  2. -
  3. *
  4. /
  5. 求餘數%

註:C#語言的次方是使用 Math.Pow(數字, 幾次方)

運算符號的順序與括號

先乘除後加減

假如有段程式是這樣

int result = 9 + 3 * 8; //result = 33

多數的程式語言會先乘除後加減,如果你不太確定順序的話,可以用()控制執行的順序,放在()內的程式碼會優先執行。

int result ;
result = 9 + (3 * 8) ; //result = 33
result = (9 + 3) * 8 ; //result = 96

範例1 計算圓周率

計算週長 = 2πr ,r為半徑,π為3.14,半徑=9

這邊要用到小數計算的部分,因此

float pi = 3.14f; //小數要加上f
float r = 9;      //半徑
Console.WriteLine("半徑= " + r + " 圓週長= " + (2*pi*r)); //可以透過()在輸出時直接計算

輸出為

半徑= 9 圓週長= 56.52

範例2 計算BMI

BMI =  體重(公斤) / 身高2(公尺2)

分析題目:輸入體重、身高,輸出BMI。這邊要注意的點是身高轉換為公尺時候要在數字加上f。

float high = 180f/100f; //直接轉換身高cm為公尺,要用小數進行計算要加上f,不然結果會是1
float weight = 90f;    //體重
float BMI = weight / (high*high);
Console.WriteLine("身高= " + (high*100) + "CM 體重 = " + weight +"KG BMI = "+ BMI);

輸出為

身高= 180CM 體重 = 90KG BMI = 27.77778

計算的特殊寫法

  1. i++;
  2. ++i;
  3. j--;
  4. --j;
  5. k+=數字;
  6. m-=數字;

有些老師認為這寫法不適合新手,不過真的用很多。

只有單獨一行i++或++i

i++; //或 ++i;

效果等同

i = i + 1 ;

前面加上賦值時就很不同了,老工程師很愛這樣寫,C語言時代就留下的魔法。

int p = 3;
int i = 10;
p = i++; //p = 10; i的值會先存到p,再+1
int p = 3;
int i = 10;
p = ++i; //p = 11; i的值會先+1,再存到p

+= 跟 -=

int k = 1;
k += 100; //k = k +100; => 101

int m = 1;
m -= 100; //m = m - 100; => 99

使用變數的幾個原則

  1. 使用前要先定義才能用。
  2. 開頭不能是數字,❌2retult ❌3cm 。
  3. 可以用中文命名,不過實際上打英文比較快,例如:✔️計算結果。
  4. 同一個變數定義好之後,不能中途換型態,這邊先有這個概念就好,雖然dynamic變數型態是可以動態型態的。
  5. 不同變數型態不能直接運算,要經過轉型,例如數字3不能直接加上字串ABC。
  6. 命名要有意義。
  7. 多數公司會有自己命名原則的內規,工作時盡量要遵守。
  8. 可以底線開頭。

顯示變數內容

目前我們程式模式是「主控台應用程式」(不是視窗模式或網頁模式),要在螢幕上顯示文字或變數內容相當簡單。

換行輸出

每次都會換行

Console.WriteLine("文字");

範例:

Console.WriteLine("Hello World");//螢幕上印出Hello World文字
Console.WriteLine("我愛吃燒肉");  //螢幕上印出 我愛吃燒肉
Console.WriteLine("5" + "7");    //螢幕上印出57
Console.WriteLine(5 + 7);        //螢幕上印出12
Console.WriteLine(5 + "7");      //螢幕上印出57,前面的5會被轉換為文字再與7串接

不換行輸出

Console.Write("文字");

Console.Write("Hello World");
Console.Write("我愛吃燒肉");

輸出結果為

Hello World我愛吃燒肉

跳脫字元(Escape Character)

WIKI的解釋

這邊先記住幾個常用的跳脫字元

  1. \r → 回到行首
  2. \n → 換行
  3. \r\n → 回到行首+換行,通常換行都這樣打。
  4. \t → tab縮排
  5. \\ → 輸出一個斜線 ,斜線是字串中的特殊字元,所以要輸出斜線通常要這樣寫。
  6. \” → 輸出單引號「”」在字串中,通常單引號是代表字串開始or結束,所以文字要這樣寫。

註:後來為了要跨平台,換行符號會用 Environment.NewLine 替代

範例1 換行

Console.Write("Hello\r\nWorld");

輸出

Hello
World

範例2 換行

Console.Write("*\r\n**\r\n***\r\n****");
Console.WriteLine("*\r\n**\r\n***\r\n****");

輸出

*
**
***
*****
**
***
****

這邊因為第一個Console.Write結尾沒有換行,所以第二個Console.WriteLine的第一個*輸出會接在第一行輸出的結尾。偶而面試會考這種無聊題目。

範例3 成績

 Console.WriteLine("姓名\t國文\t英文\t數學");
 Console.WriteLine("孫小美\t15\t30\t90");
 Console.WriteLine("王妃\t90\t3\t100");

輸出

C#跳脫字元應用 tab 成績

有沒有發現/t可以讓東西排整齊,它的原理其實類似縮排功能,如果要在螢幕上整齊輸出特定資訊的話才會利用這個,實際上很少使用。

讀取鍵盤輸入

C# 主控台應用程式要讓使用者自己輸入文字有三個常用的函數

  1. Console.Read(); //讀一個字 會存為ascii
  2. Console.ReadKey(); //讀一個字 會存為ConsoleKeyInfo 這個特殊類型,用於判斷按鍵。
  3. Console.ReadLine(); //讀進來會是字串

ASCII碼的說明

前兩個實際上很少用到,Console.ReadLine()。

範例1

Console.Write("請輸入姓名:");//建議冒號後面加個空格
string name = Console.ReadLine(); //直接讀到定義好的字串中
Console.WriteLine("Hello " + name);

實際執行

輸出

範例2

Console.Write("請輸入姓名:");//建議冒號後面加個空格
string name = Console.ReadLine(); //直接讀到定義好的字串中
Console.WriteLine("Hello " + name);
Console.WriteLine("按任意鍵繼續");
Console.ReadKey();

按任意鍵繼續

轉型

變數要轉換型態稱為「轉型

轉型有兩大類

  1. Parse
  2. TryParse

Parse是直接轉型,如果可以轉型的狀態下,就不會出錯,如果不能轉會導致整個程式停止執行。
TryParse是嘗試轉型,如果轉型失敗會清除原本的值。

用法如下

//Parse
int high = int.Parse("100"); //high = 100
high = int.Parse("1000"); //high = 1000
high = int.Parse("ABC"); //程式停止執行

image

//TryParse
int number = 999;
int.TryParse("300", out number);
Console.WriteLine("number = " + number);//300
int.TryParse("1000", out number);
Console.WriteLine("number = " + number);//1000
int.TryParse("abc", out number);
Console.WriteLine("number = " + number);//0      
Console.ReadKey();

輸出

C#轉型輸出

字串插補(String interpolation)

微軟官方說明

String interpolation的中文翻譯沒有很統一,插補、內插、插值,等等說法我都聽過。

用途:字串組合的一個方便的技巧,用於在$跟{}在字串中間直接插入變數或運算來組合。

範例

int.TryParse("300", out number);

//不使用String interpolation
Console.WriteLine("number = " + number);

//使用String interpolation
Console.WriteLine($"number = {number}");

這樣是不是簡潔多了?

常數變數 const

這個功能還蠻常使用的,設定一個參數做為參考值,除了可以作為固定值以外,還可以讓變數變成有意義的名稱。

const int max = 100; //設定滿分100
const int min = 0;   //設定最低分0分

if(input > max)
{
  //顯示錯誤
}
if(input < min)
{
  //顯示錯誤
}

max = 101; //錯誤,const不能重新設定

整理總結

我們這課學了

  1. 變數
  2. 運算符號
  3. 輸出
  4. 輸入
  5. 轉型
  6. 脫逸字元
  7. 字串插補

這些可以組合起來寫出不少東西了。

範例 圓周率

我們先將原本圓周率計算的改為可以從鍵盤輸出入。

const float pi = 3.14f; //這邊加上const修飾子,告訴電腦這個數字是常數

Console.Write("請輸入半徑: ");
string input = Console.ReadLine();
float r = 0;
float.TryParse(input, out r);          
Console.WriteLine($"半徑= {r}, 圓週長= {2 * pi * r}");
Console.WriteLine("計算完成! 請按任意鍵繼續");
Console.ReadKey();

C#輸出圓周率計算結果

範例 BMI

//身高輸入
Console.Write("請輸入身高: ");
string input = Console.ReadLine();
float high = 0;
float.TryParse(input, out high);
            
//體重輸入
Console.Write("請輸入體重: ");
input = Console.ReadLine(); //可以重複利用input
float weight = 0;
float.TryParse(input, out weight);

//計算BMI
high = high / 100; //轉換為公尺
float BMI = weight / (high * high);
Console.WriteLine($"身高= {high * 100}CM 體重 = {weight}KG BMI = {BMI}");

Console.WriteLine("計算完成! 請按任意鍵繼續");
Console.ReadKey();

BMI計算

範例 變數swap

這是一個蠻經典的題目,面試時常出現。做法是建立一個暫存變數再進行交換。

//a b 變數交換
int a = 99;
int b = -1;
int temp; //暫存
Console.WriteLine( $"交換前 a = {a}  B={b}");

temp = a; // temp = 99
a = b;    // a = -1
b = temp; // b = 99
Console.WriteLine( $"交換後 a = {a}  B={b}");

0 條留言

提交留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *