2024-2025-1 學號20241315《計算機基礎與程式設計》第八週學習總結

779315發表於2024-11-17

作業資訊

這個作業屬於哪個課程 2024-2025-1-計算機基礎與程式設計
這個作業要求在哪裡 <作業要求的連結>https://www.cnblogs.com/rocedu/p/9577842.html#WEEK08
這個作業目標 功能設計與物件導向設計 物件導向設計過程 面嚮物件語言三要素 彙編、編譯、解釋、執行
作業正文 https://www.cnblogs.com/tanzitian11/p/18549754

教材學習內容總結

《電腦科學概論(第七版)》第9章
程式設計語言範型:

命令式範型
程序導向:以過程為中心,將程式看作一系列按順序執行的步驟,注重解決問題的具體流程。
物件導向:以物件為基礎,把現實世界中的事物抽象成物件,透過物件之間的互動來解決問題。物件包含資料(屬性)和運算元據的方法(行為),具有封裝、繼承、多型等特性。
宣告式範型:
函式式模型:強調使用函式來進行計算和程式設計,函式被視為一等公民,可以作為引數傳遞、返回值或儲存在資料結構中。函數語言程式設計避免了可變狀態和副作用,注重函式的組合和變換。
邏輯程式設計:基於邏輯推理的程式設計正規化,程式由一系列邏輯規則和事實組成,透過邏輯推理引擎來求解問題。
高階程式設計語言的功能性:

布林表示式:用於表示邏輯條件,是程式中進行條件判斷和控制流程的基礎。
資料歸類:涉及到資料的型別和分類,不同的資料型別有不同的操作和儲存方式,程式設計語言需要提供相應的資料型別來支援對各種資料的處理。
輸入/輸出結構:程式與外部世界進行互動的方式,包括從使用者獲取輸入和向使用者輸出結果,以及與檔案、網路等外部裝置進行資料交換。
控制結構:用於控制程式的執行流程,如順序結構、選擇結構(如 if 語句)、迴圈結構(如 for 迴圈、while 迴圈)等。
面嚮物件語言的功能性:

封裝:將資料和運算元據的方法封裝在一個類中,對外隱藏內部的實現細節,只提供公共的介面供外部訪問,提高了程式碼的安全性和可維護性。
類:是物件的模板或藍圖,定義了物件的屬性和方法,透過類可以建立多個具有相同屬性和行為的物件。
繼承:子類可以繼承父類的屬性和方法,並可以在此基礎上進行擴充套件和修改,實現了程式碼的複用和擴充套件。
多型:不同類的物件可以對同一訊息做出不同的響應,增加了程式的靈活性和可擴充套件性。
過程設計與物件導向設計的區別:

