學期:2024-2025-1 學號:20241303 《計算機基礎與程式設計》第七週學習總結

段蕾發表於2024-11-10

作業資訊

這個作業屬於哪個課程 <班級的連結>(如2024-2025-1-計算機基礎與程式設計
這個作業要求在哪裡 <作業要求的連結>(如2024-2025-1計算機基礎與程式設計第七週作業
這個作業的目標 <寫上具體方面>電腦科學概論(第七版)第8章 並完成雲班課測試,《C語言程式設計》第6章並完成雲班課測試
作業正文 ... 本部落格連結

教材學習內容總結

《電腦科學概論(第七版)》第8章

  1. 抽象資料型別
    • 抽象資料型別是對資料及對資料操作的封裝,使用者只需要關心其邏輯特性而不必瞭解具體的實現細節。它提供了一種更高層次的資料抽象方式,使得程式的設計和理解更加容易。
  2. 資料結構
    • :是一種具有特殊操作規則的線性表,遵循“後進先出”(LIFO)的原則。就像一個堆疊的盤子,最後放上去的盤子最先被拿走。在計算機程式中,棧常用於函式呼叫、表示式求值等場景,例如在程式呼叫函式時,函式的引數、區域性變數等資訊會被壓入棧中,函式執行結束後再從棧中彈出。
    • 佇列:也是一種線性表,但遵循“先進先出”(FIFO)的原則。類似於排隊買票,先來的人先買到票。佇列在計算機系統中常用於任務排程、訊息傳遞等場景,比如作業系統中的任務佇列,按照任務到達的先後順序進行處理。
    • 列表:是一種常見的資料結構,可以分為陣列實現的列表和鏈式實現的列表。陣列實現的列表在記憶體中是連續儲存的,訪問元素的速度較快,但插入和刪除元素的操作比較耗時;鏈式實現的列表則是透過節點之間的連結來儲存資料,插入和刪除元素相對較方便,但訪問元素需要遍歷連結串列。
    • :是一種分層的資料結構,具有根節點、子節點和葉節點等概念。二叉樹是樹的一種特殊形式,每個節點最多有兩個子節點。二叉樹有三種遍歷方式,分別是前序遍歷(先訪問根節點,再遍歷左子樹,最後遍歷右子樹)、中序遍歷(先遍歷左子樹,再訪問根節點,最後遍歷右子樹)和後序遍歷(先遍歷左子樹,再遍歷右子樹,最後訪問根節點)。
    • :圖是由節點(頂點)和邊組成的資料結構,可以分為有向圖和無向圖。圖在現實生活中有很多應用,比如社交網路中的人際關係圖、地圖導航中的道路圖等。
  3. 引數傳遞:介紹了形參和實參的區別。形參是在函式定義時指定的引數,僅在函式內部有效,用於接收呼叫函式時傳遞的實際引數的值;實參是在呼叫函式時傳遞給函式的具體數值或變數。
  4. 子程式:子程式是一段可以被其他程式呼叫的程式碼模組,它可以提高程式碼的複用性和可維護性。透過將一些常用的功能封裝成子程式,在程式的不同部分可以多次呼叫,減少了程式碼的重複編寫。

《C 語言程式設計(第四版)》第六章:

一、函式的基本概念

函式是 C 語言程式的基本組成模組,它將一個較大的程式任務分解為若干個較小且相對獨立的子任務,每個子任務由一個函式來實現。這樣可以提高程式的可讀性、可維護性和可複用性。一個函式由函式頭和函式體兩部分組成。函式頭包含函式的返回型別、函式名和引數列表(形式引數);函式體則包含了在函式被呼叫時執行的一系列語句,用花括號括起來。

二、函式的定義

函式定義的一般形式為:
返回型別 函式名(形式引數列表)
{
宣告部分
語句部分
}

例如:

int max(int x, int y)
{
    int z;
    if (x > y)
        z = x;
    else
        z = y;
    return z;
}

這裡定義了一個名為 max 的函式,它接受兩個 int 型別的引數 xy,在函式體中比較這兩個引數的大小,將較大的值賦給變數 z,並透過 return 語句返回 z 的值。

三、函式的宣告

函式宣告的作用是把函式的名字、函式型別以及形參型別、個數和順序通知編譯系統,以便在呼叫該函式時系統按此進行對照檢查。函式宣告可以在主函式之前,也可以在主函式內部,但在呼叫函式之前。其一般形式為:
返回型別 函式名(引數型別列表);

例如:int max(int, int);

如果函式在主函式之前定義,則可以不進行宣告,因為編譯系統在編譯主函式之前已經知道了函式的相關資訊。

四、函式的引數傳遞

  1. 值傳遞
    在函式呼叫時,將實參的值複製一份傳遞給形參。形參和實參分別佔用不同的記憶體單元,對形參的修改不會影響實參的值。例如:
#include <stdio.h>

void swap(int a, int b)
{
    int temp;
    temp = a;
    a = b;
    b = temp;
    printf("在 swap 函式中:a = %d, b = %d\n", a, b);
}

int main()
{
    int x = 3, y = 5;
    swap(x, y);
    printf("在 main 函式中:x = %d, y = %d\n", x, y);
    return 0;
}

在這個例子中,swap 函式試圖交換兩個引數的值,但由於是值傳遞,在 swap 函式中對 ab 的修改不會影響到 main 函式中的 xy

五、函式的返回值

函式可以返回一個值給呼叫它的函式。返回值的型別由函式定義時的返回型別指定。在函式體中使用 return 語句返回值,return 語句後面可以跟一個表示式,該表示式的值就是函式的返回值。當函式執行到 return 語句時,函式立即結束並將返回值帶回撥用處。如果函式不需要返回值,則將返回型別定義為 void。例如:

double average(int a, int b)
{
    return (double)(a + b) / 2;
}

這個函式計算兩個整數的平均值並以 double 型別返回。

六、函式的巢狀呼叫

C 語言中函式可以巢狀呼叫,即一個函式在執行過程中可以呼叫另一個函式。例如:

#include <stdio.h>

int f1(int x)
{
    return x * x;
}

int f2(int x)
{
    return f1(x) + 1;
}

int main()
{
    int a = 3;
    printf("結果:%d\n", f2(a));
    return 0;
}

在這個例子中,main 函式呼叫 f2 函式,f2 函式又呼叫 f1 函式來完成特定的計算。

七、函式的遞迴呼叫

函式直接或間接呼叫自身稱為遞迴呼叫。遞迴函式通常包含兩個部分:遞迴部分和終止條件。遞迴部分用於將問題不斷分解為規模更小的子問題;終止條件用於在問題規模足夠小時停止遞迴,防止無限遞迴。例如計算階乘的遞迴函式:

int factorial(int n)
{
    if (n == 0 || n == 1)
        return 1;
    else
        return n * factorial(n - 1);
}

在計算 n 的階乘時,不斷呼叫自身計算 n - 1 的階乘,直到 n 為 0 或 1 時停止遞迴。

八、變數的作用域和生存期

  1. 作用域

    • 區域性變數:在函式內部或複合語句內部定義的變數稱為區域性變數,其作用域僅限於定義它的函式或複合語句內部。
    • 全域性變數:在函式外部定義的變數稱為全域性變數,其作用域從定義位置開始到原始檔結束,可以被多個函式共享。但過多使用全域性變數可能會導致程式的可讀性和可維護性變差,並且容易引起命名衝突等問題。
  2. 生存期

    • 動態儲存變數:區域性變數屬於動態儲存變數,在函式呼叫時分配記憶體空間,函式執行結束時釋放記憶體空間。
    • 靜態儲存變數:使用 static 關鍵字修飾的區域性變數或全域性變數屬於靜態儲存變數。靜態區域性變數在函式第一次呼叫時初始化,其生存期延長至整個程式執行期間,但作用域仍侷限於函式內部;靜態全域性變數的作用域限制在定義它的原始檔內,生存期為整個程式執行期間。

透過對函式相關知識的深入理解和掌握,可以編寫出結構更加清晰、功能更加強大且易於維護的 C 語言程式。

基於AI的學習

程式碼除錯中的問題和解決過程

問題:輸入1個字元,若為字母,輸出"Character",若為數字,輸出"Number",否則輸出"Not character or number"。
解決方法:尋找AI的幫助,瞭解到了新的知識
呼叫新的函式

#include<stdio.h>
 #include<ctype.h>
 int main()
{
char a;
scanf("%c",&a);
if(isalpha(a))
printf("character");
else if(isdigit(a))
printf("number");
else
printf("not character or number");
return 0;
}

學習進度條

程式碼行數(新增/累積) 部落格量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第五週 900/1500 1/2 20/30
第六週 1100/1600 1/4 18/38
第七週 1300/1800 1/7 22/60
第八週 1300/1300 0/9 30/90

相關文章