函數
7-1 求組合數(15 分)
本題要求編寫程序,根據公式Cnm=m!(n−m)!n!算出從n個不同元素中取出m個元素(m≤n)的組合數。
建議定義和調用函數fact(n)
計算n!
,其中n
的類型是int
,函數類型是double
。
1. 本題PTA提交列表
2. 設計思路
分別使用fact函數求累乘,再將最后結果進行處理
3.本題調試過程碰到問題及PTA提交列表情況說明
碰到問題:1.如何求累乘2.如何調用函數
第一次提交,函數最后return值有誤。return 0后無結果,反復查看后發現錯誤改正。
題目2.
7-3 求冪之和(15 分)
本題要求編寫程序,計算sum=21+22+23+⋯+2n。可以調用pow函數求冪。
1. 本題PTA提交列表
本題代碼
2. 設計思路
思路:設計函數能使參數進行求冪之和,主要結構為循環結構。
3.本題調試過程碰到問題及PTA提交列表情況說明
碰到問題:1.形參與實參的相互傳遞2.子函數傳值問題
第一次提交未在主函數中定義sum,固編譯錯誤,根據提示改正。
第二次提交時沒有在主函數中寫sum=f(n),所以子函數傳值無效,根據提示改正。
題目3.
7-5 近似求PI(15 分)
本題要求編寫程序,根據下式求π的近似值,直到最后一項小於給定精度eps。
2π=1+31!+3×52!+3×5×73!+⋯+3×5×⋯×(2×i+1)i!+⋯
本題提交列表
本題代碼
2.設計思路
應用循環結構求最后一項大小,同時求出各元素累加的值
3.本題調試過程碰到問題及PTA提交列表情況說明
碰到問題:循環邏輯不同,函數定義錯誤。
第一次提交輸出格式錯誤,最后一位多出一個0,將"%lf"改為“%.5”則正確。
#二、代碼互評
互評同學名稱:張瑜
題目
7-8 求n以內最大的k個素數以及它們的和(20 分)
本題要求計算並輸出不超過n的最大的k個素數以及它們的和。
2.代碼對比
我的
張瑜
3.我和同學代碼不同在哪里?有哪些各自優勢?你更喜歡哪種代碼風格?如果同學代碼有錯的也請幫忙指出來哪里出問題。
我用了數組結構,看起來稍顯復雜。張瑜的程序簡潔短小,一目了然,但數組結構可以清晰地表明程序是將數組中的數字往前推進,並且容易看懂,思路清晰,發現錯誤后也能順着思路盡快找到。我更喜歡我的代碼。
#三、PTA排名
#四、本周學習總結
1.你學會了什么?
1).函數的聲明,定義和調用
2)函數的功能
3).實參和形參的關系
4).在函數中,數據的傳遞
5).局部變量和全局變量
2.本周的內容,你還不會什么?
感覺關於子函數釋放結果的問題還有點迷糊,關於函數類型的選擇也不太清晰,還需多加強基礎知識。
3.其他總結
遞歸問題感覺一知半解,需要多找一些這方面的題型加深印象。
數組
題目1:
7-1 數組元素循環右移問題
一個數組A中存有N(>)個整數,在不允許使用另外數組的前提下,將每個整數循環向右移M(≥)個位置,即將A中的數據由(A0A1⋯AN−1)變換為(AN−M⋯AN−1A0A1⋯AN−M−1)(最后M個數循環移至最前面的M個位置)。如果需要考慮程序移動數據的次數盡量少,要如何設計移動的方法?
1. 本題PTA提交列表
2. 設計思路
將輸入的數儲存在數組中,右移后a[0]=a[3],a[1]=a[4],a[2]=a[5]。
故需要設計循環使a數組中數字下標進行循環。
3.本題調試過程碰到問題及PTA提交列表情況說明
碰到問題:1.如何輸入數組2.如何輸入數組3.如何將下標進行加減。
第一次提交,答案錯誤,輸入后數字之間無間隔,但同時無法用“ %d ”輸出,因為行末不能有間隔。故根據程序分析在第一循環中如果當i>n-1,則不需要輸出空格。在第二個循環中,i=n-m-1時不需要輸出空格,固將程序改動正確。
題目2.
7-2 求最大值及其下標(20 分)
本題要求編寫程序,找出給定的n個數中的最大值及其對應的最小下標(下標從0開始)。
1. 本題PTA提交列表
本題代碼
2. 設計思路
將相鄰量兩個數進行比較,如果順序錯誤則進行交換。如是循環。
3.本題調試過程碰到問題及PTA提交列表情況說明
碰到問題:如何比較大小,互相交換后找到最大值下標。
第一次提交時定義數組錯誤,不能直接定義a[n],查找書本翻看程序后糾正。
第二次提交時沒有令max=0,所以無法運行,反復試驗多次無果后進行詢問同學改正。
題目3.
7-6 冒泡法排序
將N個整數按從小到大排序的冒泡排序法是這樣工作的:從頭到尾比較相鄰兩個元素,如果前面的元素大於其緊隨的后面元素,則交換它們。通過一遍掃描,則最后一個元素必定是最大的元素。然后用同樣的方法對前N−1個元素進行第二遍掃描。依此類推,最后只需處理兩個元素,就完成了對N個數的排序。
本題要求對任意給定的K(<N),輸出掃描完第K遍后的中間結果數列。
本題提交列表
本題代碼
2.設計思路
一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重復地進行直到沒有再需要交換,也就是說該數列已經排序完成。
3.
3.本題調試過程碰到問題及PTA提交列表情況說明
碰到問題:循環邏輯不通,不知道如何使格式正確
第一次提交輸出格式錯誤,行末存在多余空格,分析后可以根據數組中元素下標判斷該元素是否為最后一個元素,若不是,則輸出空格,若是,則不輸出。
#二
排名
互評同學名稱:李彥嬋
2.代碼對比
3.我和同學代碼不同在哪里?有哪些各自優勢?你更喜歡哪種代碼風格?如果同學代碼有錯的也請幫忙指出來哪里出問題。
結構不同,彥嬋直接將下標從最大值往前輸,而我定義了一個子函數,使用下標的對換來實現。比較之下,彥嬋的程序更加簡潔明了,運用了技巧,而我的程序過於復雜,容易出錯並且不容易發現錯誤。我更喜歡彥嬋的風格,簡單易懂。
四、本周學習總結
1.你學會了什么?
1).學會了如何定義一維數組,二維數組
2).學會了如何將數組中的元素運用下標進行處理。
3).學會了不同輸入輸出數組的幾種不同方式
4).關於str系列函數的用法與原型
2.本周的內容,你還不會什么?
不知道如何分別進行行與列的查找並比較大小。
3.循環結構考試總結
1.哪題做錯了,怎么改?
所定義數組范圍過小,導致答案部分錯誤,定義足夠大的數組char a[1000000]
2.考試結果滿意么,怎么改進?
不滿意,應該多回歸書本,並且在聽完課之后立馬進行溫習並自己嘗試寫一遍,若有不懂應該立馬標注並及時解決。
3.其他總結。
多多練習,端正態度。
循環
#一
題目1.求平方根序列前N項和,本題要求編寫程序,計算平方根序列√1+√2+√3+⋯的前N項之和。可包含頭文件math.h
,並調用sqrt
函數求平方根
1. 本題PTA提交列表
代碼:
2.設計思路:先輸入一個數n,從1開始一直加一進行開根號處理,就要在加到n時在循環里,同時需要設置變量sum統計前n項總和
3.本題調試過程碰到問題及PTA提交列表情況說明
碰到問題:如何輸出兩位小數
調試過程
錯誤:把num寫成n,n未定義。檢查后改正。
題目2.打印九九口訣表
1. 本題PTA提交列表
本題代碼:
2.設計思路:
設計兩個循環,使第一個數為1,第一個循環使第二個數從一加至九,分別相乘后輸出,第二個循環使第一個數從一加至九,而第一個循環包含在第二個循環里。
3.本題調試過程碰到問題及PTA提交列表情況說明
碰到問題:1.怎樣使每條輸出語句對齊2.怎樣形成一個三角。
調試過程
語句無法對齊,請教后改正。
兩個數對調(i,j對調固答案錯誤。)在運行后發現改正。
題目3.求1到100的和(10 分)
本題要求編寫程序,計算表達式 1 + 2 + 3 + ... + 100 的值。
1. 本題PTA提交列表
代碼:
2.設計思路:設計一個循環在循環里,1從1加到100,同時每個數進行累加
3.本題調試過程碰到問題及PTA提交列表情況說明
碰到問題:不知道如何進行累加
調試過程
輸出格式錯誤,根據調整后改正。
#二.截圖本周目集的PTA最后排名
2.我的代碼、互評同學代碼截圖
同學名稱:林芷逸
3.我和同學代碼不同在哪里?有哪些各自優勢?你更喜歡哪種代碼風格?如果同學代碼有錯的也請幫忙指出來哪里出問題。
基本結構是相同的,但芷逸的代碼稍顯復雜,語句比較長。我的代碼定義的變量名稱也更直接明了容易辨認。同時在i<n-1這種細節上較為注意。
我比較喜歡自己的代碼。
四.本周學習總結
1.你學會了什么?
1.學會了多種循環結構,for,while,do...while的結構上的不同以及應用方式。
2.循環嵌套
2.本周的內容,你還不會什么?
不知道如何進行循環輸入和算權重分配,有大概的思路但無法進行編程。
3.循環結構考試總結
1.哪題做錯了
以下正確定義與賦值的語句是________ A、int x = y = -1 B、char c = 65; C、float y == 1.0; D、double x = 12.3E2.5
選了A,但賦值需要int x=-1,y=-1,本題答案選b
2.考試結果滿意么,怎么改進?
不滿意,多進行代碼練習,多翻書,多看學習視頻,熟能生巧。
3.其他總結
剛開始學習c語言,感覺不是很適應,不能舉一反三,很多基礎的東西容易忘記,還需加強。