過程設計:側重於解決問題的具體步驟和過程,將問題分解為一系列的函式或過程,透過函式的呼叫來實現程式的功能。
物件導向設計:更關注問題中的物件及其相互關係,將問題域中的實體抽象成物件,透過物件之間的訊息傳遞和協作來解決問題。
在《C語言程式設計》第7章內容總結
陣列的定義和宣告
一維陣列:介紹一維陣列的基本語法。例如,int arr[5]; 定義了一個名為 arr 的整型陣列,它可以儲存5個整數。陣列的下標從0開始,所以可以透過 arr[0]、arr[1]等訪問陣列中的元素。
二維陣列:int matrix[3][4]; 定義了一個3行4列的二維整型陣列。它在記憶體中是按行儲存的,訪問元素時使用雙下標形式,如 matrix[1][2] 表示訪問第2行(下標從0開始)第3列的元素。
陣列的初始化
一維陣列初始化:可以在定義陣列時進行初始化,如 int arr[3] = {1, 2, 3};,也可以部分初始化,如 int arr[5]= {1, 2};,此時未初始化的元素會被自動初始化為0(對於全域性陣列和靜態陣列)或不確定的值(對於區域性陣列)。
二維陣列初始化:例如,int matrix[2][3]={{1,2,3},{4,5,6}};
陣列在記憶體中的儲存方式
一維陣列:在記憶體中是連續儲存的,元素之間的地址是連續的。例如,對於 int arr[5];,如果 arr 的首地址是 0x1000,那麼 arr[1] 的地址可能是 0x1004(假設 int 型別佔4個位元組)。
二維陣列:對於二維陣列,它的行與行之間也是連續的。比如對於 int matrix[3][4];,可以把它看作是一個包含3個元素的一維陣列,每個元素又是一個包含4個整數的一維陣列(注意:二維陣列的列不可以省略)。
陣列作為函式引數
當陣列作為函式引數時,實際上傳遞的是陣列的首地址。
例如
int Readscore(int score[],int n);
其中,n代表了score陣列的下標
陣列的長度(大小)
不同的程式語言獲取陣列長度的方式不同。在 C 和 C++ 中,對於一個陣列int cArray[6];,沒有內建的函式來獲取陣列長度,但是可以透過sizeof(cArray)/sizeof(cArray[0])來計算陣列的長度(前提是陣列沒有發生指標衰減等情況)。
在 Java 和 JavaScript 中,可以透過屬性來獲取陣列長度。例如在 Java 中,對於陣列> int[] javaLengthArray = {17, 18, 19};,可以使用javaLengthArray.length來獲取陣列的長度 3。在 JavaScript 中,對於陣列let jsLengthArray = [20, 21, 22];,可以使用jsLengthArray.length來獲取長度。
三、多維陣列
概念
多維陣列是陣列的陣列。例如二維陣列可以看作是一個表格,其中行和列組成了元素的位置。在 C 語言中,定義一個二維整數陣列可以這樣寫:int twoDArray[3][4];,這表示有一個二維陣列,它有 3 行 4 列,總共可以儲存 3 * 4 = 12 個整數。
二維陣列的索引也是從 0 開始,twoDArray[0][0]表示第一行第一列的元素,twoDArray[0][1]表示第一行第二列的元素,以此類推。
儲存方式和訪問
二維陣列在記憶體中也是按照一定順序儲存的。對於 C 語言中的二維陣列,它是按行主序儲存的,也就是說,先儲存第一行的所有元素,然後再儲存第二行的元素,依此類推。
訪問二維陣列元素的方式和訪問一維陣列類似,透過兩個索引來定位元素。

基於AI的學習






上週考試錯題總結

  • 錯題1
    如果整數A的全部因子(包括1,不包括A本身)之和等於B;且整數B的全部因子(包括1,不包括B本身)之和等於A,則A和B稱為親密數。求10000以內的親密數。
    **輸出格式要求:"(%4d,%4d)\n"
#include <stdio.h>
int main()
{
    int a, b, i, n;
    for (a = 1; a < 10000; a++)
    {
        b = 0;
        for (i = 1; i <= a / 2; i++)
        {
            if (a % i == 0)
                b += i;
        }
 
        n = 0;
        for (i = 1; i <= b / 2; i++)
        {
            if (b % i == 0)
                n += i;
        }
        if (n == a && a < b)
            printf("(%4d,%4d)\n", a, b);
    }
 
    return 0;
}

理解情況:沒有很好地去理解題目的意思,沒有把數學模型轉換成程式語言,邏輯思維能力還是有待提高。

  • 錯題2
    請按如下函式原型編寫計算1~n之間的所有素數之和的程式。
    int IsPrime(int x)
    在主函式中呼叫該函式計算,並輸出1~n之間的所有素數之和
#include<stdio.h>
#include<math.h>
int IsPrime(int x);
int main()
{
    int m = 3;
    int sum = 2;
    int n;
    scanf("%d", &n);
    for (m = 3; m <= n; m++)
    {
        if (IsPrime(m))
        {
            sum += m;
        }
    }
    printf("%d", sum);
    return 0;
}
int IsPrime(int x)
{
    int i, flag = 1;
    int squareRoot = (int)sqrt(x);
    if (x <= 1)
    {
        flag = 0;
    }
    for (i = 2; i <= squareRoot && flag; i++)
    {
        if (x % i == 0)
        {
            flag = 0;
        }
    }
    return flag;
}

理解情況:沒有很好地複習。忘了數學怎麼表達。

  • ...

其他

感悟:還得練。

學習進度條

程式碼行數(新增/累積) 部落格量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第六週 200/200 1/2 20/20
第七週 300/500 1/4 18/38
第八週 700/1000 1/7 25/60
第九周 0/1300 0/9 0/90

相關文章