標籤:思路 += 演算法設計 設計 計算 而且 沒有 表達 函數
一、PTA實驗作業題目1:7-1 求組合數1.本題PTA提交列表
2.設計思路
階乘函數設計思路:
- 第一步: 定義函數類型為double型
- 第二步:定義兩個整形變數i,n,i用於計算階乘,n為函數變數,定義一個浮點型變數sum存放階乘
- 第三步: i=1,sum=1
- 第四步:sum=sum*i
- 第五步:i++
- 第六步:重複第三步,直到i>n
- 第七步:返還sum的值
主函數設計思路:
- 第一步:定義兩個整形變數m,n,定義一個浮點型變數result存放組合數結果
- 第二步:輸入m,n
- 第三步:調用Function Computeresult=fact(n)/(fact(m)*fact(n-m))
- 第四步:輸出result
流程圖:
3.本題調試過程碰到問題及PTA提交列表情況說明
- 碰到的問題:定義的階乘函數為double型,但返還值的類型定義為整形,導致答案部分正確
- 解決辦法:將int sun改為double sum
題目2:6-6 使用函數輸出水仙花數1.本題PTA提交列表
2.設計思路
判斷水仙花數函數(narcissistic()):
- 第一步:定義函數類型為整形,變數為整形變數number
- 第二步:定義整形變數left用於存放number對10取餘的餘數,整型變數count存放number的位元,sum整形變數存放每位元的次方的和 ,整形變數n,m用於儲存number
- 第三步:賦值n=number,m=number
- 第四步:計算n=n/10,
- 第五步:count++
- 第六步:重複第四步,直到n==0 (第三到第六步用於計算number的位元)
- 第七步:計算left=m%10
- 第八步:sum=sum+pow(left,count),
- 第九步:number=number/10
- 第十步:重複第七步,直到m==0
- 第十一步:判斷sum是否等於number,如果等於,返還1,否則返還0
輸出水仙花數函數(PrintN()):
- 第一步:定義函數為整形,變數為兩個整形變數m,n
- 第二步:定義整形變數i=m+1
- 第三步:調用判斷水仙花數函數,判斷narcissistic(i)是否等於1,如果是輸出i
- 第四步:i++
- 第五步:重複第三步,直到i>=n
流程圖:
3.本題調試過程碰到問題及PTA提交列表情況說明
碰到的問題:題目只要求輸出區間內的水仙花數,不包括端點,判斷條件錯誤,導致若端點為水仙花數是也輸出
例如此時不應該輸出371為水仙花數:
解決辦法:仔細閱讀題目後發現是開區間(m,n),從而將迴圈判斷條件i<=n改為i<n
題目3:6-9 使用函數驗證哥德巴哈猜想1.本題PTA提交列表
2.設計思路
流程圖:
3.本題調試過程碰到問題及PTA提交列表情況說明
二、同學代碼結對互評1.同學互評照片
2.My Code、互評同學代碼
My Code:
朱傑偉同學代碼:
3.我和同學代碼不同在哪裡?有哪些各自優勢?你更喜歡哪種代碼風格?如果同學代碼有錯的也請幫忙指出來哪裡出問題。
- 不同點以及各自的優勢:My Code在計算水仙花數的和時用了迴圈結構將每一位求出來冪運算後累加,而朱同學的代碼直接把每一位元都求出來直接相加。但朱同學的代碼只能計算10000以內的水仙花數,而我的可以計算更多位
- 更喜歡的代碼風格:相對本題更喜歡自己的代碼,朱同學的代碼沒有注釋,看著讓人不好理解
三、本周題目集的PTA最後排名
四、本周學習總結1.你學會了什嗎?
- 通過本周的學習我明白全域變數和局部變數的區別以及全域變數的優缺點。
- 本周還學習了資料類型,我學會了如何用科學計數法表示一個數,其中對於本周課程印象最深的就是a++和++a的區別,以及這兩個運算式的值的變化情況。
- 還學會了一個複雜的運算式中各個運算子的優先順序以及它們的運算順序。
- 本周PTA主要的錯誤點以及注意點:對於PTA中特定的輸出格式中的空格的考慮不到位,例如6-8 使用函數輸出指定範圍內的Fibonacci數以及6-7 使用函數輸出指定範圍內的完數這兩題以及本周上機考試的最後一題,這三題的演算法設計都不算難,但是題目固定的輸出格式導致有許多要考慮的地方,有時候考慮到其中一個特殊點的時候又會忽略另一個,而且做出來以後回過頭再看的時候發現其中有很多可以刪除簡化的地方,,主要原因還是演算法思路不夠好,以後再寫的時候要仔細構思考慮。
1.1 C語言哪些資料類型?
1.2 字元型資料需要注意地方?
- 字元型常量需要用‘’,‘0’與0中,‘0’為字元型,0為整形。
1.3 自增自減運算子?
1.4 運算子優先順序?
單目運算子優先順序比雙目運算子優先順序高。
單目運算子優先順序:
- 1:[] , ()
- 2:-- ,++ , ! , & , | , ~ ,sizeof
- 3: / , * , %
- 4:+ ,-
- 5:>> , <<
- 6:> , >= , < , <=
- 7:== , !=
- 8:&
- 9:^
- 10:|
- 11:&&
- 12:||
- 13:?:
- 14:= , += ,-= , *= , /= , %= ,
1.5 C語言哪些運算式?課堂派哪裡做錯,做錯的請在這裡分析原因?
- 算術運算式,賦值運算式,關聯運算式,邏輯運算式,逗號運算式,位元運算。
1.6 其他內容?
2.本周的內容,你還不會什嗎?
- 對於本周的資料結構的內容,對於位元運算還是不太明白,混淆位元運算符,對於一個複雜的位元運算運算式總是要看書才不會把每個運算子弄錯。
- 對於static的用法也不是太瞭解,可能是因為沒怎麼用在代碼中,不是很熟悉。
3.迴圈結構考試總結
本次上機考試存在以下幾點問題:
- 讀題不夠仔細。對題目沒理解清楚,這個問題出現在第三題,對於題目理解錯誤,題目要求輸出不大於輸入數的10個素數,輸入數的範圍為(50,20000),當輸入51時應該輸出小於51大於0的10個素數,而我理解成輸出小於51大於50的素數,導致答案一直錯誤。
- 思路不清晰。考試時對於最後一題的輸出格式一直沒弄清,對於輸出的情況總是丟三落四,可能也是有點心急,當時應該靜下心來仔細分析一下,理清思路寫演算法。
對本次考試不能說很滿意,因為本來可以做的更好但是卻沒有做到,下次考試要更加仔細,在下次考試前的這段時間我要加強設計思路這方面。
C語言部落格作業--函數