2.1 變量與常量

什麼是變量?

變量是程序中存儲數據的基本單元,可以理解為命名的內存空間,用於在程序運行期間存儲和操作數據。

變量的聲明和初始化

基本語法:

// 變量聲明語法:數據類型 變量名;
int age;                    // 聲明一個整數變量
string name;               // 聲明一個字符串變量

// 變量初始化:聲明的同時賦值
int score = 100;           // 聲明並初始化
double price = 19.99;      // 聲明雙精度浮點數
bool isActive = true;      // 聲明布爾值
char grade = 'A';          // 聲明字符

使用 var 關鍵字

C# 支持類型推斷,可以使用 var 關鍵字讓編譯器自動推斷變量類型:

var count = 10;           // 編譯器推斷為 int
var message = "Hello";    // 編譯器推斷為 string
var salary = 2500.50;     // 編譯器推斷為 double

注意: 使用 var 時必須立即初始化,這樣編譯器才能推斷類型。

常量

常量是在程序運行期間值不會改變的變量:

const double PI = 3.14159;
const int MAX_USERS = 100;
const string APP_NAME = "我的應用";

常量特點:

  • 聲明時必須初始化
  • 值在程序運行期間不能改變
  • 通常使用大寫字母命名

命名規則和規範

必須遵守的規則:

  • 以字母或下劃線開頭
  • 只能包含字母、數字、下劃線
  • 不能是 C# 關鍵字(如 int, class 等)

命名規範(約定俗成):

  • 使用有意義的名稱
  • 變量名使用駝峯命名法:firstName, totalCount
  • 常量名使用全大寫:MAX_SIZE, DEFAULT_TIMEOUT

第二章:C# 編程基礎:變量、數據類型_#變量

 


2.2 數據類型

C# 數據類型分為兩大類:值類型引用類型

值類型(Value Types)

值類型變量直接包含數據,存儲在棧內存中。

基本數值類型:

// 整數類型
byte smallNumber = 255;           // 0 到 255
short mediumNumber = 32000;       // -32,768 到 32,767
int number = 2147483647;          // 最常用,-21億 到 21億
long bigNumber = 9223372036854775807L;  // 很大的整數,後綴L

// 浮點類型
float price = 9.99f;              // 單精度,後綴f
double distance = 123.456;        // 雙精度,默認浮點類型
decimal money = 999.99m;          // 金融計算,高精度,後綴m

// 其他類型
bool isReady = false;             // true 或 false
char letter = 'C';                // 單個字符,單引號

結構體(struct):

// 預定義的結構體
DateTime today = DateTime.Now;
DateOnly birthDate = new DateOnly(1990, 5, 15);
TimeOnly currentTime = new TimeOnly(14, 30, 0);

引用類型(Reference Types)

引用類型變量存儲的是數據的引用(內存地址),數據本身存儲在堆內存中。

字符串(string):

string greeting = "Hello, World!";
string name = "張三";
string emptyString = "";          // 空字符串
string nullString = null;         // 空引用

// 字符串操作
string firstName = "John";
string lastName = "Doe";
string fullName = firstName + " " + lastName;  // 字符串拼接

數組(Array):

// 一維數組
int[] numbers = new int[5];               // 聲明長度為5的整數數組
int[] scores = { 90, 85, 78, 92, 88 };   // 聲明並初始化

// 訪問數組元素
numbers[0] = 10;        // 第一個元素(索引從0開始)
numbers[1] = 20;        // 第二個元素
int firstScore = scores[0];  // 讀取第一個分數

// 獲取數組長度
int length = scores.Length;   // 返回5

類(class):(我們將在面向對象章節詳細學習)

第二章:C# 編程基礎:變量、數據類型_#數據類型_02

 


2.3 運算符

算術運算符

int a = 10, b = 3;

int sum = a + b;        // 13,加法
int difference = a - b; // 7,減法
int product = a * b;    // 30,乘法
int quotient = a / b;   // 3,整數除法
int remainder = a % b;  // 1,取餘(模運算)

// 自增自減
a++;    // a = a + 1,後置自增
++a;    // 前置自增
b--;    // b = b - 1,後置自減
--b;    // 前置自減

關係運算符

返回 bool 值(truefalse):

int x = 5, y = 10;

bool isEqual = (x == y);        // false,相等
bool notEqual = (x != y);       // true,不等
bool greaterThan = (x > y);     // false,大於
bool lessThan = (x < y);        // true,小於
bool greaterOrEqual = (x >= y); // false,大於等於
bool lessOrEqual = (x <= y);    // true,小於等於

邏輯運算符

用於布爾表達式:

bool hasLicense = true;
bool hasCar = false;
int age = 25;

bool canDrive = hasLicense && hasCar;    // false,邏輯與
bool canApply = hasLicense || hasCar;    // true,邏輯或
bool cannotDrive = !hasLicense;          // false,邏輯非

// 複雜邏輯
bool isAdult = age >= 18;                // true
bool isSenior = age >= 65;               // false
bool validAge = isAdult && !isSenior;    // true

賦值運算符

int total = 10;

total += 5;     // total = total + 5,現在為15
total -= 3;     // total = total - 3,現在為12
total *= 2;     // total = total * 2,現在為24
total /= 4;     // total = total / 4,現在為6
total %= 5;     // total = total % 5,現在為1

條件運算符(三元運算符)

int score = 85;
string result = (score >= 60) ? "及格" : "不及格";
// 如果score >= 60為true,返回"及格",否則返回"不及格"

2.4 控制流

條件語句

if-else 語句:

int temperature = 25;

