國立屏東大學 資訊工程系 程式設計(一)
每次Turnin作業會包含多個程式題目(p1、p2、…、pN),每題將提供其題目、檔案命名規定、功能要求以及參考的執行結果。建議同學可以為每次的Turnin作業建立一個資料夾以便於管理,例如本次的作業可以使用mkdir hw5
指令來建立一個名為hw5的資料夾,並在該資料夾裡編寫此次作業的程式檔案。另外要注意的是,每一題都必須依據題目要求為程式檔案命名,例如此次turnin作業的p1,其檔案名稱要求命名為 Rabbits.c,請務必注意大小寫一致,任何錯誤的檔案命名都將不予計分。
注意:從此次作業開始,如題目有加註星號(*),該題分數將加倍計算。
請注意每次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換行字元,並且將使用者輸入的部份使用淺灰色方框
顯示。
意大利數學家李奧納多·費波那契(Leonardo Fibonacci)曾提出的在理想假設條件下兔子的繁殖問題:
第 n 個月 | 新生的兔子對數 | 成長中的兔子對數 | 已成長的兔子對數 | 兔子總對數 |
---|---|---|---|---|
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 |
… |
請設計一個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]
請設計一個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]
請設計一個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↵
2↵
請設計一個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]
請設計一個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↵
1↵
|1|↵[7:17 user@ws in hw5]
./a.out↵
4↵