目錄表

國立屏東大學 資訊工程系 程式設計(一)

Turnin作業5(c.hw5)


作業說明

每次Turnin作業會包含多個程式題目(p1、p2、…、pN),每題將提供其題目、檔案命名規定、功能要求以及參考的執行結果。建議同學可以為每次的Turnin作業建立一個資料夾以便於管理,例如本次的作業可以使用mkdir hw5 指令來建立一個名為hw5的資料夾,並在該資料夾裡編寫此次作業的程式檔案。另外要注意的是,每一題都必須依據題目要求為程式檔案命名,例如此次turnin作業的p1,其檔案名稱要求命名為 Rabbits.c,請務必注意大小寫一致,任何錯誤的檔案命名都將不予計分。

注意:從此次作業開始,如題目有加註星號(*),該題分數將加倍計算

繳交方式說明(以下說明皆假設在hw5的目錄下操作)

請注意每次turnin作業都必須在截止時間前完成繳交,逾時不候且不得補交。以此次作業為例,其turnin code為c.hw5,當你完成p1的程式碼撰寫,並經編譯執行確認無誤後,可以使用下列指令完成繳交(請自行注意是否在正確的資料夾裡操作):

[7:17 user@ws in hw5] turnin▴c.hw5▴Rabbits.c↵

後續還可以使用同樣的方式,將p2、p3、…、p10的程式檔案加以繳交。當然,你也可以等到所有小題都作答完成後,再整批地將資料夾下的所有作業上傳,請參考以下指令將目前資料夾(hw5)內所有副檔名為.c的檔案整批繳交:

[7:17 user@ws in hw5] turnin▴c.hw5▴*.c↵

註:本文使用▴及↵代表空白字元與Enter換行字元,並且將使用者輸入的部份使用淺灰色方框顯示。


p1 兔子問題(Rabbits.c)

意大利數學家李奧納多·費波那契(Leonardo Fibonacci)曾提出的在理想假設條件下兔子的繁殖問題:

第 n 個月 新生的兔子對數 成長中的兔子對數 已成長的兔子對數 兔子總對數
11001
20101
31012
41113
52125
63238
753513

請設計一個C語言的程式 Rabbits.c,讓使用者輸入一個正整數 $n$ 後,輸出第一個月至第 $n$ ($1\leq n \leq 40$)個月各種狀態兔子的總數, 其執行結果可參考以下的輸出內容:

[7:17 user@ws in hw5] ./a.out↵
Enter▴n▴month:▴0↵
Error!▴Out▴of▴range.↵
[7:17 user@ws in hw5] ./a.out↵
Enter▴n▴month:▴41↵
Error!▴Out▴of▴range.↵
[7:17 user@ws in hw5] ./a.out↵
Enter▴n▴month:▴10↵

|(n)th▴▴▴▴▴|newborn▴▴▴|growing▴▴▴|matured▴▴▴|total▴▴▴▴▴↵
|1▴▴▴▴▴▴▴▴▴|1▴▴▴▴▴▴▴▴▴|0▴▴▴▴▴▴▴▴▴|0▴▴▴▴▴▴▴▴▴|1▴▴▴▴▴▴▴▴▴↵
|2▴▴▴▴▴▴▴▴▴|0▴▴▴▴▴▴▴▴▴|1▴▴▴▴▴▴▴▴▴|0▴▴▴▴▴▴▴▴▴|1▴▴▴▴▴▴▴▴▴↵
|3▴▴▴▴▴▴▴▴▴|1▴▴▴▴▴▴▴▴▴|0▴▴▴▴▴▴▴▴▴|1▴▴▴▴▴▴▴▴▴|2▴▴▴▴▴▴▴▴▴↵
|4▴▴▴▴▴▴▴▴▴|1▴▴▴▴▴▴▴▴▴|1▴▴▴▴▴▴▴▴▴|1▴▴▴▴▴▴▴▴▴|3▴▴▴▴▴▴▴▴▴↵
|5▴▴▴▴▴▴▴▴▴|2▴▴▴▴▴▴▴▴▴|1▴▴▴▴▴▴▴▴▴|2▴▴▴▴▴▴▴▴▴|5▴▴▴▴▴▴▴▴▴↵
|6▴▴▴▴▴▴▴▴▴|3▴▴▴▴▴▴▴▴▴|2▴▴▴▴▴▴▴▴▴|3▴▴▴▴▴▴▴▴▴|8▴▴▴▴▴▴▴▴▴↵
|7▴▴▴▴▴▴▴▴▴|5▴▴▴▴▴▴▴▴▴|3▴▴▴▴▴▴▴▴▴|5▴▴▴▴▴▴▴▴▴|13▴▴▴▴▴▴▴▴↵
|8▴▴▴▴▴▴▴▴▴|8▴▴▴▴▴▴▴▴▴|5▴▴▴▴▴▴▴▴▴|8▴▴▴▴▴▴▴▴▴|21▴▴▴▴▴▴▴▴↵
|9▴▴▴▴▴▴▴▴▴|13▴▴▴▴▴▴▴▴|8▴▴▴▴▴▴▴▴▴|13▴▴▴▴▴▴▴▴|34▴▴▴▴▴▴▴▴↵
|10▴▴▴▴▴▴▴▴|21▴▴▴▴▴▴▴▴|13▴▴▴▴▴▴▴▴|21▴▴▴▴▴▴▴▴|55▴▴▴▴▴▴▴▴↵
[7:17 user@ws in hw5]

