使用者工具

網站工具


c:2026fall:hw8

Turnin作業8

  • Turnin Code: c.hw8
  • Due Date: 2026/11/10 23:59 Hard Deadline

繳交方式說明

同學在經歷前幾次作業的練習後,對於建立資料夾、撰寫程式、編譯,以及使用 turnin 指令上傳的流程應已相當熟悉。

因此,從作業6開始,將省略繳交步驟示範。請同學在自行確認12個程式題皆編譯無誤且執行結果正確後,再進行上傳。

若有其他的繳交規定或方式,將會另行公告。

如需回顧之前的終端機操作與繳交指令,請參考:c.hw5繳交說明

  • 本文使用▴及↵代表空白字元與Enter換行字元,並且將使用者輸入的部份使用灰階方式顯示。
  • 另外,出現在程式執行結果中的符號皆為半形。

p1 電影院票價判斷(movie_ticket.c)

花生電影院提供不同年齡層的觀眾更優惠的觀影價格,制定了依年齡區分的票價制度。觀眾購買電影票時,系統會依照輸入的年齡,自動判斷應該購買哪一種票券,並計算應付金額。

電影院提供以下四種票價:

年齡範圍票種票價
0~5 歲Free Ticket0 元
6~12 歲Child Ticket150 元
13~64 歲Regular Ticket300 元
65 歲以上Senior Ticket180 元

設計一個 C 語言程式 movie_ticket.c,讓使用者輸入觀眾的年齡,並根據上述規則輸出適用的票種與票價。 若使用者輸入的年齡小於 0 時,輸出訊息 “Invalid age!” 提示使用者。

請參考以下的執行結果:

[7:17▴user@ws▴in▴hw8]$▴./a.out↵
Please▴input▴your▴age:▴4↵
Ticket▴type:▴Free▴Ticket↵
Ticket▴price:▴\$0↵
[7:17▴user@ws▴in▴hw8]$▴./a.out↵
Please▴input▴your▴age:▴16↵
Ticket▴type:▴Regular▴Ticket↵
Ticket▴price:▴\$300↵
[7:17▴user@ws▴in▴hw8]$▴./a.out↵
Please▴input▴your▴age:▴90↵
Ticket▴type:▴Senior▴Ticket↵
Ticket▴price:▴\$180↵
[7:17▴user@ws▴in▴hw8]$▴./a.out↵
Please▴input▴your▴age:▴-1↵
Invalid▴age!↵
[7:17▴user@ws▴in▴hw8]$▴


p2 停車場收費系統(parking_fee.c)

花生停車場採用依照停車時間計算費用的收費制度。停車場除了提供短時間免費停車之外,也針對長時間停車的顧客設定單次收費上限,避免停車費用過高。

花生停車場收費方式如下:

停車時間收費方式
30 分鐘以內(含)免費停車
超過 30 分鐘每小時 40 元
單次停車費用上限300 元

停車費以小時為單位計算,不足一小時仍以一小時計費。例如,停車 45 分鐘需要支付 40 元,停車 90 分鐘需要支付 80 元。

請設計一個 C 語言程式 parking_fee.c,讓使用者輸入停車時間(分鐘),程式根據上述規則計算應付的停車費。 若使用者輸入的停車時間小於 0 分鐘時,輸出訊息 “Invalid parking time!” 提示使用者。

請參考以下的執行結果:

[7:17▴user@ws▴in▴hw8]$▴./a.out↵
Parking▴time▴(minutes):▴20↵
Parking▴time:▴20▴minutes↵
Parking▴fee:▴\$0↵
[7:17▴user@ws▴in▴hw8]$▴./a.out↵
Parking▴time▴(minutes):▴45↵
Parking▴time:▴45▴minutes↵
Parking▴fee:▴\$40↵
[7:17▴user@ws▴in▴hw8]$▴./a.out↵
Parking▴time▴(minutes):▴60↵
Parking▴time:▴60▴minutes↵
Parking▴fee:▴\$40↵
[7:17▴user@ws▴in▴hw8]$▴./a.out↵
Parking▴time▴(minutes):▴61↵
Parking▴time:▴61▴minutes↵
Parking▴fee:▴\$80↵
[7:17▴user@ws▴in▴hw8]$▴./a.out↵
Parking▴time▴(minutes):▴500↵
Parking▴time:▴500▴minutes↵
Parking▴fee:▴\$300↵
[7:17▴user@ws▴in▴hw8]$▴./a.out↵
Parking▴time▴(minutes):▴-1↵
Invalid▴parking▴time!↵
[7:17▴user@ws▴in▴hw8]$▴


p3 文具店折扣計算(stationery.c)

花生文具店販售各種學生常用的文具用品,包含鉛筆、筆記本及資料夾。為了鼓勵學生一次購買多樣文具,店家推出滿額折扣活動,購買金額越高,就能享有越多優惠。

花生文具店提供以下三種商品:

