作業資訊
這個作業屬於哪個課程 | 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 |