跳轉到內容

C 程式設計基礎/預備知識

來自華夏公益教科書

預備知識

[編輯 | 編輯原始碼]

典型的 C 程式是什麼樣子的?

[編輯 | 編輯原始碼]

首先,一個非常簡單的 C 程式示例

/* Sample C program that outputs the word "Hello" */
#include <stdio.h>

int main()
{
     printf("Hello\n");
     return 0;
}

上面示例中顯示的程式被稱為程式原始碼。原始碼由字母、數字和其他符號的組合組成。原始碼可以透過程式設計師/使用者使用任何文字編輯器建立。

在課堂上,我們將使用以下格式編寫 C 程式

#include <stdio.h>

int main()
{
      /* ...your variable declarations... */

      /* ...your statements... */

      return 0;
}

什麼是語句?

[編輯 | 編輯原始碼]

所有 C 程式都由一系列指令組成。在 C 語言中,指令也稱為語句。在英語中,語句以句號、問號或感嘆號結尾。請注意,在 C 語言中,語句以分號結尾。在上面的示例程式中,只有一個語句——printf() 語句。

什麼是函式?

[編輯 | 編輯原始碼]

所有語句都應該寫在使用者定義的函式內部。你可以將函式看作是一組或一系列語句。它類似於英語,其中一段話由一系列語句組成。術語“使用者定義”表示函式的描述是由使用者定義(或編寫)的。在上面的示例程式中,只有一個使用者定義的函式——main() 函式。所有 C 程式都必須包含 main() 函式。

{ } 符號有什麼用?

[編輯 | 編輯原始碼]

符號 { 被稱為左大括號左花括號。同樣,符號 } 被稱為右大括號右花括號。大括號用於分組。可以將左大括號看作是開始的同義詞,將右大括號看作是結束的符號。因此,在上面的示例程式中,左大括號和右大括號分別表示 main() 函式的開始和結束。請注意,大括號必須成對出現。缺少大括號是導致語法錯誤的最常見原因之一。

正如我們將在後面看到的,大括號用於對多個語句進行分組。

/* */ 符號有什麼用?

[編輯 | 編輯原始碼]

符號 /* 和 */ 用於對程式內部的註釋進行分組。註釋不是指令,而是簡單地提供額外的資訊(文字描述),例如程式在做什麼、輸入是什麼、輸出是什麼等。可以將 /* 視為註釋的開始,將 */ 視為註釋的結束。與大括號一樣,這些符號總是成對出現的。註釋是可選的,可以放置在程式原始碼中的任何位置。

可以在 /* */ 中編寫多行註釋。例如

/* The following is 
   an example 
   of a very simple C program */
void main()
{
     printf("Hello\n");
}

請注意,註釋不能巢狀,這意味著不能將 /* */ 放入 /* */ 中。例如,以下操作是錯誤的

/*
   this is a comment

   /* this is one more comment - which will cause an error */

*/

其他符號呢?

[編輯 | 編輯原始碼]

其他符號,即 #include <stdio.h>void 的含義將在後面解釋。

命名規範

[編輯 | 編輯原始碼]

什麼是名稱?C 中的命名規範是什麼?

[編輯 | 編輯原始碼]

資料和用於操作資料的指令都以其名稱來表示。在 C 語言中,為某些內容命名時有一些規則和約定,如下所示

1. 名稱由字母和數字組成。

2. 第一個字元必須是字母。

3. C 語言區分大小寫,這意味著小寫字母 'a' 與大寫字母 'A'相同。

4. 下劃線符號 _ 在 C 語言中被視為字母。但是,不建議將它用作名稱的第一個字元。

5. 至少名稱的前 31 個字元是有效的。

示例

以下是一些有效的名稱示例

a

A

main

void

hello

salary

rate_per_hour

student_1

student_2

student_3

First_Name

ComputeGrade

以下是一些無效的名稱示例

1                 /* must start with a character */

1_ab              /* must start with a character */

a&                /* & symbol cannot be used in a name */

xyz_%             /* % symbol cannot be used in a name */

$money            /* must start with a character,

                     $ cannot be used in a name */

什麼是關鍵字?

[編輯 | 編輯原始碼]

作為一種語言,C 語言擁有自己的詞彙表——一組關鍵字。這些名稱是保留的,不能用於其他目的,例如命名使用者定義的變數名。在示例程式中,名稱 void 是一個關鍵字。

ANSI C 語言有 32 個關鍵字(僅此而已!)。

請注意,名稱 printf 實際上不是 C 語言關鍵字,也不是 C 語言的真正組成部分。它是一個標準輸入/輸出庫的預定義名稱。這些區別將在後面解釋。

常量、變數、資料型別、宣告

[編輯 | 編輯原始碼]

什麼是常量?

[編輯 | 編輯原始碼]

常量是指其值不會改變的實體。常量可以是數值常量或字面常量。

示例

數值常量的示例

1

500

-10000.100

3.1416

字面常量的示例

'A'

"Hello"

"The quick brown fox jumped over the lazy dog."