if (temperature > 30)
{
    Console.WriteLine("天氣很熱");
}
else if (temperature > 20)
{
    Console.WriteLine("天氣舒適");
}
else
{
    Console.WriteLine("天氣較冷");
}

第二章:C# 編程基礎:變量、數據類型_#C#_03

 

switch 語句:

int dayOfWeek = 3;
string dayName;

switch (dayOfWeek)
{
    case 1:
        dayName = "星期一";
        break;
    case 2:
        dayName = "星期二";
        break;
    case 3:
        dayName = "星期三";
        break;
    case 4:
        dayName = "星期四";
        break;
    case 5:
        dayName = "星期五";
        break;
    default:
        dayName = "週末";
        break;
}

循環語句

for 循環:

// 打印1到5的數字
for (int i = 1; i <= 5; i++)
{
    Console.WriteLine(i);
}

// 計算1到100的和
int sum = 0;
for (int i = 1; i <= 100; i++)
{
    sum += i;
}
Console.WriteLine($"1到100的和是:{sum}");

第二章:C# 編程基礎:變量、數據類型_#.NET Core_04

 

while 循環:

// 當條件為真時執行循環
int count = 1;
while (count <= 5)
{
    Console.WriteLine(count);
    count++;  // 不要忘記更新條件變量,否則會無限循環
}

do-while 循環:

// 至少執行一次,然後檢查條件
int number;
do
{
    Console.WriteLine("請輸入一個正數:");
    number = Convert.ToInt32(Console.ReadLine());
} while (number <= 0);

foreach 循環:

// 遍歷數組或集合中的每個元素
string[] fruits = { "蘋果", "香蕉", "橙子", "葡萄" };

foreach (string fruit in fruits)
{
    Console.WriteLine(fruit);
}

跳轉語句

// break - 跳出循環
for (int i = 1; i <= 10; i++)
{
    if (i == 5)
        break;  // 當i等於5時跳出循環
    Console.WriteLine(i);
}

// continue - 跳過本次循環
for (int i = 1; i <= 5; i++)
{
    if (i == 3)
        continue;  // 跳過i=3的這次循環
    Console.WriteLine(i);
}

📝 動手練習

練習1:簡單計算器

第二章:C# 編程基礎:變量、數據類型_#C#_05

 

// 編寫一個程序,接受用户輸入的兩個數字和運算符,然後計算結果
Console.Write("請輸入第一個數字:");
double num1 = Convert.ToDouble(Console.ReadLine());

Console.Write("請輸入運算符(+, -, *, /):");
char op = Convert.ToChar(Console.ReadLine());

Console.Write("請輸入第二個數字:");
double num2 = Convert.ToDouble(Console.ReadLine());

double result = 0;
bool validOperation = true;

if (op == '+')
    result = num1 + num2;
else if (op == '-')
    result = num1 - num2;
else if (op == '*')
    result = num1 * num2;
else if (op == '/')
{
    if (num2 != 0)
        result = num1 / num2;
    else
    {
        Console.WriteLine("錯誤:除數不能為零!");
        validOperation = false;
    }
}
else
{
    Console.WriteLine("錯誤:無效的運算符!");
    validOperation = false;
}

if (validOperation)
    Console.WriteLine($"結果:{num1} {op} {num2} = {result}");

第二章:C# 編程基礎:變量、數據類型_#.NET_06

 

練習2:猜數字遊戲

第二章:C# 編程基礎:變量、數據類型_#.NET_07

 

Random random = new Random();
int secretNumber = random.Next(1, 101);  // 1到100的隨機數
int guess = 0;
int attempts = 0;

Console.WriteLine("猜數字遊戲!我想了一個1到100之間的數字。");

while (guess != secretNumber)
{
    Console.Write("請輸入你的猜測:");
    guess = Convert.ToInt32(Console.ReadLine());
    attempts++;

    if (guess < secretNumber)
        Console.WriteLine("太小了!再試一次。");
    else if (guess > secretNumber)
        Console.WriteLine("太大了!再試一次。");
    else
        Console.WriteLine($"恭喜!你猜對了!用了{attempts}次嘗試。");
}

第二章:C# 編程基礎:變量、數據類型_#.NET_08

 

練習3:成績等級判斷

Console.Write("請輸入成績(0-100):");
int score = Convert.ToInt32(Console.ReadLine());
string grade;

if (score >= 90)
    grade = "優秀";
else if (score >= 80)
    grade = "良好";
else if (score >= 70)
    grade = "中等";
else if (score >= 60)
    grade = "及格";
else
    grade = "不及格";

Console.WriteLine($"成績等級:{grade}");

第二章:C# 編程基礎:變量、數據類型_#變量_09

成績等級判斷效果截圖


💡 重點回顧

  • 變量用於存儲數據,常量的值不可改變
  • C# 有值類型引用類型兩大類數據類型
  • 運算符用於執行算術、比較和邏輯操作
  • 控制流語句(條件、循環)控制程序的執行流程
  • 使用 if-else 進行條件判斷,使用 forwhile 進行循環
  • switch 語句適合多分支選擇,foreach 適合遍歷集合

🎯 本章挑戰

綜合練習:學生成績管理系統

編寫一個程序,能夠:

  • 輸入5個學生的成績
  • 計算平均分
  • 找出最高分和最低分
  • 統計及格人數
  • 顯示所有成績及等級

提示: 使用數組存儲成績,使用循環進行輸入和計算。

第二章:C# 編程基礎:變量、數據類型_#C#_10

 

第二章:C# 編程基礎:變量、數據類型_#C#_11

 


附錄

教程源碼均已上傳至網盤,點擊下方網盤鏈接自行領取

  • C# 編程基礎:變量、數據類型
  • C# 編程基礎:變量、數據類型