當前位置: 華文世界 > 教育

NCRE二級C語言:弄懂程式結構與數據類別

2024-10-13教育

參考2023年考試大綱,如文章Visual Studio 2022 C/C++之三:電腦等級考試二級所述,這裏主要講解考試內容的前兩個章節.

NCRE 2C 考試內容

C語言的程式結構

C語言程式的結構通常包括以下幾個主要部份:在預處理指令中引入表頭檔,透過#define #ifdef 等設定引入的規則。在使用數據之前先定義數據。源程式應該便於閱讀,按照程式塊進行適當的縮排,與C語言的風格相適應。下面詳細介紹

1. 預處理指令: 以 `#` 開頭的指令,用於在編譯前處理原始碼。常見的預處理指令包括 `#include`(引入表頭檔)、`#define`(定義宏)等。

#include <stdio.h> // 設定在引入mylib.h後就定義宏,避免多次引入mylib.h#ifndef IN_MYLIB_H#define IN_MYLIB_H#include "mylib.h"#endif

2. 函數定義: C語言程式的基本單位是函數。每個程式至少有一個 `main` 函數,它是程式的入口點。函數可以有參數並返回值。

int main() { // 程式程式碼 return 0;}

3. 變量聲明: 在函數內部或外部聲明變量,以便在程式中使用。變量必須在使用之前聲明,並且可以指定類別(如 `int`、`float`、`char` 等)。

int a; // 整數變量float b; // 浮點數變量

4. 語句和運算式: C語言程式由語句和運算式構成,語句用於執行操作,運算式用於計算值。常見的語句包括賦值語句、控制語句(如 `if`、`for`、`while` 等)。

a = 10; // 賦值語句if (a > 5) { printf("a is greater than 5\n");}

5. 註釋: 用於解釋程式碼,增加可讀性。C語言支持單行註釋(`//`)和多行註釋(`/* ... */`)。

// 這是一個單行註釋/* 這是一個多行註釋 */

6. 返回值: `main` 函數通常返回一個整數值,表示程式的執行狀態。返回0表示程式正常結束,返回其他值表示出錯。

return 0; // 正常結束

7.範例程式: 以下是一個簡單的C語言程式範例,展示了上述結構:

/* * 本程式用來演示C語言的基本程式結構 */#include <stdio.h> int main() { int a = 10; // 聲明並初始化變量 if (a > 5) { printf("a is greater than 5\n"); // 輸出 } return 0; // 返回0表示正常結束}

這個程式包含了預處理指令、函數定義、變量聲明、控制語句和輸出語句,展示了C語言程式的基本結構。至於風格往往是一個團隊的習慣,C語言推薦如下風格,很多開源軟件也是如此,建議大家遵循,這樣能提高交流的效率。

1. 命名約定

- 變量和函數命名:使用有意義的名稱,通常采用小寫字母,單詞之間用底線分隔(如 `my_variable`)或采用駝峰命名法(如 `myVariable`)。

- 常量命名:常量通常使用全大寫字母,單詞之間用底線分隔(如 `MAX_SIZE`)。

2. 縮排和格式化

- 縮排:使用一致的縮排風格,通常使用4個空格或一個制表符(Tab)。

- 程式碼塊:在控制結構(如 `if`、`for`、`while`)中,程式碼塊應當用大括弧 `{}` 包圍,即使只有一行程式碼。

- 行寬:盡量保持每行程式碼不超過80-120個字元,以提高可讀性。

3. 註釋

- 單行註釋:使用 `//` 進行簡單的註釋。

- 多行註釋:使用 `/* ... */` 來註釋較長的說明。

- 註釋內容:註釋應當清晰明了,解釋程式碼的意圖、邏輯或復雜的演算法。

4. 程式碼結構

- 函數:每個函數應當完成一個特定的任務,避免過長的函數。函數的長度應適中,通常不超過50-100行。

- 模組化:將相關的函數和數據結構放在一起,使用表頭檔(`.h`)進行聲明,原始檔(`.c`)進行實作。

5. 錯誤處理

- 在編寫程式碼時,考慮如何處理潛在的錯誤情況,例如記憶體分配失敗、檔開啟失敗等。使用適當的錯誤檢查和處理機制。

6. 一致性

- 在整個專案中保持一致的風格,包括命名、縮排、註釋等。這有助於團隊成員之間的協作和程式碼的可維護性。

數據類別及其運算

C語言的數據類別分為三類,基礎數據類別、衍生數據類別、指標。學習這塊內容,建議對二進制、十六進制先進行了解,對常用的記憶體長度單位Byte(可存放8個二進制位的空間)了解;然後從基礎數據類別開始,多寫程式,並使用類似Bito之類的工具輔助提問,獲得範例程式碼。

C語言的基本類別

理解基礎數據類別的儲存空間,轉換規則的記憶體對齊規則,在看衍生數據類別,指標就比較容易了。這裏可多寫點程式碼驗證下心中的疑惑。

#include <stdio.h>int hex_type_in_memory() { char c = 'A'; // 1 byte int a = 123456; // 4 bytes float f = 3.14f; // 4 bytes double d = 3.141592653589793; // 8 bytes short b = 32767; // 2 bytes long l = 1234567890; // 4 or 8 bytes depending on platform long long ll = 1234567890123456789; // 8 bytes // 打印各數據類別的十六進制表示 printf("\nhex_type_in_memory:\n"); printf("%-10s %-10s %-10s %-20s\n", "Type","Len(Byte)", "Value", "Hex in Memory"); printf("-----------------------------------------------\n"); printf("%-10s %-10d %-10c X\n","char",sizeof(c), c, c); printf("%-10s %-10d %-10d X\n", "int",sizeof(a), a, a); printf("%-10s %-10d %-10f X\n", "float",sizeof(f), f, *(unsigned int*)&f); printf("%-10s %-10d %-10f 6X\n", "double", sizeof(d), d, *(unsigned long long*)&d); printf("%-10s %-10d %-10d X\n", "short", sizeof(b), b, b); printf("%-10s %-10d %-10d X\n", "long", sizeof(l), l, l); printf("%-10s %-10d %-10d 6X\n", "long long", sizeof(ll), ll, ll); printf("-----------------------------------------------\n"); return 0; // 正常結束}struct Person { char name[50]; int age;};int print_types() { int a = 10; // 整型 char c = 'A'; // 字元型 float f = 3.14f; // 浮點型 double d = 2.71828; // 雙精度浮點型 int arr[3] = { 1, 2, 3 }; // 陣列 struct Person p1; // 結構體 p1.age = 25; // 結構體成員賦值 printf("Integer: %d\n", a); printf("Character: %c\n", c); printf("Float: %.2f\n", f); printf("Double: %.5f\n", d); printf("Array: %d, %d, %d\n", arr[0], arr[1], arr[2]); printf("Person: Name = %s, Age = %d\n", p1.name, p1.age); return 0; // 正常結束}

參考資料

  1. 2023年 NCRE二級 公共基礎
  2. https://ncre.neea.edu.cn/res/Home/2306/7f474473f0014cdfdfc9ef4bc9cf5cd4.pdf?download=二级公共基础知识.pdf
  3. 2023年 NCRE二級 C語言設計
  4. https://ncre.neea.edu.cn/res/Home/2306/6016844d02b8b7fb5d9ea3981f0a0eb9.pdf?download=二级C语言.pdf
  5. NCRE電腦等級考試介紹
  6. https://ncre.neea.edu.cn/html1/folder/1507/909-1.htm