注意:在C語言中,只有一個字元的字面常量被稱為字元。它用一對單引號括起來。如果有多個字元,則被稱為字串。字串用一對雙引號括起來。

什麼是變數?

[編輯 | 編輯原始碼]

程式由資料和操作這些資料的指令組成。注意,資料必須儲存在某個地方,因此需要 RAM 中的某個記憶體空間。

變數是用來儲存資料的實體。沒有變數,就沒有辦法(或者實際上沒有地方)儲存資料。變數具有

  • 一個名稱(更準確地說是一個符號名稱)
  • 一個關聯的物理記憶體空間(RAM 中的一部分)
  • 一個數據型別
  • 一個值(取決於資料型別)
  • 一個作用域
  • 一個生命週期

作用域和生命週期的概念將在課程的後面部分討論。

什麼是資料型別?

[編輯 | 編輯原始碼]

資料型別指定

  • 該型別變數可以假設的值的種類
  • 該型別變數可以假設的值的範圍
  • 變數為儲存該型別的值所需的記憶體量(以位元組為單位)

C語言中有哪些(基本)資料型別?

[編輯 | 編輯原始碼]

有四種基本資料型別,分別是

  • char - 字元資料型別。 char 資料型別用於表示/儲存/操作字元資料值。一個 char 資料型別值需要一個位元組的記憶體空間。 char 值可以假設的值範圍為 0 到 255。使用的數字到字元編碼是 ASCII。
  • int - 整數資料型別。 int 資料型別用於表示/儲存/操作有符號的整數數值。
  • float - 單精度浮點資料型別。 float 資料型別用於儲存單精度有符號實數(即帶小數點的數字)。
  • double - 雙精度浮點資料型別。 double 資料型別用於儲存雙精度有符號實數(即帶小數點的更大的數字)。

儲存一個 int、一個 float 和一個 double 所需的記憶體空間是平臺相關的(取決於機器和軟體)。對於 32 位機器(以及 32 位編譯器,如 Microsoft C 編譯器),一個 int 和一個 float 各需 4 個位元組的記憶體,而一個 double 則需要 8 個位元組的記憶體。

注意,一個 char 資料實際上是數值(0 到 255),被視為 int 值的子集。任何對整數值的運算(將在後面討論)也可以對字元執行。

作業

找出以下資料型別的值範圍(最小值和最大值):intfloatdouble 在您的平臺上。提示:嘗試查詢與 C 編譯器一起提供的兩個名為 "limits.h""float.h" 的檔案。

如何確定每種資料型別的實際大小?

[編輯 | 編輯原始碼]

以下程式可用於列印基本資料型別的大小

#include <stdio.h>

int main(int argc, char *argv[])
{
     printf("Size of char: %d\n", sizeof(char));
     printf("Size of int: %d\n", sizeof(int));
     printf("Size of float: %d\n", sizeof(float));
     printf("Size of double: %d\n", sizeof(double));
     _getch();
     return 0;
}

sizeof 是 C 中的關鍵字。它是一個運算子,返回上面顯示的指定資料型別的大小(以位元組為單位)。

什麼是變數宣告?

[編輯 | 編輯原始碼]

變數宣告是在程式/函式中“引入”變數的“動作”。C 程式中的所有變數都必須宣告。如果您忘記這樣做,編譯器將報告語法錯誤。

如何宣告變數?

[編輯 | 編輯原始碼]

在 C 中,宣告變數的語法如下

<資料型別> <變數名稱>


符號 <專案> 表示需要指定一對尖括號中包含的專案。分號表示宣告的結束。缺少分號將導致編譯器生成語法錯誤。變數的命名應遵循 C 命名約定。

示例

char ch;

int i;

float f;

double d;

可以在同一行上宣告多個相同型別變數。在這種情況下,兩個變數之間應插入逗號。缺少逗號將生成語法錯誤。

示例:<syntaxhighlight lang="c" char ch1, ch2;

int x, y, z;

float hourly_rate, number_of_hours, salary;

double numerator, denominator; </syntaxhighlight>

我可以使用任何名稱作為變數名嗎?

[編輯 | 編輯原始碼]

是的,只要您遵循命名約定,並且不使用 C 保留字。

但是,建議您作為良好的程式設計實踐使用描述性或提示性名稱。例如,如果您知道變數將代表兼職工人的時薪,則不要使用 xyz x1 之類的名稱。最好使用 ratehourly_rate 之類的變數名。注意,使用下劃線使變數名易於閱讀。

變數的初始值是什麼?

[編輯 | 編輯原始碼]

預設情況下,C 中變數的值是垃圾,這意味著該記憶體空間中儲存了某些內容,但該內容對於預期用途無效。

變數必須正確初始化。初始化是指為變數分配有效值。使用帶有垃圾值的變數將導致邏輯錯誤,這是一種非常難以發現的錯誤。

練習

1. 將中間名首字母宣告為字元變數

2. 將年齡宣告為整數變數

3. 將存款金額、取款金額宣告為浮點變數

4. 將長度、寬度、高度宣告為雙精度資料型別變數

華夏公益教科書