一、表格
問題 | 答案 |
---|---|
這個作業屬於那個課程 | C語言程序設計II |
這個作業要在哪里 | https://edu.cnblogs.com/campus/zswxy/CST2019-1/homework/9935 |
我在這個課程的目標是 | 深入了解C語言,爭取掌握更多的數據類型及結構,熟練地編譯有效代碼 |
這個作業在那個具體方面幫助我實現目標 | 熟練使用新的知識點switch結構,幫助我掌握更多的編程結構,擴展知識面 |
參考文獻 | C語言程序設計、百度 |
二、本周作業
1. PTA實驗作業
1.1 題目名1
7-13 整數的分類處理 (20 分)
給定 N 個正整數,要求你從中得到下列三種計算結果:
A1 = 能被 3 整除的最大整數
A2 = 存在整數 K 使之可以表示為 3K+1 的整數的個數
A3 = 存在整數 K 使之可以表示為 3K+2 的所有整數的平均值(精確到小數點后 1 位)
輸入格式:
輸入首先在第一行給出一個正整數 N,隨后一行給出 N 個正整數。所有數字都不超過 100,同行數字以空格分隔。
輸出格式:
在一行中順序輸出 A1、A2、A3的值,其間以 1 個空格分隔。如果某個數字不存在,則對應輸出NONE。
輸入樣例 1:
8
5 8 7 6 9 1 3 10
輸出樣例 1:
9 3 6.5
輸入樣例 2:
8
15 18 7 6 9 1 3 10
輸出樣例 2:
18 3 NONE
1.1.1 數據處理
數據表達:整型變量int(N,i,b,remainder,max,num),雙精度浮點型double(average,sum,c)。N、num是輸入的個數和數。
數據處理:運用了for語句、switch語句、if-else語句。這道題把余數作為變量表達式,判斷余數為0、1、2.用到了賦值表達式、關系表達式。
偽代碼如下:
定義輸入
for(i=1;i<=N;i++){ →依次輸入每一個數
switch(){
case 0:if(num>max)
max=num;break; →選出符合條件最大的數A1
case 1:→A2
case 2:→A3
break;
}}
if-else{} →判斷輸出數值還是NONE
打印輸出
1.1.2 實驗代碼截圖
1.1.3 造測試數據
輸入 | 輸出 | 說明 |
---|---|---|
8/5 8 7 6 9 1 3 10 | 9 3 6.5 | 三個數都存在 |
8/15 18 7 6 9 1 3 10 | 18 3 NONE | 有一個不存在的值 |
4/3 6 9 0 | 9 NONE NONE | 有兩個值不存在 |
1.1.4 PTA提交列表及說明
- 答案錯誤:輸出上存在錯誤。第三個數是平均數,可能是小數,但我把average設成整型。所以第三個數一直是0。
注釋:
這道題對我來說有點難,一直在Dev上測試,出現了很多錯誤。但是在不斷修改,編譯運行中一點一點的改正了。后來三個數都存在的答案是對的,但是一旦有不存在的情況,一直就是0而不是NONE。所以最后用了三個if-else語句來判斷輸出。因為三個輸出是分開的所以還要注意空格的情況。
1.2 題目名2
7-12 統計學生成績 (15 分)
本題要求編寫程序讀入N個學生的百分制成績,統計五分制成績的分布。百分制成績到五分制成績的轉換規則:
大於等於90分為A;
小於90且大於等於80為B;
小於80且大於等於70為C;
小於70且大於等於60為D;
小於60為E。
輸入格式:
輸入在第一行中給出一個正整數N(≤1000),即學生人數;第二行中給出N個學生的百分制成績,其間以空格分隔。
輸出格式:
在一行中輸出A、B、C、D、E對應的五分制成績的人數分布,數字間以空格分隔,行末不得有多余空格。
輸入樣例:
7
77 54 92 73 60 65 69
輸出樣例:
1 0 2 3 1
1.2.1 數據處理
數據表達:整型變量(N,grade,i ,a,b,c,d,e,x),其中a,b,c,d,e是用來記錄五個等級的總數。N,grade是輸入的值。x表示成績的前一位或者兩位。
數據處理:用了for語句、if-else語句、switch語句。switch表達式時x,常量表達式是1,2,3,4,5,6,7,8,9,0,其中case9和10是一個輸出樣例,case0和1,2,3,4,5是一個輸出。運用了賦值表達式、關系表達式、邏輯表達式。
偽代碼如下:
定義輸入
for(i=1;i<=N;i++){ →依次輸入成績
if-else{} →判斷五個等級的人數
}
switch(x){
case 9:case 10:→第一個等級
case 8: →第二個等級
case 7: →第三個等級
case 6: →第四個等級
case 5:case 4:case 3:case 2:case 1:case 0:→第五個等級
break;
打印輸出
1.2.2 實驗代碼截圖
1.2.3 造測試數據
輸入 | 輸出 | 說明 |
---|---|---|
7/77 54 92 73 60 65 69 | 1 0 2 3 1 | 驗證題目數據 |
4/100 98 87 45 | 2 1 0 0 1 | 有最大分100且有分數段沒有 |
7/0 12 67 78 89 96 65 | 1 1 1 2 2 | 有最低分0 |
1.2.4 PTA提交列表及說明
注釋:
這道題沒有錯過,主要是一直在Dev上測試。我覺得這道題的關鍵是幾個等級的情況,特別的case10和case9是一個等級,case0、case1、case2、case3、case4、case5是一個等級,這幾個等級可以合並,例如case 10:case9:。
2. 代碼互評
自己代碼①
同學代碼②
同學代碼③
評論:
- 這三份代碼都是第一題,但是編程上都是有區別的。
- 代碼①是以閏年和非閏年兩種情況直接從一月到十二月依次寫出;代碼②是把每月有相同天數的先合並起來,然后在二月里判斷閏年與非閏年加上其天數;代碼③是先把除二月以外的表達出來,在后面判斷閏年與非閏年中再判斷一月、二月以及其他月的天數。
- 這三份代碼的相同點是都以月份為變量,並且判斷二月這一特殊的月份。
3. 學習總結
3.1 學習進度條
周/日期 | 這周所花的時間 | 代碼行 | 學到的知識點簡介 | 目前比較困惑的問題 |
---|---|---|---|---|
1/9-21 | 2天 | 30 | 初步接觸編程,學習編譯Hello,World! | 無 |
2/9-30 | 2天 | 20 | 學習了浮點型變量,及溫度轉換 | 無 |
3/9-15 | 3天 | 76 | 使用分段函數了解到if-else語句以及數據類型 | 對於定義數值還是不太清楚 |
4/10-16 | 3天 | 100 | for語句 | for循環進行中不清楚循環的細節 |
5/10-24 | 3 天 | 155 | 學習到了自定義函數 | 自定義函數的具體定義過程,實參形參有些迷惑 |
6/11-1 | 3天 | 250 | 學習使用if-else與for語句的嵌套,初步了解了字符型變量 | 對於字符型變量不是很懂,不明白其作用 |
7/11-7 | 2天 | 200 | 這周學習了新的分支結構switch結構,這也適用於選擇的情況,其作用類似於if-else。 | switch后面的變量表達式和case后的常量表達式弄不清。 |
3.2 累計代碼行和博客字數
3.3 學習內容總結
3.4 學習體會
- 這周學習了分支結構switch語句,其內容是switch(表達式){case 常量表達式1:語句段1;break;case 常量表達式n:語句段n;break;}。
- 這周知識感覺其作用和if-else的作用差不多,都是用於選擇不同的情況,但是我感覺表達式與常量表達式有時不太能想明白,或者說不知道該設成什么樣。而且我感覺有些題目還是用if-else語句較簡單,也好理解。可能用switch會讓代碼簡單一些。
- 這周PTA雖然我用了switch語句,但也用了if-else語句、for語句,這也算是內容復習、新舊知識結合了。