1. 前言
1.1 C語言中變數的重要性
在C語言中,變數是用來儲存資料並進行動態操作的非常重要的元素。透過變數,可以更有效地管理程式中的資料,並能在多次使用同一資料時,輕鬆地更改或重複利用這些數值。特別是在大型程式中,正確使用變數能大幅提升程式的效率與可讀性。
2. 什麼是變數?
2.1 變數的定義
變數是在程式中暫時儲存資料的記憶體區域。在C語言中,必須先宣告變數才能使用。以下範例宣告了一個名為age
的變數,並將25這個年齡資料存入其中。
int age;
age = 25;
使用變數可以讓資料重複利用,並且能輕鬆更改數值或擴充程式功能。
2.2 變數的作用
變數讓資料可以儲存與重複使用,提升了程式的彈性。例如,下方程式碼使用char
型態的變數來顯示字串。
char message[] = "こんにちは";
printf("%sn", message);
像這樣利用變數,能讓資料管理更加容易,並能在多個地方有效率地使用相同資料。
3. 變數的宣告與初始化
3.1 變數的宣告方法
在C語言中,變數在使用前必須先宣告。宣告變數時,系統會分配對應的記憶體空間。以下範例宣告了一個整數型(int
)變數number
。
int number;
3.2 變數的初始化
建議在宣告變數的同時進行初始化。如果使用未初始化的變數,程式可能會有不可預期的行為,因此養成初始化的習慣是最佳實踐。
int age = 30;
這段程式碼將age
變數宣告為整數型,並同時賦值為30。關於未初始化變數可能引發的錯誤,會在後面說明。
4. 資料型態與其限制
4.1 C語言的主要資料型態
C語言提供多種資料型態,依據要處理的資料種類選擇正確型態非常重要。以下是幾個主要型態的詳細說明。
int
(整數型):用來儲存整數。在32位元系統下,可表示的範圍為-2,147,483,648
到2,147,483,647
。預設為有符號整數。範例:int age = 25;
。double
(浮點數型):用來儲存含小數點的數值。double
型態通常可提供15位數精度,可精確表示非常大或非常小的數值。範例:double pi = 3.14159;
。char
(字元型):用來儲存單一字元。字元資料對應ASCII碼,可表示0
至255
之間的數值。範例:char grade = 'A';
。
4.2 各型態的使用範例與注意事項
選擇資料型態時,要根據數值的範圍與特性來決定。例如char
型態會佔用1個位元組記憶體,可用數字代表字元,如下例所示:
char letter = 65;
printf("%cn", letter); // 輸出: A
此例將ASCII碼65對應的字元「A」印出。正確運用資料型態,有助於程式的穩定性與效能。

5. 變數的作用域(有效範圍)
5.1 區域變數與全域變數
在C語言中,變數的作用域(有效範圍)決定了在哪裡可以使用該變數。主要有區域變數與全域變數兩種。
- 區域變數:在函式或區塊內宣告,只能在該範圍內使用。其他函式或區塊無法存取。
void example() {
int localVar = 10;
printf("%d", localVar); // 使用區域變數
}
- 全域變數:在函式外宣告,可在整個程式中使用。任何部分都能存取該變數。
int globalVar = 20;
void example() {
printf("%d", globalVar); // 使用全域變數
}
5.2 作用域管理的重要性
區域變數與全域變數的合理使用會影響程式的可讀性與安全性。雖然全域變數很方便,但過度依賴容易產生錯誤,建議僅於特定用途時才使用。
6. 變數的使用範例與最佳實踐
6.1 變數的覆寫與重複利用
變數的值可以隨時被新值覆蓋。以下是相關範例:
int age = 20;
age = 21; // 用新值覆蓋
根據程式進行,變數的值能動態變化,有助於撰寫彈性的程式。
6.2 變數命名規則
為提升程式碼可讀性,請遵循命名規則。以下是常見命名範例:
int userAge = 30; // 駝峰式命名
int user_age = 30; // 蛇底式命名
變數名稱應具備意義,並符合程式目的,讓其他人容易理解你的程式碼。
7. 常見錯誤與對策
7.1 使用未初始化變數造成的錯誤
若使用未初始化的變數,可能產生不可預期的行為。下方程式碼是未初始化變數number
的例子,結果不固定。
int number;
printf("%d", number); // 使用未初始化變數
為避免此問題,務必先進行初始化。
int number = 0; // 已初始化變數
printf("%d", number); // 正常輸出
7.2 資料型態不符造成的錯誤
若不同型態的變數互相賦值,可能導致資料遺失。下例將小數指定給int
型,會遺失小數部分。
int number = 3.14; // 小數賦值給整數型
printf("%dn", number); // 結果為3(小數被捨去)
為避免此問題,請選擇正確型態。要處理小數請用double
或float
型。
double number = 3.14;
printf("%fn", number); // 結果為3.140000
8. 實作練習題
8.1 題目1:實作四則運算
本題請使用兩個整數變數,實作加法、減法、乘法、除法,並顯示運算結果。
#include <stdio.h>
int main() {
int a = 10;
int b = 5;
// 輸出四則運算結果
printf("加法: %dn", a + b);
printf("減法: %dn", a - b);
printf("乘法: %dn", a * b);
printf("除法: %dn", a / b);
return 0;
}
提示:注意除法結果為整數。例如a / b
結果為2
,不會顯示小數。若需小數結果,請使用double
型變數。
8.2 題目2:理解變數的作用域
接下來的練習是理解區域變數與全域變數的差異。區域變數僅在函式內有效,全域變數可於整個程式使用。
#include <stdio.h>
int globalVar = 10; // 全域變數
void function() {
int localVar = 20; // 區域變數
printf("函式內的區域變數: %dn", localVar);
printf("函式內的全域變數: %dn", globalVar);
}
int main() {
function();
// 存取全域變數
printf("主函式內的全域變數: %dn", globalVar);
// 存取區域變數(會出錯)
// printf("主函式內的區域變數: %dn", localVar);
return 0;
}
提示:主函式無法存取區域變數。請將註解取消試試看,觀察錯誤訊息。
8.3 題目3:變數初始化與錯誤處理
下題是驗證未初始化變數會發生什麼錯誤。下方程式碼中,number
未被初始化,可能導致不可預期結果。
#include <stdio.h>
int main() {
int number; // 未初始化的變數
printf("未初始化變數的值: %dn", number);
return 0;
}
請再試著執行已正確初始化的版本,確認差異。
#include <stdio.h>
int main() {
int number = 0; // 已初始化變數
printf("已初始化變數的值: %dn", number);
return 0;
}