C語言部落格作業--函數

來源:互聯網
上載者:User

標籤:考試總結   perfect   進位   主函數   images   思考   合數   原來   關係   

一、PTA實驗作業題目1 (6-7)(1).本題PTA提交列表

(2)設計思路設計第一個函數判斷是否完數 int factorsum( int number )
  • 定義sum、i;sum初始化歸0,迴圈變數i
  • 若number=1,則sum=1
  • i=1,當i小於number時迴圈
  • 若number能被i整除,
  • sum+=i
  • 返回sum的值
設計第二個函數 void PrintPN( int m, int n )逐行輸出每個完數的因子累加形式的分解式
  • 標誌變數flag=1,迴圈變數i
  • for (;m<=n;m++)
  • 若m等於1,
  • flag=0
  • 輸出1 = 1\n
  • factorsum( m ) == m &&m !=1
  • flag=0
  • 輸出m = 1;
  • 進入迴圈
  • i=2,當i小於m時迴圈,i++
  • m%i==0成立
  • 輸出 + i的值
  • 當內迴圈結束時再輸出分行符號
  • 外迴圈結束
  • flag==1
  • 輸出No perfect number
  • 函數結束
(3)調試問題及解決方案
  • 發現當number的值為1時會返回0,所以number=1時不會輸出1 is a perfect number;並且1 = 1不輸出,等號後面的空格沒有輸出
  • 加入判斷當number的值為1時返回1,迴圈中當m=1時輸出1 = 1並換行

  • 發現輸出中的有的數字後邊多了一個空格
  • 在printf語句中修改,並對判斷輸出條件修改

題目2(6-8)(1).本題PTA提交列表

(2)設計思路設計第一個函數 int fib( int n )實現輸出第t個fib數
  • 定義迴圈變數i,Fibonacci數列初始兩數a、b(全為1),count(a+b之和)
  • n==1||n==2
  • return 1
  • i=3,當i小於等於n時迴圈,i++
  • count=b+a
  • b=a
  • a=count
  • 迴圈結束
  • return count
設計第二個函數 void PrintFN( int m, int n )實現一行中輸出給定範圍[m, n]內的所有Fibonacci數
  • 定義迴圈變數i,標誌變數flag=0
  • 當m小於等於n時迴圈;m++
  • i=1,迴圈終止條件在迴圈中給出
  • m==fib (i) && flag==0,進入分支
  • m==1
  • 輸出1 1
  • flag=1;
  • 回到第一個迴圈(break;
  • 若m不等於1,
  • 輸出m,
  • flag=1,
  • 回到第一個迴圈
  • m==fib (i) && flag==1
  • 輸出空格+m的值
  • 回到第一個迴圈
  • fib(i)>m
  • 回到第一個迴圈
  • i迴圈結束
  • flag==0
  • 輸出No Fibonacci number
(3)調試問題及解決方案
  • 輸出的數不正確,並且,當n等於1或2時,輸出的值也不正確
  • 原因在於我沒有把n=1、n=2的情況特殊判斷,並且先交換了i、j、k的值,導致count=1時k就已經等於3
  • 解決方案:先提出n=1、n=2的情況,使當它們成立時返回1;再把和的式子放在後邊來執行
  • 輸出可以,但是沒有設定跳出條件,所以無限迴圈,且每個數字後都有一個空格,不符合題目要求,而且,當m=n=1時,輸出的結果就不正確
  • 重新調整代碼,調用之前定義的函數,當m等於fib(i)且flag=0時:若m等於1,就特殊輸出,並且跳出i 的迴圈等等,就可以實現題目要求

題目3 (7-1)(1).本題PTA提交列表

(2)設計思路設計實現組合數計算功能的函數 double fact(int n)
  • 定義迴圈變數i,雙精確度變數result,並將其初始化為1
  • i=1;當i小於等於n時迴圈;i++
  • result=i*result;
  • i迴圈結束
  • return result;
主函數 int main ()
  • 設計變數m、n
  • 輸入m、n的值
  • n==0
  • 輸出result = 1
  • 若n不為0,
  • 輸出fact(n) / ( fact(m) * fact(n-m) )的值
(3)調試問題及解決方案
  • 用的是int而不是double,導致答案錯誤
  • 由於沒有對n=0做特殊處理,所以輸出了result = 0這一錯誤答案,使n==0時輸出result = 1即可

二、同學代碼結對互評1.同學互評照片

2.My Code、互評同學代碼
  • My Code
  • 他的代碼
3.我和同學代碼不同在哪裡?有哪些各自優勢?你更喜歡哪種代碼風格?如果同學代碼有錯的也請幫忙指出來哪裡出問題。1)不同在於對迴圈條件的確立,以及變數數的不同2)他的優勢在於能用較簡潔的代碼去實現題目要求的功能;而我多想了一些,將一些特殊情況單獨處理,並且我是使用m作為迴圈變數,上限是n,他則另取一變數i,使i等於m,我認為可以將i用m取代,這樣應該也是可以實現題目要求的;在內迴圈方面,他的條件是j<=0.5*i,而我的條件是i<m,計算量比他的多了許多。3)我更喜歡他那種簡潔且實用的風格三、本周題目集的PTA最後排名。PTA排名