商品名稱單價
Pencil(鉛筆)10 元
Notebook(筆記本)35 元
Folder(資料夾)25 元

使用者可以輸入每種商品的購買數量,程式必須先計算所有商品的原始總金額,再根據原始總金額判斷是否符合折扣條件。

店家提供以下折扣活動:

原始總金額優惠方式
未滿 200 元不打折
200~499 元折價 20 元
500 元以上折價 80 元

請設計一個 C 語言程式 stationery.c,讓使用者輸入三種商品的購買數量,計算原始總金額與折扣後的應付金額。 若使用者輸入的任一商品數量小於 0 時,輸出訊息 Invalid quantity! 提示使用者。

請參考以下的執行結果:

[7:17▴user@ws▴in▴hw8]$▴./a.out↵
Pencil▴quantity:▴3↵
Notebook▴quantity:▴4↵
Folder▴quantity:▴5↵
Original▴price:▴\$295↵
Discount:▴\$20↵
Total▴price:▴\$275↵
[7:17▴user@ws▴in▴hw8]$▴./a.out↵
Pencil▴quantity:▴1↵
Notebook▴quantity:▴2↵
Folder▴quantity:▴3↵
Original▴price:▴\$155↵
Discount:▴\$0↵
Total▴price:▴\$155↵
[7:17▴user@ws▴in▴hw8]$▴./a.out↵
Pencil▴quantity:▴10↵
Notebook▴quantity:▴11↵
Folder▴quantity:▴12↵
Original▴price:▴\$785↵
Discount:▴\$80↵
Total▴price:▴\$705↵
[7:17▴user@ws▴in▴hw8]$▴./a.out↵
Pencil▴quantity:▴-1↵
Notebook▴quantity:▴0↵
Folder▴quantity:▴6↵
Invalid▴quantity!↵
[7:17▴user@ws▴in▴hw8]$▴


p4 判斷是否為質數(is_prime_number.c)

質數的定義是只能被1以及該數本身整除的自然數,且必須大於1。

請設計一個C語言程式is_prime_number.c,讓使用者輸入一個正整數,檢查該整數是否為質數。如果使用者所輸入的不是正整數,則請輸出“Error!”。本題的執行結果可以參考如下:

[7:17▴user@ws▴in▴hw8]$▴./a.out↵
Enter▴a▴number:▴1↵
1▴is▴not▴a▴prime▴number.↵
[7:17▴user@ws▴in▴hw8]$▴./a.out↵
Enter▴a▴number:▴2↵
2▴is▴a▴prime▴number.↵
[7:17▴user@ws▴in▴hw8]$▴./a.out↵
Enter▴a▴number:▴38↵
38▴is▴not▴a▴prime▴number.↵
[7:17▴user@ws▴in▴hw8]$▴./a.out↵
Enter▴a▴number:▴0↵
Error!↵
[7:17▴user@ws▴in▴hw8]$▴./a.out↵
Enter▴a▴number:▴17↵
17▴is▴a▴prime▴number.↵
[7:17▴user@ws▴in▴hw8]$▴./a.out↵
Enter▴a▴number:▴-10↵
Error!↵
[7:17▴user@ws▴in▴hw8]$▴


p5 日期英文轉換(date_to_english.c)

設計一個 C 語言程式 date_to_english.c,讓使用者輸入一個日期(格式為 MM/DD/YYYY),並輸出該日期的英文格式,例如:“October 21st, 2025”。

請注意日期中的 日(Day) 需根據英文序數詞規則輸出:

  • 若日為 1、21、31,輸出“st”
  • 若日為 2、22,輸出“nd”
  • 若日為 3、23,輸出“rd”
  • 其他日期,輸出“th”

注意:

  • 年份輸入將不會超過4位數。
  • 日期須介於 1~31(不需考慮閏年,即2月以29日計算)。

若輸入的月份、日期或年份不合理,請輸出 “Input error!” 並終止程式。

此題的執行結果可參考如下:

[7:17▴user@ws▴in▴hw8]$▴./a.out↵
Please▴enter▴a▴date▴(MM/DD/YYYY):▴12/21/2026↵
December▴21st,▴2026↵
[7:17▴user@ws▴in▴hw8]$▴./a.out↵
Please▴enter▴a▴date▴(MM/DD/YYYY):▴8/3/1923↵
August▴3rd,▴1923↵
[7:17▴user@ws▴in▴hw8]$▴./a.out↵
Please▴enter▴a▴date▴(MM/DD/YYYY):▴8/22/123↵
August▴22nd,▴123↵
[7:17▴user@ws▴in▴hw8]$▴./a.out↵
Please▴enter▴a▴date▴(MM/DD/YYYY):▴01/01/0001↵
January▴1st,▴1↵
[7:17▴user@ws▴in▴hw8]$▴./a.out↵
Please▴enter▴a▴date▴(MM/DD/YYYY):▴00/11/1952↵
Input▴error!↵
[7:17▴user@ws▴in▴hw8]$▴./a.out↵
Please▴enter▴a▴date▴(MM/DD/YYYY):▴2/0/2033↵
Input▴error!↵
[7:17▴user@ws▴in▴hw8]$▴./a.out↵
Please▴enter▴a▴date▴(MM/DD/YYYY):▴02/30/2026↵
Input▴error!↵
[7:17▴user@ws▴in▴hw8]$▴


