這個作業屬於https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP
這個作業要求https://www.cnblogs.com/rocedu/p/9577842.html#WEEK01
• 這個作業的目標自學教材
o 電腦科學概論(第七版)第8章 並完成雲班課測試
o 《C語言程式設計》第6章並完成雲班課測試
作業正文https://www.cnblogs.com/gly03/p/18537537
教材學習內容總結
陣列
陣列是一種線性資料結構,其元素在記憶體中連續儲存。陣列的每個元素都可以透過索引直接訪問,這使得陣列在需要快速訪問元素時非常高效。然而,陣列的缺點是插入和刪除操作(特別是在陣列中間位置)可能涉及大量元素的移動,因此效率較低。
C語言中的陣列示例:
c複製程式碼
#include <stdio.h>
int main() {
int array[5] = {1, 2, 3, 4, 5};
printf("%d\n", array[2]); // 輸出: 3
return 0;
}
連結串列
連結串列也是一種線性資料結構,但與陣列不同,連結串列的元素在記憶體中不必連續儲存。連結串列透過指標將各個元素(節點)連結在一起。連結串列的優點是可以高效地執行插入和刪除操作(特別是在連結串列中間位置),因為只需要修改相關節點的指標。然而,連結串列的缺點是訪問特定元素需要從頭節點開始遍歷連結串列,這可能導致較低的效率。
C語言中的連結串列示例(單向連結串列):
c複製程式碼
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
// 建立新節點
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// 插入節點到連結串列頭部
void insertAtHead(Node** head, int data) {
Node* newNode = createNode(data);
newNode->next = *head;
*head = newNode;
}
// 列印連結串列
void printList(Node* head) {
Node* temp = head;
while (temp != NULL) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
}
int main() {
Node* head = NULL;
insertAtHead(&head, 1);
insertAtHead(&head, 2);
insertAtHead(&head, 3);
printList(head); // 輸出: 3 -> 2 -> 1 -> NULL
return 0;
}
無序表與有序表
無序表是指元素沒有特定順序的集合,而有序表則是指元素按照某種順序(如升序或降序)排列的集合。陣列和連結串列都可以用來實現無序表或有序表。對於有序表,通常需要在插入新元素時保持元素的順序,這可能需要額外的比較和移動操作。
樹
樹是一種非線性資料結構,由節點(包含資料)和連線節點的邊組成。樹有多種型別,包括二叉樹、平衡樹(如AVL樹、紅黑樹)、搜尋樹(如二叉搜尋樹)等。樹在儲存和檢索資料時非常有用,特別是在需要快速查詢、插入和刪除操作的場景中。
圖
圖也是一種非線性資料結構,由節點(頂點)和連線節點的邊組成。圖可以是有向的或無向的,邊的權重可以是有權的或無權的。圖在表示複雜關係(如社交網路、地圖等)時非常有用。
子程式與引數
子程式(或函式)是程式碼的可重用模組,用於執行特定任務。引數是傳遞給子程式的資料,可以是輸入值、輸出值或引用。在C語言中,函式引數可以是基本資料型別(如int、float等)、指標或結構體等。透過函式引數,可以實現資料的傳遞和共享,以及函式間的互動。
C語言中的子程式與引數示例:
c複製程式碼
#include <stdio.h>
// 子程式:計算兩個整數的和
int add(int a, int b) {
return a + b;
}
int main() {
int result = add(5, 3); // 呼叫子程式並傳遞引數
printf("%d\n", result); // 輸出: 8
return 0;
}
這些概念和資料結構是C語言程式設計的基礎,掌握它們有助於設計和實現高效、可維護的程式。
函式
函式是C語言程式的基本組成模組,用於執行特定的任務或計算。每個函式都有一個唯一的名稱,可以透過這個名稱來呼叫它。函式可以接受輸入引數(也稱為形參),並可以返回一個值(稱為返回值)。
函式的定義:
c複製程式碼
返回型別 函式名(引數列表) {
// 函式體
// 執行特定的任務
// 可以使用return語句返回一個值(如果函式有返回值的話)
}
例如,一個計算兩個整數之和的函式可以這樣定義:
c複製程式碼
int add(int a, int b) {
return a + b;
}
函式的呼叫:
在C語言中,使用函式名後跟一對圓括號(可以包含引數)來呼叫函式。例如:
c複製程式碼
int result = add(5, 3); // 呼叫add函式,並傳遞5和3作為引數
陣列
陣列是一種資料結構,用於儲存相同型別的多個元素。這些元素在記憶體中連續儲存,並且可以透過索引來訪問。陣列的每個元素都有一個唯一的索引,該索引從0開始。
陣列的定義:
c複製程式碼
資料型別 陣列名[陣列大小];
例如,一個包含5個整數的陣列可以這樣定義:
c複製程式碼
int numbers[5];
也可以在定義陣列的同時初始化它:
c複製程式碼
int numbers[5] = {1, 2, 3, 4, 5};
陣列的訪問:
透過陣列名和索引來訪問陣列中的元素。例如:
c複製程式碼
int value = numbers[2]; // 訪問陣列中索引為2的元素,其值為3
陣列的傳遞:
在C語言中,陣列名在函式引數中會被解釋為指向陣列第一個元素的指標。因此,當陣列作為引數傳遞給函式時,實際上傳遞的是指向陣列首元素的指標。
例如,一個列印陣列元素的函式可以這樣定義和呼叫:
c複製程式碼
#include <stdio.h>
void printArray(int arr[], int size) {
for(int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int numbers[5] = {1, 2, 3, 4, 5};
printArray(numbers, 5); // 呼叫printArray函式,並傳遞numbers陣列和它的大小作為引數
return 0;
}
在這個例子中,printArray函式接受一個整數陣列和一個整數作為引數,然後遍歷陣列並列印每個元素。注意,在函式定義中,陣列的大小並不需要顯式指定,因為函式接收的是指向陣列首元素的指標,而陣列的大小則透過另一個引數傳遞。
總之,函式和陣列是C語言程式設計中的基本概念,它們對於實現各種演算法和資料結構至關重要。透過理解和應用這些概念,可以編寫出高效、可維護的C語言程式。