Views: 26
程式語言最常做的就是計算,計算的值要放的地方就稱為變數。這篇文章會介紹C#的最基本變數開始帶大家寫數字計算的程式。
什麼是變數?
先這樣理解,電腦記憶體當中,規劃一個小區域來放你的值。
(其實不太懂也沒關係,寫著寫著就會通了)。
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 2022,可以在開始找到或直接搜尋,通常我會釘選在開始工作列中。
這邊可以跳過登入,選「暫時略過此步驟」。
開發的顏色環境選一個自己喜歡的就好,後續也可以改,然後按下「啟動Visual Studio」,前面這兩個步驟只會在第一次開VS會出現。
建立新的專案
搜尋主控台 → 選主控台應用程式(.NET Framwork)
建立Learning01專案(或你可以選一個你想要的專案名字,中文也可),位置可以選一個自己喜歡的硬碟位置。
Visual Studio 的畫面東西非常多,先記住幾個常用的
- 左邊方案總管是你程式碼專案的全部檔案,後續如果程式碼隨著需求越來越複雜就會拆成不同的檔案(先這樣記)。
- 上方有存檔+執行程式。
- 中間的區塊是你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裡面的第一行開始執行,稱為程式進入點
開始寫程式
程式碼先照著打,學寫程式要自己打程式碼。
int a = 1;
int b = 2;
int result = a + b;
Console.WriteLine("result = "+ result.ToString());
編譯&執行(熱鍵F5
)
程式碼要執行可簡化成幾個步驟說明。
- 寫程式碼
- 編譯程式碼(把程式碼轉換成執行檔),這是編譯器的工作。
- 執行
新手先記得這三個步驟就好,裡面有很多細節先省略掉。
執行,(會直接一閃而過),為了看清楚輸出結果,這時我們要對程式碼下中斷點。
下中斷點(Interrupt)
程式的執行順序
程式碼是照著順序往下執行的,除非有遇到一些呼叫外部元件或者一些例外狀況。
程式碼運算的核心「=」assign (賦值)
程式碼永遠都是等號左邊放結果要存的變數,右邊放算式,
等號意思是assign 賦值,把右邊的計算結果存到等號左邊,幾乎所有的程式語言都是這樣做。
Example
a + b = c; //❌不能這樣寫
c = 1 + 5; //✔️可以這樣寫
c=1+5; //沒空格也OK,不過大家習慣把等號前後放空格,運算符號(+-*/)前後的部分也放空格
程式碼的結尾
C#這個程式語言多數的程式碼每一行都有分號;作為結束,如果忘記打會出現錯誤提示。
可以程式碼視窗底下可以開啟錯誤清單。
註解
C#的註解有兩種格式
- 單行註解,雙斜線 //我是註解
- 多行註解,斜線星號/*我是多行註解*/
//程式用途
//計算BMI
//公式= 體重/(身高公尺*身高公尺)
/*
程式用途
計算BMI
公式= 體重/(身高公尺*身高公尺)
*/
然後很多人會這樣打
/**********************************
**程式用途
**計算BMI
**公式= 體重/(身高公尺*身高公尺)
***********************************/
註解的功能
新手先記住幾個程式的用途
- 說明用途
- 解釋邏輯
- 備註還沒做的事情,稱為TODO
寫註解要避免的
- 翻譯程式碼(不需要)
- 寫誤導的註解。
變數類型
官方文件 內建類型 – C# reference | Microsoft Learn
C#的變數類型很多,新手先記住這幾個比較常用的。
- 整數
int
- 長整數
long
- 小數
float
- 更長的小數
double
- 字串
string
- 字元
char
- 布林值 bool (只有存True/False,可以想像成電燈開關,只有開跟關)
- 日期
Datetime
- 十進位 decimal (跟錢有關的會用這個儲存)
其餘還有各種東西像是dynamic、object、List、Tuple (我隨意舉的),不過新手先不用記太多。
運算符號(運算子)
官方參考 C# 運算子和運算式 – 列出所有 C# 運算子和運算式 – C# | Microsoft Learn
- 加
+
- 減
-
- 乘
*
- 除
/
- 求餘數%
註: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
計算的特殊寫法
i++;
++i;
j--;
--j;
k+=數字;
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
使用變數的幾個原則
- 使用前要先定義才能用。
- 開頭不能是數字,❌2retult ❌3cm 。
- 可以用中文命名,不過實際上打英文比較快,例如:✔️計算結果。
- 同一個變數定義好之後,不能中途換型態,這邊先有這個概念就好,雖然
dynamic
變數型態是可以動態型態的。 - 不同變數型態不能直接運算,要經過轉型,例如數字3不能直接加上字串ABC。
- 命名要有意義。
- 多數公司會有自己命名原則的內規,工作時盡量要遵守。
- 可以底線開頭。
顯示變數內容
目前我們程式模式是「主控台應用程式」(不是視窗模式或網頁模式),要在螢幕上顯示文字或變數內容相當簡單。
換行輸出
每次都會換行
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)
這邊先記住幾個常用的跳脫字元
- \r → 回到行首
- \n → 換行
- \r\n → 回到行首+換行,通常換行都這樣打。
- \t → tab縮排
- \\ → 輸出一個斜線 ,斜線是字串中的特殊字元,所以要輸出斜線通常要這樣寫。
- \” → 輸出單引號「”」在字串中,通常單引號是代表字串開始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");
輸出
有沒有發現/t可以讓東西排整齊,它的原理其實類似縮排功能,如果要在螢幕上整齊輸出特定資訊的話才會利用這個,實際上很少使用。
讀取鍵盤輸入
C# 主控台應用程式要讓使用者自己輸入文字有三個常用的函數
- Console.Read(); //讀一個字 會存為ascii
- Console.ReadKey(); //讀一個字 會存為ConsoleKeyInfo 這個特殊類型,用於判斷按鍵。
- Console.ReadLine(); //讀進來會是字串
前兩個實際上很少用到,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();
轉型
變數要轉換型態稱為「轉型」
轉型有兩大類
- Parse
- TryParse
Parse是直接轉型,如果可以轉型的狀態下,就不會出錯,如果不能轉會導致整個程式停止執行。
TryParse是嘗試轉型,如果轉型失敗會清除原本的值。
用法如下
//Parse
int high = int.Parse("100"); //high = 100
high = int.Parse("1000"); //high = 1000
high = int.Parse("ABC"); //程式停止執行
//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();
輸出
字串插補(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不能重新設定
整理總結
我們這課學了
- 變數
- 運算符號
- 輸出
- 輸入
- 轉型
- 脫逸字元
- 字串插補
這些可以組合起來寫出不少東西了。
範例 圓周率
我們先將原本圓周率計算的改為可以從鍵盤輸出入。
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();
範例 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();
範例 變數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 Comments