p6 計算1至1000間所有a與b的公倍數(cm_all.c)

請設計一個C語言程式cm_all.c,讓使用者輸入兩個整數a與b,找出所有介於1(含)至1000(含)間所有可以被a以及b整除的數字。

若沒有任何符合的數字,則請輸出“None”,若是使用者所輸入的是小於等於0的整數,則請輸出“Error”。

此題的執行結果可參考如下:

[7:17▴user@ws▴in▴hw8]$▴./a.out↵
a▴and▴b=?▴160▴40↵
160↵
320↵
480↵
640↵
800↵
960↵
[7:17▴user@ws▴in▴hw8]$▴./a.out↵
a▴and▴b=?▴380▴38↵
380↵
760↵
[7:17▴user@ws▴in▴hw8]$▴./a.out↵
a▴and▴b=?▴333▴777↵
None↵
[7:17▴user@ws▴in▴hw8]$▴./a.out↵
a▴and▴b=?▴0▴200↵
Error↵
[7:17▴user@ws▴in▴hw8]$▴


p7 判斷完美數(perfect_number.c)

若一個整數所有「真因數」的總和等於其本身的數值,則稱為「完美數(Perfect Number)」。
例如:6 的真因數有 1、2、3,且 1 + 2 + 3 = 6,因此 6 是一個完美數。

注意:真因數是指除自身以外的因數,例如6的真因數不包含6本身

請設計一個 C 語言程式 perfect_number.c,讓使用者輸入一個正整數$n$,並判斷該正整數是否為完美數。

如果使用者輸入的數值$\lt$1(即 $n \le 0$),則輸出錯誤訊息 “Error!”。

此題的執行結果可參考如下:

[7:17▴user@ws▴in▴hw8]$▴./a.out↵
n=?▴6↵
6▴is▴a▴perfect▴number.↵
[7:17▴user@ws▴in▴hw8]$▴./a.out↵
n=?▴5↵
5▴is▴not▴a▴perfect▴number.↵
[7:17▴user@ws▴in▴hw8]$▴./a.out↵
n=?▴28↵
28▴is▴a▴perfect▴number.↵
[7:17▴user@ws▴in▴hw8]$▴./a.out↵
n=?▴8128↵
8128▴is▴a▴perfect▴number.↵
[7:17▴user@ws▴in▴hw8]$▴./a.out↵
n=?▴10000↵
10000▴is▴not▴a▴perfect▴number.↵
[7:17▴user@ws▴in▴hw8]$▴./a.out↵
n=?▴0↵
Error!↵
[7:17▴user@ws▴in▴hw8]$▴


p8 阿金的故事產生器(story_maker.c)

請使用C語言設計一個阿金的故事產生器(story_maker.c),讓我們輸入「在哪裡?」、「做什麼?」等兩個選擇,然後由程式輸出產生一個簡短小故事。具體來說,我們首先必須輸入一個代表地點的字元,其中以「S」代表學校、「R」代表餐廳,「G」代表花園;最後再輸入代表「做什麼」的字元,其中「R」代表看書、「S」代表睡覺、「W」代表上班。請取得使用者的輸入後,產生一段簡單的故事描述。為便利起見,我們將輸入的字元彙整如下:

代號 地點名稱
S / s the school
R / r the restaurant
G / g the garden
其他英文字元 an unknown place
代號 活動名稱
R / r reading
S / s sleeping
W / w working
其他英文字元 doing an unknown activity

以上的輸入字元,大小寫都視為正確。但輸入超出以上範圍(英文字母A~Z)的字元時,必須顯示「Error!」。請參考以下的程式執行結果:

[7:17▴user@ws▴in▴hw8]$▴./a.out↵
ww↵
Mr.▴Money▴is▴working▴in▴an▴unknown▴place.↵
[7:17▴user@ws▴in▴hw8]$▴./a.out↵
Rs↵
Mr.▴Money▴is▴sleeping▴in▴the▴restaurant.↵
[7:17▴user@ws▴in▴hw8]$▴./a.out↵
Rw↵
Mr.▴Money▴is▴working▴in▴the▴restaurant.↵
[7:17▴user@ws▴in▴hw8]$▴./a.out↵
Zr↵
Mr.▴Money▴is▴reading▴in▴an▴unknown▴place.↵
[7:17▴user@ws▴in▴hw8]$▴./a.out↵
$#↵
Error!↵
[7:17▴user@ws▴in▴hw8]$▴

c/2026fall/hw8.txt · 上一次變更: 2026/11/03 09:48 由 zhengxuan

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki