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
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):(我們將在面向對象章節詳細學習)
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 值(true 或 false):
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("天氣較冷");
}
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}");
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:簡單計算器
// 編寫一個程序,接受用户輸入的兩個數字和運算符,然後計算結果
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}");
練習2:猜數字遊戲
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}次嘗試。");
}
練習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# 有值類型和引用類型兩大類數據類型
- 運算符用於執行算術、比較和邏輯操作
- 控制流語句(條件、循環)控制程序的執行流程
- 使用
if-else進行條件判斷,使用for、while進行循環 switch語句適合多分支選擇,foreach適合遍歷集合
🎯 本章挑戰
綜合練習:學生成績管理系統
編寫一個程序,能夠:
- 輸入5個學生的成績
- 計算平均分
- 找出最高分和最低分
- 統計及格人數
- 顯示所有成績及等級
提示: 使用數組存儲成績,使用循環進行輸入和計算。
附錄
教程源碼均已上傳至網盤,點擊下方網盤鏈接自行領取
- C# 編程基礎:變量、數據類型
- C# 編程基礎:變量、數據類型