以下是原文翻译成繁體中文的Markdown格式:

C - Constants

# C - 常數:初學者指南

你好,有志於成為程序員的各位!今天,我們要深入C程式設計中的常數世界。作為你們親切友善的鄰居計算機老師,我在這裡引導你們了解這個重要的概念。別擔心如果你從未寫過一行代碼——我們會從頭開始,逐步建立我們的知識。所以,拿起你們最喜歡的飲料,舒適地坐好,讓我們一起踏上這次編程冒險吧!

## 什麼是常數?

在我們深入細節之前,讓我們先了解什麼是常數。在編程中,常數就像一個容器,它包含的值在程式的執行過程中不會改變。把它想像成一個特殊的盒子,你把一些寶貴的東西放進去並鎖上——一旦它進去後,就會停留在那裡!

現在,讓我們探討在C中定義常數的兩種主要方法。

## 使用 const 關鍵字定義常數

我們首先要看的方法是使用 `const` 關鍵字。這是一種直接的方法,用於創建類型安全的常數(意味著編譯器會檢查你是否使用了正確的數據類型)。

這樣做:

```c
const int MAX_STUDENTS = 30;
const float PI = 3.14159;
const char GRADE_A = 'A';

讓我們分解一下:

  1. 我們從 const 關鍵字開始。
  2. 然後指定數據類型(intfloatchar 等)。
  3. 接著,我們給我們的常數命名(通常使用大寫字母,這是一種習慣,以便於識別常數)。
  4. 最後,我們將一個值賦給常數。

現在,讓我們看看如何在程序中使用這些常數:

#include <stdio.h>

int main() {
    const int MAX_STUDENTS = 30;
    int current_students = 28;

    printf("這個課程最多可以容納 %d 名學生。\n", MAX_STUDENTS);
    printf("目前,課堂上有 %d 名學生。\n", current_students);

    if (current_students < MAX_STUDENTS) {
        printf("還有 %d 個學生的空間!\n", MAX_STUDENTS - current_students);
    } else {
        printf("課堂已滿!");
    }

    return 0;
}

在這個例子中,我們使用我們的 MAX_STUDENTS 常數來檢查課堂上是否有更多學生的空間。使用常數的好處在於,如果我們需要改變最大課堂容量,我們只需要在一個地方更改!

使用 #define 指令定義常數

現在,讓我們看看另一種定義常數的方法——使用 #define 預處理器指令。這種方法有點不同,並有其自己的特點。

這是語法:

#define MAX_STUDENTS 30
#define PI 3.14159
#define GRADE_A 'A'

注意幾點:

  1. 我們不指定數據類型。
  2. 我們不使用等號(=)。
  3. 我們不使用分號(;)結尾。

讓我們看看如何在程序中使用這些:

#include <stdio.h>

#define MAX_SCORE 100
#define PASSING_PERCENTAGE 60

int main() {
    int student_score = 75;
    float passing_score = (float)MAX_SCORE * PASSING_PERCENTAGE / 100;

    printf("最高分是 %d。\n", MAX_SCORE);
    printf("及格分是 %.2f。\n", passing_score);

    if (student_score >= passing_score) {
        printf("恭喜你!你以 %d 分數通過了測試。\n", student_score);
    } else {
        printf("不幸的是,你沒有通過。你的分數是 %d。\n", student_score);
    }

    return 0;
}

在這個例子中,我們使用我們的常數來計算及格分並確定學生是否通過了測試。#define 常數在程序編譯之前被替換為它們的值,這有時會導致意外的行為,如果你不小心!

改變常數的值

現在,讓我們來看看有點意思的部分。記得我說過常數就像鎖定的盒子嗎?這大部分是對的,但有一個陷阱。

使用 const 定義的常數是真實的常數——一旦設定,你就不能改變它的值。如果你嘗試,編譯器會給你一個錯誤。例如:

const int MY_CONSTANT = 10;
MY_CONSTANT = 20; // 這會導致編譯器錯誤

然而,使用 #define 定義的常數是另一個故事。由於它們在編譯前被處理,你實際上可以在你的代碼中重新定義它們。但是要小心——如果不明智地使用,這可能會導致混淆和錯誤!

#include <stdio.h>

#define MY_CONSTANT 10

int main() {
    printf("MY_CONSTANT 是 %d\n", MY_CONSTANT);

    #undef MY_CONSTANT
    #define MY_CONSTANT 20

    printf("MY_CONSTANT 現在是 %d\n", MY_CONSTANT);

    return 0;
}

這個程序將輸出:

MY_CONSTANT 是 10
MY_CONSTANT 現在是 20

雖然這是可能的,但通常不建議這樣做,這會使你的代碼更難以理解和維護。

結論

常數是C編程中的強大工具。它們幫助我們的代碼更具可讀性、可維護性,並且更不易出錯。無論你選擇使用 const 還是 #define 取決於你的特定需求,但它們在C程序員的工具箱中都有其位置。

記住,編程是一個旅程,掌握常數只是其中的一步。持續練習,保持好奇心,並不怕嘗試。在你知道之前,你將能夠輕鬆地編寫複雜的程序!

這裡是一個我們討論過的方法的快速參考表:

方法 語法 類型檢查 范圍 可以重新定義
const const type NAME = value; 块級
#define #define NAME value 全局

未來的程序員,快樂編碼吧!記住,在常數的世界裡,唯一不變的東西就是變化。(懂了嗎?那是一個編程師的幽默!) ;)

Credits: Image by storyset