這個作業屬於哪個課程 | C語言程序設計II |
---|---|
這個作業的要求在哪里 | https://edu.cnblogs.com/campus/zswxy/CST2020-4/homework/11496 |
我在這個課程的目標是 | 學會自定義調用函數;回顧聯系已學的內容;學習優秀代碼,找出自己的不足 |
這個作業在那個具體方面幫助我實現目標 | PTA實驗作業;學習內容總結:代碼互評 |
參考文獻 | C語言程序設計 |
學號 | 20209051 |
1.PTA實驗作業
1.1害死人不償命的(3n+1)猜想
卡拉茲(Callatz)猜想:
對任何一個正整數 n,如果它是偶數,那么把它砍掉一半;如果它是奇數,那么把 (3n+1) 砍掉一半。這樣一直反復砍下去,最后一定在某一步得到 n=1。卡拉茲在 1950 年的世界數學家大會上公布了這個猜想,傳說當時耶魯大學師生齊動員,拼命想證明這個貌似很傻很天真的命題,結果鬧得學生們無心學業,一心只證 (3n+1),以至於有人說這是一個陰謀,卡拉茲是在蓄意延緩美國數學界教學與科研的進展……
我們今天的題目不是證明卡拉茲猜想,而是對給定的任一不超過 1000 的正整數 n,簡單地數一下,需要多少步(砍幾下)才能得到 n=1?
1.1.1 數據處理
數據表達:i,n都為整型,n直接輸入數值,i初次賦值后循環累加
數據處理:
表達式:n=(3.0*n+1)/2
流程結構:while結構,if-else結構
函數參數:int main為主函數;i,n為實參
1.1.2 實驗代碼截圖
1.1.3 造測試數據
輸入數據 | 輸出數據 | 說明 |
---|---|---|
3 | 5 | 自定義樣例 |
1000 | 72 | 最大 |
1 | 0 | 最小 |
1.1.4 PTA提交列表及說明
提交列表說明:
部分正確:使用do—while語句時,scanf函數返回值被忽略
運行超時:將n賦值,無意義
1.2 求組合數
本題要求編寫程序,根據公式算出從n個不同元素中取出m個元素(m≤n)的組合數。
建議定義和調用函數fact(n)計算n!,其中n的類型是int,函數類型是double。
1.2.1 數據處理
數據表達:i,n,m都為整型,result,a,b,c為浮點型
數據處理:
表達式:a=fact(n);b=fact(m);c=fact(n-m);product=product*i;
流程結構:for語句循環結構
函數參數:int main (void)為主函數;fact (int n)為調用函數,函數類型為整型;i,a,b,c為實參,product為形參
1.2.2 實驗代碼截圖
1.2.3 造測試數據
輸入數據 | 輸出數據 | 說明 |
---|---|---|
2 7 | result=21 | 自定義樣例 |
1 9 | result=9 | 結果在double類型范圍內 |
9 9 | result=1 | n=m時result最小 |
1.2.4 PTA提交列表及說明
提交列表說明:
編譯錯誤:m,n輸入的位置錯誤m>n,計算無意義;
函數首部后加了“;”
2. 代碼互評
- 同學代碼(1)
(2)
- 我的代碼
- 和兩位同學的代碼比起來,他們的明顯比我的更加簡潔,我設置的變量比較多。
- 解決問題的邏輯沒有太大的區別,但是我認為我多設定的變量,會使我的邏輯思路更加清晰,便於他人去閱讀理解。
- 其次第一份代碼中多使用了一次for語句,我覺得可以讓代碼更加簡潔
3.學習總結
3.1 學習進度條
周/日期 | 這周所花的時間 | 代碼行 | 學到的知識點簡介 | 目前比較迷惑的問題 |
---|---|---|---|---|
第十一周/11.14 | 37h | 475 | while語句循環;自定義調用函數 | 調用函數;pta中scanf函數返回值忽略的問題 |
3.2 累積代碼行和博客字數
3.3 學習內容總結和感悟
3.3.1 學習內容總結
3.3.2 學習體會
- 這一周學了自定義和調用函數,但是我還是沒有把形參和實參給捋清楚
- 數學邏輯真的特別重要,在設計循環結構中,沒有數學邏輯真的不行
- 閱讀理解能力真的也很重要,在PTA上做題的話真的需要很認真的把題目的意思給捋出來
- scanf函數的返回值忽略問題是真的沒有搞懂