四、本周學習總結1.你學會了什嗎?
  • 整型、字元型、實型
  • 加與不加 ‘‘ 的字母、數字不相等;字元型變數可以與整型變數轉換;逸出字元中  的應用;
  • ++n與n++、--n與n--的區別
  • 運算子的優先順序的區別
  • 對合法浮點數的定義
  • 關係運算子運算順序從左至右
  • 逗號運算子的運算順序從左至右
2.本周的內容,你還不會什嗎?
  • 位元運算符的應用;位邏輯運算子的使用:如位非運算的具體使用
  • 移位元運算的三種方式的的實際應用
3.迴圈結構考試總結(1)哪題做錯了,怎麼改?7-3 二進位的前置的零
  • 開始思路錯誤,以為要先將十進位數轉為位元再迴圈去末位得到位元,再用32減去得到的位元
  • 回去分析二進位和十進位之後發現只要使十進位數每次除2並使計數變數+1,最後得到的計數變數的值就是該十進位數轉換成二進位之後的位元,再用32減去計數變數就能得到最後結果
  • 然後錯在當十進位數為負數
  • 由於負數在轉換為位元時需要進行反碼,即1變成0、0變成1,所以此時應輸出0
  • 以及當輸入的數是0時,和負數一樣做特殊處理,應輸出32
7-5 單詞長度
  • 第一次出錯在於“空句子”和“開頭結尾多空格”、“連續多空格”
  • 加入另一個字串變數b,使其初始化為空白格符,用來記入前一個字元;若前一個字元為空白格,且現字元為空白格,則不輸出,解決“連續多空格”問題
  • 再加入標誌變數flag,用來控制空格的輸出,但是並沒法解決問題
  • 在迴圈外加入判斷,當b!=‘ ‘時輸出字元個數,並且前面做對應修改,解決“空句子”問題
  • 用了各種各樣的方法和語句嘗試了兩個多小時,不是“開頭結尾多空格”問題就是“連續多空格”問題, 最後發現只要在原來的代碼裡的flag的判斷中加入b!=‘ ‘的判斷就可以實現
(2)考試結果滿意麼,怎麼改進?
不滿意,多做題多思考,鍛煉對題目的靈敏感覺,學會靈活運用所學知識解決問題
(3)其他總結
  • 通過這次的考試,我發現我對迴圈語句的掌握還是不夠,總是在一些細節的地方犯錯;
  • 以及對於將其他語句同迴圈語句結合也是一般,經常的以為能把它們沒有出錯的結合起來就行了,對於這個過程中花費的時間不是很在意
  • 思路的差異是解題速度不同的原因之一,我應該要多鍛煉自己的思路的可行性和嚴謹性,去觀摩和學習大神的代碼

C語言部落格作業--函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.