國立屏東大學 資訊工程系 程式設計(二)
Turnin作業2
- Turnin Code: c.hw2
- Due Date: 3/25 00:00 Hard Deadline
繳交方式說明
本次Turnin作業包含多個程式題,請為每一題建立一個資料夾,並將該題所要上傳的檔案放置其中後,再使用turnin指令上傳作業。請同學先為本次作業建立一個資料夾hw2,然後在hw2裡分別為每一題建立一個子資料夾,用以進行每一題的作答以及上傳。每一題的子資料夾名稱已寫於題目前方,請務必依照題目的規定建立子資料夾,例如第1題為p1、第2題為p2,餘依此類推。當我們完成某一個題目的作答後,就可以使用turnin指令將該題的答案上傳。以第1題為例,當我們在p1子資料夾裡完成作答後,就可以回到hw1資料夾,使用以下指令將其上傳:
[3:23 user@ws hw2] turnin▴c.hw2▴p1↵
當然,你也可以等到所有題目都完成後,回到hw2資料夾,使用以下指令將所有題目都加以上傳:
[3:23 user@ws hw2] turnin▴c.hw2▴.↵
註:本文使用▴及↵代表空白字元與Enter換行字元,並且將使用者輸入的部份使用灰階方式
顯示。
p1 10碼行動電話號碼輸入
請設計一個 C 語言程式 PhoneNumber.c,讓使用者輸入一個 10 碼的行動電話號 碼,並將它改以 XXXX-XXXXXX 的格式輸出。若使用者所輸入的號碼有誤(不足10碼、含有非數字字元、不由09開頭), 則請輸出「Error!」。
此題的執行結果如下:
[3:23 user@ws p1] ./a.out↵
Please▴input▴your▴mobile▴phone▴number:▴0935123456↵
0935-123456↵
[3:23 user@ws p1] ./a.out↵
Please▴input▴your▴mobile▴phone▴number:▴9090333555↵
Error!↵
[3:23 user@ws p1] ./a.out↵
Please▴input▴your▴mobile▴phone▴number:▴09xx6667xx↵
Error!↵
[3:23 user@ws p1] ./a.out↵
Please▴input▴your▴mobile▴phone▴number:▴099123456↵
Error!↵
[3:23 user@ws p1] ./a.out↵
Please▴input▴your▴mobile▴phone▴number:▴0911-222555↵
Error!↵
[3:23 user@ws p1] ./a.out↵
Please▴input▴your▴mobile▴phone▴number:▴P22334455↵
Error!↵
[3:23 user@ws p1] ./a.out↵
Please▴input▴your▴mobile▴phone▴number:▴0928▴223355↵
Error!↵
[3:23 user@ws p1]
注意!請記得將要上傳的檔案放置於p1資料夾後再上傳。
p2 美式日期輸出
請參考以下的Main.c及Date.h檔案
#include <stdio.h> #include "Date.h" int main() { int yyyy, mm, dd; char date[19]; printf("Please input a date (yyyy/mm/dd): "); scanf("%d/%d/%d",&yyyy,&mm,&dd); printf("The date is %s.\n", AmericanDate(date, yyyy, mm, dd)); }
#include <stdio.h> #include <string.h> char *AmericanDate(char *date, int y, int m, int d);
你必須完成名為Date.c的C語言程式,其中包含AmericanDate()函式的Implementation。AmericanDate函式接收一個用以存放結果字串的記憶體位址,以及分別代表年、月、日的參個整數作為參數,並將其轉換為美式日期格式後寫入到所傳入的記憶體位址處,並且也將該記憶體位址做為函式傳回值傳回給呼叫者。
本題的相關程式將使用以下的Makefile進行編譯:
all: Main.c Date.o cc Main.c Date.o Date.o: Date.c Date.h cc -c Date.c clean: rm -f *.o *~ *.*~ a.out
本題的執行結果可參考如下:
[9:19 user@ws p2] ./a.out↵
Please▴input▴a▴date▴(yyyy/mm/dd):▴2024/3/15↵
The▴date▴is▴March▴15th,▴2024.↵
[9:19 user@ws p2] ./a.out↵
Please▴input▴a▴date▴(yyyy/mm/dd):▴2000/9/1↵
The▴date▴is▴September▴1st,▴2000.↵
[9:19 user@ws p2] ./a.out↵
Please input a date (yyyy/mm/dd): 2025/6/21↵
The▴date▴is▴June▴21st,▴2025.↵
[9:19 user@ws p2] ./a.out↵
Please▴input▴a▴date▴(yyyy/mm/dd):▴195/10/22↵
The▴date▴is▴October▴22nd,▴195.↵
[9:19 user@ws p2]
- 注意1:本題所輸入的測試日期皆為正確數值,你不必進行輸入數值的錯誤檢查。
- 注意2: 本題僅需繳交Date.c檔案,請記得將要上傳的檔案放置於p2資料夾後再上傳。
編輯此段
p3 去除輸入字串前後方的空白字元
請參考以下的Main.c及ReadAndTrim.h檔案
#include <stdio.h> #include <string.h> #include "ReadAndTrim.h" int main() { char str[100]; printf("Please input a string: "); scanf("%[^\n]",str); readAndTrim(str,strlen(str)); printf("output: %s\n",str); }
int readAndTrim(char str[],int n);
你必須完成名為ReadAndTrim.c的C語言程式,其中包含readAndTrim(char str[], int n)函式的的Implementation;其中 str 陣列是一 個字串,n 為該字串之長度。此函式的作用是將 str 字串前面與後面的空白字元都加以去除。
本題的相關程式將使用以下的Makefile進行編譯:
all: Main.c ReadAndTrim.o cc Main.c ReadAndTrim.o ReadAndTrim.o: ReadAndTrim.c ReadAndTrim.h cc -c ReadAndTrim.c clean: rm -f *.o *~ *.*~ a.out
本題的執行結果可參考如下:
[9:19 user@ws p3] ./a.out↵
Please▴input▴a▴string:▴▴▴▴▴This▴is▴a▴test▴▴▴↵
output:▴This▴is▴a▴test↵
[9:19 user@ws p3] ./a.out↵
Please▴input▴a▴string:▴▴▴▴A▴B▴CD▴↵
output:▴A▴B▴CD↵
[9:19 user@ws p3] ./a.out↵
Please▴input▴a▴string:▴↵
output:▴↵
[9:19 user@ws p3]
- 注意: 本題僅需繳交ReadAndTrim.c檔案,請記得將要上傳的檔案放置於p3資料夾後再上傳。
p4 文字檔案內容代換
請設計一個C語言程式Replace.c,使用 I/O 轉向(I/O redirect)的方式,將一個文字檔案讀入後,請以字串搜尋替代的方式將其中的「NPTU」改成「National Pingtung University」後輸出。本題的執行結果可參考如下:
[9:19 user@ws p4] cat▴in.1↵
NPTU↵
[9:19 user@ws p4] ./a.out▴<▴in.1↵
National▴Pingtung▴University↵
[9:19 user@ws p4] cat▴in.2↵
1▴NPTUa↵
2▴NPTUb↵
3▴cNPTUc↵
4▴NPTUNPTU↵
5▴NPTU▴5↵
6▴nptu↵
[9:19 user@ws p4] ./a.out▴<▴in.2↵
1▴NPTUa↵
2▴NPTUb↵
3▴cNPTUc↵
4▴NPTUNPTU↵
5▴National▴Pingtung▴University▴5↵
6▴nptu↵
[9:19 user@ws p4] cat▴in.3↵
NPTU▴was▴founded▴on▴August▴1,▴2014,▴upon▴the▴official▴merge▴of▴National▴Pingtung▴University▴of▴Education▴and▴National▴Pingtung▴Institute▴of▴Commerce.▴NPTU▴is▴a▴comprehensive▴university▴advocating▴academic▴freedom▴that▴emphasizes▴holistic▴learning▴and▴concern.▴Due▴to▴such▴recent▴changes▴in▴the▴educational▴environment▴as▴the▴focus▴on▴developing▴a▴more▴global▴outlook▴both▴on▴campus▴and▴in▴society,▴the▴decreasing▴birth▴rate,▴and▴a▴shortage▴of▴talent,▴NPTU▴aims▴to▴prepare▴students▴by▴providing▴them▴with▴practical▴and▴professional▴skills,▴as▴well▴as▴the▴reasoning▴and▴holistic▴qualities▴to▴function▴competently▴in▴a▴global▴environment.↵
[9:19 user@ws p4] ./a.out▴<▴in.3↵
National▴Pingtung▴University▴was▴founded▴on▴August▴1,▴2014,▴upon▴the▴official▴merge▴of▴National▴Pingtung▴University▴of▴Education▴and▴National▴Pingtung▴Institute▴of▴Commerce.▴National▴Pingtung▴University▴is▴a▴comprehensive▴university▴advocating▴academic▴freedom▴that▴emphasizes▴holistic▴learning▴and▴concern.▴Due▴to▴such▴recent▴changes▴in▴the▴educational▴environment▴as▴the▴focus▴on▴developing▴a▴more▴global▴outlook▴both▴on▴campus▴and▴in▴society,▴the▴decreasing▴birth▴rate,▴and▴a▴shortage▴of▴talent,▴National▴Pingtung▴University▴aims▴to▴prepare▴students▴by▴providing▴them▴with▴practical▴and▴professional▴skills,▴as▴well▴as▴the▴reasoning▴and▴holistic▴qualities▴to▴function▴competently▴in▴a▴global▴environment.↵
[9:19 user@ws p4]
- 注意1: 本題僅需繳交Replace.c檔案,請記得將要上傳的檔案放置於p4資料夾後再上傳。
- 注意2: 本題所展示的in.1、in.2與in.3可至/home/stu/public/c2024s/hw2/p4/取得。
p5 密碼安全性檢查
請設計一個C語言程式CheckPassword.c,先讓使用者輸入一個不超過10個字元長度(不含空字元)的密碼後,依據下列規則檢查該密碼是否足夠安全:
- 密碼必須由英文大寫小字母、數字與空白字元組成
- 密碼不得少於等於5個字元
- 密碼至少包含一個大寫英文字元與一個小寫英文字元
- 密碼至少包含一個數字
本題的執行結果可參考如下:
[9:19 user@ws p5] ./a.out↵
Please▴input▴a▴password: Happy 888↵
Password▴check▴pass↵
[9:19 user@ws p5] ./a.out↵
Please▴input▴a▴password: happy 888↵
Password▴check▴failed↵
[9:19 user@ws p5] ./a.out↵
Please▴input▴a▴password: hello World0209↵
Password▴check▴failed↵
[9:19 user@ws p5] ./a.out↵
Please▴input▴a▴password: LOVE 0214↵
Password▴check▴failed↵
[9:19 user@ws p5] ./a.out↵
Please▴input▴a▴password: Love 0214↵
Password▴check▴pass↵
[9:19 user@ws p5]
- 注意: 本題僅需繳交CheckPassword.c檔案,請記得將要上傳的檔案放置於p5資料夾後再上傳。