CPP Turnin作業2
國立屏東大學 資訊工程系 物件導向程式設計
本次Turnin作業包含多個程式題,請為每一題建立一個資料夾,並將該題所要上傳的檔案放置其中後,再使用turnin指令上傳作業。請同學先為本次作業建立一個資料夾hw2,然後在hw2裡分別為每一題建立一個子資料夾,用以進行每一題的作答以及上傳。每一題的子資料夾名稱已寫於題目前方,請務必依照題目的規定建立子資料夾,例如第1題為p1、第2題為p2,餘依此類推。當我們完成某一個題目的作答後,就可以使用turnin指令將該題的答案上傳。以第1題為例,當我們在p1子資料夾裡完成作答後,就可以回到hw2資料夾,使用以下指令將其上傳:
[3:23 user@ws hw2] turnin▴cpp.hw2▴p1↵
當然,你也可以等到所有題目都完成後,回到hw2資料夾,使用以下指令將所有題目都加以上傳:
[3:23 user@ws hw2] turnin▴cpp.hw2▴.↵
註:本文使用▴及↵代表空白字元與Enter換行字元,並且將使用者輸入的部份使用灰階方式
顯示。
請參考下面的main.cpp以及string.h程式:
#include <iostream> #include <iomanip> #include "string.h" using namespace std; int main() { int w; char str[20]; cout << "Width=? "; cin >> w; cout << "String=? "; cin >> str; show_string(str, string_length(str), w, Left_Alignment); show_string(str, string_length(str), w, Right_Alignment); show_string(str, string_length(str), w, Center_Alignment); return 0; }
#define Left_Alignment 0 #define Right_Alignment 1 #define Center_Alignment 2 int string_length(char str[]); void show_string(char str[], int len, int w, int align);
你必須完成名為string.cpp的C++語言程式,其中包含strng_length()函式與show_string()函式的Implementation。string_length()函式接收一個char[]字串,計算其字串長度(即不包含空字元在內的字元數)後傳回。show_string()函式接收一個char []字串str、該字串的長度len、輸出的寬度w以及對齊方式align,請以w做為字串輸出的寬度,並採用align的對齊方式(包含Left_Alignment靠左、Right_Alignment靠右以及Center_Alignment置中對齊)加以輸出;為了易於識別起見,請將沒有輸出字元的部份使用*星號填充。
本題的相關程式將使用以下的Makefile進行編譯:
all: main.cpp string.o c++ main.cpp string.o string.o: string.cpp string.h c++ -c string.cpp clean: rm -f *.o *~ *.*~ a.out此題的執行結果如下:
[3:23 user@ws hw] ./a.out↵
Width=?▴9↵
String=?▴abc↵
abc******↵
******abc↵
***abc***↵
[3:23 user@ws hw] ./a.out↵
Width=?▴8↵
String=?▴abc↵
abc*****↵
*****abc↵
***abc**↵
[3:23 user@ws hw] ./a.out↵
Width=?▴3↵
String=?▴csie↵
csie↵
csie↵
csie↵
[3:23 user@ws hw]
請注意本題只需繳交string.cpp,其它檔案則不需繳交。
請設計一個C++語言的程式f2c.cpp,讓使用者輸入一個華氏(Fahrenheit)溫度,計算並輸出對應的攝氏(Celsius)溫度。 溫度計算公式如下:
攝氏 =(華氏-32)*(5/9)
本題的執行結果可參考如下:
[9:19 user@ws hw] ./a.out↵
Fahrenheit:132↵
Fahrenheit▴132.00▴=▴Celsius▴55.56↵
[9:19 user@ws hw] ./a.out↵
Fahrenheit:77.77↵
Fahrenheit▴77.77▴=▴Celsius▴25.43↵
[9:19 user@ws hw] ./a.out↵
Fahrenheit:33.3↵
Fahrenheit▴33.30▴=▴Celsius▴0.72↵
[9:19 user@ws hw] ./a.out↵
Fahrenheit:-18.05↵
Fahrenheit▴-18.05▴=▴Celsius▴-27.81↵
[9:19 user@ws hw]
屏東大學在資工系傑出校友捐贈10輛校車的幫助下(其實並沒有),開始提供三個校區間的接駁車服務,共有以下三種票種:
感念資工系友捐贈校車,資工系學生除可享票價6折優惠外,還可再和以下兩項優惠擇優合併計算(也就是採計票價最低的優惠方案):
至於其它系的學生僅能就上述兩種優惠擇優使用(也就是採計票價最低的優惠方案)。
注意:票價計算先依不同票種之票價乘以張數後,再進行折扣計算。若計算後之金額有小數,則一律無條件進位。舉例來說:
請設計一個C++語言程式fare.cpp,讓使用者輸入四個字元(英文部份一律大寫),分別代表:
例如A↵1↵3↵N↵
代表非資工系3年級學生購買A票種1張,B↵T↵1↵C↵
代表資工系1年級學生購買B票種10張。若是輸入有任何錯誤,則一律顯示「Error!↵」
注意:英文字母僅接受大寫,小寫一律視為錯誤。張數與就讀年級可接受的正確範圍分別為「1-10(其中10以英文字母T代替)」與「1-6」。
注意:測試時的輸入,必定是由四個「一個字元」及「一個換行」所組成的輸入。例如不會有A1↵10↵10↵CC↵
,所給定的四個輸入必定都是一個字元加一個換行。
請參考以下的執行結果:
[9:19 user@ws hw] ./a.out↵
A↵
2↵
1↵
C↵
Fare=22↵
[9:19 user@ws hw] ./a.out↵
A↵
T↵
1↵
C↵
Fare=96↵
[9:19 user@ws hw] ./a.out↵
C↵
6↵
1↵
N↵
Fare=125↵
[9:19 user@ws hw] ./a.out↵
C↵
T↵
1↵
C↵
Fare=111↵
[9:19 user@ws hw] ./a.out↵
C↵
T↵
2↵
C↵
Fare=111↵
[9:19 user@ws hw] ./a.out↵
A↵
0↵
1↵
N↵
Error!↵
[9:19 user@ws hw]
請注意本題只須上傳fare.cpp檔案。
註:本題如有使用浮點數的需求,請使用double做為相關變數的資料型態。
請參考下面的main.cpp以及value.h程式:
#include <iostream> using namespace std; #include "value.h" int main() { char sys_input, sys_output; int value; cout << "Number system for input (T/O/H):"; cin >> sys_input; cout << "Input a value:"; value=get_value(sys_input); cout << "Number system for output (T/O/H):"; cin >> sys_output; show_value(sys_output, value); cout << endl; }
#include <iostream> #include <iomanip> using namespace std; int get_value(char sys); void show_value(char sys, int value);
你必須完成名為value.cpp的C++語言程式,其中包含get_value()與show_value()函式Implementation。 get_value()函式接收一個代表數字系統的char字元,並依據其值取得不同數字系統的數值後傳回。至於show_value()函式則接收一個代表數字系統的char字元,以及一個int整數,並依據指定的數字系統輸出數值。此題使用字元T代表10進制、O代表8進制,以及H代表16進制。
本題的相關程式將使用以下的Makefile進行編譯:
all: main.cpp value.o c++ main.cpp value.o value.o: value.cpp value.h c++ -c value.cpp clean: rm -f *.o *~ *.*~ a.out此題的執行結果如下:
[3:23 user@ws hw] ./a.out↵
Number▴system▴for▴input▴(T/O/H):T↵
Input▴a▴value:123↵
Number▴system▴for▴output▴(T/O/H):O↵
173↵
[3:23 user@ws hw] ./a.out↵
Number▴system▴for▴input▴(T/O/H):O↵
Input▴a▴value:267↵
Number▴system▴for▴output▴(T/O/H):H↵
B7↵
[3:23 user@ws hw] ./a.out↵
Number▴system▴for▴input▴(T/O/H):H↵
Input▴a▴value:E29B↵
Number▴system▴for▴output▴(T/O/H):T↵
58011↵
[3:23 user@ws hw]
請注意本題只需繳交value.cpp,其它檔案則不需繳交。