p2 最小公倍數(LCM.c)

請設計一個C語言的程式LCM.c,讓使用者輸入兩個正整數,並且找出這兩個數字的 least common multiple(LCM,最小公倍數)。假設這兩個整數為 $n1$ 與 $n2$ 且 $n1 > n2$,令 $m=n1$,計算並判斷 $m$ 是否可以被 $n1$ 與 $n2$ 整除,若否則將 $m$ 的值遞增(+1),再次判斷新的 $m$ 值是否可以被 $n1$ 與 $n2$ 整除,反覆進行直到找到一個可以同時被 $n1$ 與 $n2$ 整除的 $m$ 爲止,其 $m$ 值即為兩個整數 $n1$ 與 $n2$ 的最小公倍數,其輸出結果可以參考以下的內容:

[7:17 user@ws in hw5] ./a.out↵
Please▴input▴two▴numbers(a,b):▴12,13↵
LCM(12,▴13)▴=▴156↵
[7:17 user@ws in hw5] ./a.out↵
Please▴input▴two▴numbers(a,b):▴12,5↵
LCM(12,▴5)▴=▴60↵
[7:17 user@ws in hw5] ./a.out↵
Please▴input▴two▴numbers(a,b):▴2,2↵
LCM(2,▴2)▴=▴2↵
[7:17 user@ws in hw5]

p3 輸出菱形(PrintDiamond.c)

請設計一個C語言程式PrintDiamond.c,讓使用者輸入為一個大於等於3的整數 $n$,使用迴圈以及加號印出邊長等於 $n$ 的菱形,其執行結果可參考如下:

[7:17 user@ws in hw5] ./a.out↵
Please▴input▴an▴integer▴greater▴than▴or▴equal▴to▴3:▴5↵

▴▴▴▴+↵
▴▴▴+++↵
▴▴+++++↵
▴+++++++↵
+++++++++↵
▴+++++++↵
▴▴+++++↵
▴▴▴+++↵
▴▴▴▴+↵
[7:17 user@ws in hw5] ./a.out↵
Please▴input▴an▴integer▴greater▴than▴or▴equal▴to▴3:▴2↵
Input▴Error!↵
[7:17 user@ws in hw5]

p4 計算1到n的質數之和(PrimeNumSum.c)

請設計一個C語言程式PrimeNumSum.c,讓使用者輸入一個正整數 $n$,將大於 1 且小於 $n$ 的所有質數輸出並加總,其執行結果可參考如下:

注意:此題請不要使用'\b'作為輸出。

[7:17 user@ws in hw5] ./a.out↵
Please▴input▴an▴integer:▴40↵
2▴+▴3▴+▴5▴+▴7▴+▴11▴+▴13▴+▴17▴+▴19▴+▴23▴+▴29▴+▴31▴+▴37▴=▴197↵
[7:17 user@ws in hw5] ./a.out↵
Please▴input▴an▴integer:▴2↵
There▴isn't▴any▴prime▴number▴between▴1▴and▴2.↵
[7:17 user@ws in hw5] ./a.out↵
Please▴input▴an▴integer:▴0↵
Input▴Error↵
[7:17 user@ws in hw5]

p5* 數字回文金字塔(NumPalindromePyramid.c)

請設計一個C語言的程式NumPalindromePyramid.c,讓使用者輸入一個正奇數 $n$ 以產生一個數字回文金字塔, 輸出的數字回文金字塔的高度(層數)為$\lceil \frac{n}{2} \rceil$,且每層可參考下列的執行結果輸出數字回文:

[7:17 user@ws in hw5] ./a.out↵
Please▴input▴the▴number▴of▴the▴layer▴of▴the▴pyramid:▴9↵

|▴▴▴▴1▴▴▴▴|↵
|▴▴▴121▴▴▴|↵
|▴▴12321▴▴|↵
|▴1234321▴|↵
|123454321|↵
[7:17 user@ws in hw5] ./a.out↵
Please▴input▴the▴number▴of▴the▴layer▴of▴the▴pyramid:▴1↵
|1|↵
[7:17 user@ws in hw5] ./a.out↵
Please▴input▴the▴number▴of▴the▴layer▴of▴the▴pyramid:▴4↵
Input▴error!↵
[7:17 user@ws in hw5]