一、表格
問題 | 答案 |
---|---|
這個作業屬於那個課程 | C語言程序設計II |
這個作業要求在哪里 | https://edu.cnblogs.com/campus/zswxy/CST2019-1/homework/9935 |
我在這個課程的目標是 | 學習好C語言,熟練掌握編譯代碼的相關技巧,掌握C語言的精髓 |
這個作業在那個具體方面幫助我實現目標 | 學會多分支結構switch語句的使用 |
參考文獻 | 百度,C語言程序設計 |
二、本周作業
1.PTA實驗作業
1.1 題目名1 計算天數
題目內容:
本題要求編寫程序計算某年某月某日是該年中的第幾天。
輸入格式:
輸入在一行中按照格式“yyyy/mm/dd”(即“年/月/日”)給出日期。注意:閏年的判別條件是該年年份能被4整除但不能被100整除、或者能被400整除。閏年的2月有29天。
輸出格式:
在一行輸出日期是該年中的第幾天。
輸入樣例1:
2009/03/02
輸出樣例1:
61
輸入樣例2:
2000/03/02
輸出樣例2:
62
1.1.1數據處理
數據表達:定義y,m,d,sum這些變量;並且把這些變量都定義為整型int
數據處理:先運用了switch語句預算出除了二月以外其它天數的可能性之和,在運用if-else的嵌套結構對閏年和不閏年情況進行討論。
偽代碼:
定義整型變量int y,m,d,sum;
輸入scanf("%4d/%2d/%2d",&y,&m,&d);
運用switch進行分支選擇;
if(y%4==0&&y%100!=0||y%400==0)
else進行討論;
輸出總天數
1.1.2實驗代碼截圖
1.1.3 造測試數據
輸入數據 | 輸出數據 | 說明 |
---|---|---|
2009/03/02 | 61 | 驗證題目所給數據 |
2000/03/02 | 62 | 驗證所給樣例2 |
2020/12/31 | 366 | 驗證閏年最后一天 |
2019/12/31 | 365 | 驗證非閏年最后一天 |
1.1.4 PTA提交列表及說明
提交列表說明:
1.部分錯誤:代碼不能算出閏年和不閏年一月的天數。所以在if-else中增添算閏年和不閏年一月的語句,即“if(m==1) sum=d;”語句。
2.答案正確:。。。。
1.2 題目2 整數的分類處理
題目內容:
給定 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.2.1 數據處理
數據表達:定義變量N,K,A1,A2,i,y,m;A3,sum;把N,K,A1,A2,i,y,m定義為整型,而把A3,sum定義為浮點型。
數據處理:首先運用for語句進行循環,再運用switch語句進行多分支選擇問題,最后再運用if-else語句進行A1,A2,A3輸出語句的判斷。
偽代碼:
定義整型變量int N,K,A1=0,A2=0,i,y,m=0;
定義浮點型變量double A3=0,sum=0;
輸入N;
for(i=1;i<=N;i++)
{
輸入余數
運用switch
運用if-else進行判斷輸出
1.2.2 實驗代碼截圖
1.2.3 造測試數據
輸入數據 | 輸出數據 | 說明 |
---|---|---|
8 5 8 7 6 9 1 3 10 | 9 3 6.5 | 驗證題目所給數據1 |
8 15 18 7 6 9 1 3 10 | 18 3 NONE | 驗證題目所給數據2 |
5 1 2 3 7 0 | 3 2 2.0 | 隨機驗證一組數據 |
6 2 3 5 6 8 9 | 9 NONE 5.0 | 驗證A2不存在對應輸出NONE的情況 |
1.2.4 PTA提交列表及說明
提交列表說明:
1.編譯錯誤:把int sum=0改成double sum=0。
2.編譯錯誤:把int A2改成int A2=0;把printf("%d %d %.1f",A1,A2,A3)分別改寫到if語句之后並且加上else進行輸出,else printf("%d ",A1);A2,A3也諸如此類修改。
3.答案錯誤:把A2=A2+1改為A2++(在devc++上開始用A2=A2+1總是錯誤,但改成A2++就對了但在pta運行中就不對)
4.答案錯誤:把for(i=1;i<N;i++)改寫為for(i=1;i<=N;i++)語句。
5.答案正確:。。。
2.代碼互評
同學代碼一:
自己代碼一:
代碼比較:
1.同學的代碼是先算閏年的累計天數,再算不是閏年的累計天數;而自己的則是先通過算閏年和不閏年的共同部分,再用if-else算出二月到底是多少天。
2.同學的代碼看起來更容易看一些,而自己的代碼在最后考慮是否是閏年二月的時候考慮的情況就有點復雜了。
3.同學運用了兩次switch語句而用的一次if-else的語句,而我運用了一次switch語句和多次if-else的語句。
同學代碼二:
自己代碼二:
代碼比較:
1.剛開始看到同學這一份代碼的時候被驚到了,寫的代碼行數比我少了好多,而且還運用了switch語句並沒有像我一樣運用if-else語句。
2.剛開始還不明白同學寫的【判斷條件 ? 表達式1 : 表達式2"】是什么意思,后來百度了一下發現是這樣解釋的“如果滿足判斷條件就執行表達式一,如果不滿足就執行表達式二”。
3.學習總結
3.1 學習進度條
周/日期 | 這周所花的時間 | 代碼行 | 學到的知識點簡介 | 目前比較迷惑的問題 |
---|---|---|---|---|
第一周(9.19-3.27) | 四天 | 40 | Hello world編程和Markdown語法 | 對待大部分內容都不理解 |
第二周(9.25-10.4) | 四天 | 35 | 華氏度與攝氏度的轉換 | 不理解數據類型 |
第三周(10.8-10.11) | 三天 | 90 | if-else語句、格式化輸入語句 | 分不清整型變量和浮點型變量 |
第四周(10.15-10.17) | 三天 | 100 | 有關for循環體的運用 | 有時候不清楚循環體是什么 |
第五周(10.22-10.25) | 三天 | 130 | 使用自定義函數來編程和生成乘方表和階乘表 | 不知道如何調試函數以及在哪里設置斷點 |
第六周(10.30-11.2) | 四天 | 180 | 分支結構、字符型數據類型 | 對待字符型題目還是不能夠准確理解 |
第七周(11.06-11.08) | 三天 | 190 | 學會多分支結構switch語句的使用 | 有時不能准確理解case后的有些語句 |
3.2 累積代碼行和博客字數
3.3 學習內容總結和感悟
3.3.1 學習內容總結
3.3.2 學習體會
1.在這一周我們又新學習了有關switch語句的運用,在這個語句中我明白了它是可以處理多分支選擇問題的語句,並且在使用的時候每個語句段中都要使用break語句。
2.switch語句的表達“switch(表達式)(case 常量表達式1:語句段1;break;case 常量表達式2:語句段2;break;。。。。)。”
3.雖然老師這次要求要用switch語句,但是我感覺有時候用起來不是像運用if-else語句那么的順手,可能是因為剛學還不太熟悉。
4.通過這次作業我發現自己對待case有關的表達還是存在一些疑惑,希望接下來的學習中能夠解答我的疑惑。