0.展示PTA總分
一維數組:
二維數組:
字符數組:
1.本章學習總結
1.1 學習內容總結
-
數組中如何查找數據,有哪些做法?
定義一個數組a[],假設這個數組中元素的下標為i,如果已經知道元素內容比如x,就可以通過條件語句if(a[i]==x)來判斷和查找數據了,這是在元素數量比較有限的情況下;如果是在元素數量比較大的情況下,可以用二分法來查找數據,在有序數組中不斷判斷中間數據和目標數據的大小,縮小范圍,大大減少了運行時間,提高效率。同樣查找數據的方法比如查找最大最小值可以使用冒泡法和選擇排序法。
-
數組中如何插入數據,怎么做,可以寫個偽代碼或動態圖展示方法?
- 過程:先找出插入點,再通過循環把插入點后面的數字向后移一位,給插入點空出空間,再讓插入點的值賦值為確定的數;
- 偽代碼:
for i=0 to i=n-1 do
if x<數組元素 then
已找出切入點跳出循環
end if
end for
for i=n to i=lop-1 do
插入點后的數字后移一位
end for
輸出改變后數組內容
在插入點放入已知數
-
數組中如何刪除數據,這個有多種做法,請一一展示。
-
覆蓋刪除:從要刪除的數開始到數組末尾,讓數組前一位等於后一位,即數組左移,直接覆蓋要刪除的數字,還要考慮數組下標的特別情況;
-
當有重復數字時可以調用輔助數組,時間和空間轉換,比如超星平台的hash數組,用數組內容作為hash數組的下標,遍歷數組一一核對;
-
數組中目前學到排序方法,主要思路?
1.冒泡排序:
臨近的數字兩兩進行比較,按照從小到大或者從大到小的順序進行交換,這樣一趟過去后,最大或最小的數字被交換到了最后一位,然后再從頭開始進行兩兩比較交換,直到倒數第二位時結束。最后一個數不需要比較,遍歷完n-1次之后會自動把最大最小值排到末尾開頭。
2.選擇排序:
算法思路:選擇排序,從頭至尾掃描序列,找出最小的一個元素,和第一個元素交換,接着從剩下的元素中繼續這種選擇和交換方式,最終得到一個有序序列。
比冒泡排序的思路更直觀;
-
數組做枚舉用法,有哪些案例?
枚舉在c語言中表示一個被命名的整型常數的集合,
數組的枚舉和重復數字的刪除極為相似;用hash數組進行空間轉換為時間
課堂派中也有利用枚舉求值的例題比如輸入兩個數第一個數不小於1,第二個數不大於100的判斷輸入是否正確,利用枚舉來定義可能的結果;
-
哈希數組用法,目前學過哪些案例,舉例展示。
重復數組的刪除:如下是對使用hash的函數的定義
1.2 本章學習體會
本章學習中,開始慢慢找到了pta題集做題的感覺,雖然還是停留在比較膚淺的階段,但是還是能感到做題不再沒有頭緒,但是粗心大意的壞習慣還沒有改掉,對於題集題目的理解還有認知盲區,在c語言小測時可以感覺到對題目很熟悉但是有一個或者幾個必要的點就是想不起來,也就是說我根本沒有完全的理解那種題型該怎么做,沒有轉化為自己的東西,這是很致命的問題,實踐編程能力較差,對各種題型的思路不清晰,就造成不友好的局面。還有對作業總是不及時完成的反省,着實感到不妥。已認識到存在的問題,會努力改正並努力追趕大家的步伐;
2.PTA實驗作業
2.1 題目名1
7-6 數組元素的刪除
完成數組元素的移動功能:假設數組有n個元素,輸入一個數x,把數組的第x個位置的元素刪除了,后面的元素依次前進一個位置。 重復若干次這樣的刪除,得到最后的結果。
2.1.1 偽代碼
for i=0 to i=k do
輸入x即要刪除的第幾個數
for i=x-1 to i=數組最大下標 do
數組元素左移以覆蓋第x個數
數組最大下標遞減
end for
end for
for i=0 to i=數組最大下標 do
輸出帶空格的數組元素
end for
if i=數組最大下標
輸出不帶空格的尾數元素
end if
2.1.2 代碼截圖
2.1.3 造測試數據
輸入數據n | 輸入數據k | 輸入數據x | 輸出數據 | 說明 |
---|---|---|---|---|
10 | 4 | 3 2 4 6 | 1 4 5 7 8 10 | 正常數據 |
1 | 4 | 3 2 4 6 | 1 | n=1時數據 |
4 | 4 | 1 2 3 4 | 全部刪除數據 |
2.1.4 PTA提交列表及說明
-
PTA提交列表:
-
PTA提交列表說明:
結果 | 原因 |
---|---|
多種錯誤 | 輸出數組元素時選擇的數組下標最大值較大 |
格式錯誤 | 空格的問題沒考慮 |
答案正確 | 改了下標加了空格換了代碼方式多次提交 |
2.2 題目名2
- 7-4 求矩陣中的最大小值
向一個n×m的數組中輸入一組整數(n<=10,m<=10),然后輸出其中的最大值、最小值,並輸出這兩個值的下標。
2.2.1 數據處理
偽代碼:
while 輸入的n和m都為有效數字 do
row,col初始化
輸入數組
max和min初始化
for i=0 to n do
for j=0 to m do
if max小於數組元素 do
數值交換
row,col的值隨之變化
end if
end for
end for
最小值的求法同理
2.2.2 代碼截圖
2.2.3 造測試數據
輸入數據n | 輸入數據m | 輸出數據 | 說明 |
---|---|---|---|
3 | 5 | max=98 row=0 col=4 min=11 row=1 col=0 | 正常數據 |
2 | 5 | max=98 row=0 col=4 min=11 row=1 col=0 | 正常數據 |
2 | 2 | max=93 row=1 col=1 min=11 row=1 col=0 | 正常數據 |
2.2.4 PTA提交列表及說明
-
PTA提交列表:
-
PTA提交列表說明:
結果 | 原因 |
---|---|
段錯誤 | 多加了一個行列初始化 |
答案錯誤 | 沒有注意n和m的有效情況 |
編譯錯誤 | col和row沒有用上 |
2.3 題目名3
7-3 字符串轉換成十進制整數
輸入一個以#結束的字符串,本題要求濾去所有的非十六進制字符(不分大小寫),組成一個新的表示十六進制數字的字符串,然后將其轉換為十進制數后輸出。如果在第一個十六進制字符之前存在字符“-”,則代表該數是負數。
2.3.1 數據處理
int a[800];
int b[800];//存儲過濾后的數組元素
int flag;//判斷是否有‘-’
int t;//判斷是否為十六進制數
int sum//存儲最后結果
2.3.2 代碼截圖
2.3.3 造測試數據
輸入 | 輸出 | 說明 |
---|---|---|
+-P-xf4+-1!# | -3905 | 正常數據 |
135+-Pdac# | 1269164 | 正常數據 |
0zr19*%D# | 413 | 正常數據 |
2.3.4 PTA提交列表及說明
-
PTA提交列表:
-
PTA提交列表說明:
結果 | 原因 |
---|---|
編譯錯誤 | 沒有考慮第二個for循環k=0的情況 |
部分正確 | 最后輸出沒有注意格式 |
答案正確 | 錯誤改正審核通過 |
3.閱讀代碼
代碼特點:
1.關於用后一個數描述前一個數的代碼描寫這方面比較細致,考慮的非常全面;
2.編寫的代碼也簡單易懂,給讀者能留下深刻印象;
3.但是類似於cin >> TestCase;這樣的語句看不太懂。