NTUBIME96-HW 板


LINE

突然想起來還沒 po....@@ 第一題:(10分) 寫出下列 C++ 語法中 keyword 的定義或用途: 1. const 當宣告前面加上這個關鍵字時,表示所修飾的物件或變數不可被改變。 以這種方式宣告的話,必須要給定初始值。另外,若是一成員函式的後 面接上 const 關鍵字,則表示該函式不會變動成員中的物件。 2. static 表示所修飾的物件或變數為靜態,此意義為其生命週期與程式相同,會 在程式剛開始的時候配置記憶體,並在程式結束前被消滅。儘管如此, 如果宣告時是位在某個區塊中的話,仍然只有在該區塊範圍內能夠讀取 它。另外,對一個 class 來說,不管以此種結構宣告的物件有多少個, 其靜態成員永遠只有一份實體──所有的物件會共享這些靜態成員。當 一個成員函式前面加上 static 時,表示該函式只會對結構內的靜態成 員做存取。如果是不屬於任何結構的普通函式被冠上 static 的話,則 沒有這種限制;普通的靜態函式只有一項特徵,那就是它不能被計畫( project,我實在不知道怎麼翻.....@@)中的其他檔案存取。(這項特 徵是所有的靜態變數或函式都具備的,包括之前所說的那些。) P.S. 如果你在書上看到什麼不會改變之類的敘述,那是說它的位址不會 改變。靜態變數並沒有 const 的特性,不要弄錯了。還有什麼「 每次看到它都是同一個」之類的,也是在強調它只會被建立一次。 這題很多人錯喔...... 又,如果不知道什麼是 project 的話,請務必去翻翻書喔!我一 時之間說不清楚....(絕不是因為懶! ....真的!) 3. sizeof 一個運算子,後面可以接變數或型態,會回傳其所佔用(或所需要)的 記憶體大小。這個回傳值實際上是 char 型態大小的整數倍,會這樣定 意原因是 C++ 標準中沒有限定哪種型態應該佔用多少記憶體,一切都 交由編譯器來決定。幾乎所有的編譯器都是將 char 定為一個 byte , 所以通常可以把這個單位想成是 byte ,不過實際上的情形還是要以使 用的編譯器為準。另外,sizeof 回傳的型態是 size_t,絕大多數的編 譯器都將之定義為 unsigned int。 P.S. 你可能會有個疑問,不管是型態的大小也好,或者是 size_t 這種 奇怪的型態也罷,為什麼 C++ 標準不直接規定好,還要交給編譯 器決定這麼麻煩?答案是為了彈性與相容性。不同的平台之下每種 型態適合的大小都不一樣,比如說桌上型電腦跟手機多半就不會相 同;但是標準是大家都要遵守的。如果硬在標準中規定好一切,那 很可能就必須放棄某些平台。另外,就算在同一個平台下,由於種 種考量,每一家編譯器定義的方式也可能不一樣。交給編譯器決定 的好處是,只要我的程式碼符合公定標準,就可以在所有地方的流 通,每次跨平台的時候只要重新編譯一次就好了,完全不必更動任 何一行程式碼。 4. unsigned 表示所修飾的變數沒有正負號的差別。由於將原本紀錄正負的位元也拿 紀錄數值了,所以可以儲存比原本大一倍的數值。 5. return 從目前所在的函式立刻跳回到之前做出呼叫的函式中。(對 main() 來 說,則是回到作業系統。)除了標示成 void 的函式外,跳回去的時候 必須夾帶一個變數,作為此函式執行的結果。 6. public 表示以下的成員對外公開,所有函式都可以存取這些成員變數,或是呼 叫這些成員函式。 7. struct 將各種型態的變數或函式組合起來,稱此集合為一個結構,可以當成型 態使用。struct 為 class 的前身,兩者的差別是 struct 中所有的成 員皆為 public。 P.S. 這題也有很多人錯,struct 當然可以有函式啊,事實上它也是有 建構子與解構子的。 8. double 倍精準浮點數,是一種型態,與 float 大致相同,但容量為其兩倍。 9. void 這個關鍵字有三種用法,當它在函式的前面時,表示這個函式沒有回傳 值;當它放在函式的傳入值清單中時,表示這個函式不需要傳入值;當 它作為一個指標的型態時,表示這是一個通用指標。一個被宣告成 void* 的指標可以指到任何型態的變數(const 變數除外),但是在它轉型之 前沒有辦法被解讀。通用指標可以轉型成任何一種指標。 10. break 從 do、while、for、switch 中跳出來。 P.S. 終於打完這題了......看來老師跟我說解答第一題略過果然是相當有見 地.....@@ 不過我看這題普遍答得都不太理想,所以我還是寫一下.... 基本上不用太擔心,老闆的指示是只要有沾到邊就給分,我是寫來釐清 觀念的。 第二題:(10分) 下列敘述執行後變數 A, B, C, D, E 之值分別為何? int x[10] = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20}; int A, B, C, D, E; A = x[7]; B = 20*x[1] + x[2]; C = *x; D = *(x + 4); x++; E = *(x + 3); Ans: A = 16 B = 86 C = 2 D = 10 E = 10 P.S. 偷偷吐嘈一下,老師少一個分號,扣一分。 第三題:(10分) 下列敘述執行後的輸出為何? #include <iostream.h> main() { int a; static char c[] = "Programming with C++ can be great fun!"; for(a=0; c[a]!='\0'; a++) { if((a%3) == 0) cout << c[a]; } } Ans:Pgmnwh+c e n 第四題:(10分) 下列程式片段執行後的輸出為何? char s1[50] = 'JACK'; char s2[50] = 'MARY'; char s3[50]; strcpy(s3, s2); cout << s3 << endl; cout << strlen(s1) + strlen(s2) << endl; strcat(s3, " and "); cout << s3 << endl; strcat(s3, s1); cout << s3 << endl; cout << s1 << " and " << s2 << endl; Ans: MARY 8 MARY and MARY and JACK JACK and MARY 第五題:(10分) 請設計一個程式其功能為輸出一個九九乘法表於檔案內。輸出的檔案名稱為: EXAM2004.TXT。 HINT: 你可能會用到下列之C++指令 ofstream outFile("EXAM2004.TXT", ios::out); Ans: #include "stdafx.h" #include <fstream> #include <iostream> using namespace std; void main() { ofstream outFile("EXAM2004.TXT", ios::out); // 宣告一個 out file stream, // 並準備寫入 "EXAM2004.TXT" 這個檔案 // 輸出九九乘法表 for(int i=1; i<=9; i++) { for(int j=1; j<=9; j++) outFile << i << "x" << j << " = " << i*j << endl; outFile << endl; } // 結束檔案 outFile.close(); } 第六題:(10分) 請設計一個程式,由鍵盤讀入一個20x20的整數二維陣列,然後分別計算二維 陣列兩條對角線元素的總合,將結果輸出到螢幕上。 Ans: #include "stdafx.h" #include <iostream> using namespace std; void main() { cout << "請輸入 20x20 的整數陣列 (400個耶!?請加油....)" << endl; int matrix[20][20]; // 20x20 的矩陣 int sum1 = 0; // 主對角線和 int sum2 = 0; // 另一條對角線和 for(int i=0; i<20; i++) for(int j=0; j<20; j++) { // 讀入矩陣的值 cout << "A[" << i << "][" << j << "] = "; cin >> matrix[i][j]; // 如果在主對角線上就累計 if(i == j) sum1 += matrix[i][j]; // 如果在另一條對角線上就累計 if(i+j == 19) sum2 += matrix[i][j]; } cout << "辛苦了!兩條對角線的和分別如下:" << endl << sum1 << "(左上到右下)" << endl << sum2 << "(右上到左下)" << endl; } 第七題:(10分) 請寫一個程式將一字串的所有旋轉後的字串組合輸出至電腦螢幕,每次只能 旋轉一個字元。如字串"rotate"產生所有的旋轉組合為: rotate, otater, tatero, aterot, terota, erotat Ans: #include "stdafx.h" #include <iostream> using namespace std; void main() { char str[100]; // 字串 int len = 0; // 字串長度 int i, j; // loop counter cout << "輸入一個字串:"; cin >> str; len = strlen(str); // 開始旋轉,方法是將字串從中間切開,然後兩個子字串交換位置。 // 要產生所有組合的話,只要切的位置從最左邊不斷往右移就好了。 for(i=0; i<len; i++) { // 輸出後半段的字串 for(j=i; j<len; j++) cout << str[j]; // 輸出前半段的字串 for(j=0; j<i; j++) cout << str[j]; cout << endl; } } P.S. 老闆是說用 char 陣列就好,不過基本上字串應該用 string 才對。 下面補上 string 的寫法,我覺得你們應該有能力可以看懂了。 這樣寫的好處是不用擔心輸入太長會爆掉,而且運算方便。 #include "stdafx.h" #include <iostream> #include <string> void main() { std::string str; int len; std::cout << "輸入一個字串:"; std::cin >> str; len = str.length(); for(int i=0; i<len; i++) std::cout << str.substr(i, len) << str.substr(0, i) << std::endl; } 第八題:(15分) 設計一個程式,輸入國內某網站進行棒球選手網路票選結果的 N 個 球員(N<50)姓名與得票數,將結果以圖形表現出來,圖形以 1000 票為一個單位轉換成一個星號,不足 1000 票者則捨去不計,將各球 員的得票數如下面之格式輸出於螢幕。 ============================================================= 球員 累計票數 繪圖 ============================================================= 陳致遠 20650 ******************** 張泰山 15874 *************** 謝佳賢 9718 ********* 彭政閔 6871 ****** 蔡泓澤 5849 ***** … … … ============================================================= Ans: #include "stdafx.h" #include <iostream> #include <iomanip> using namespace std; void main() { char name[50][100] = {{""}}; // 球員姓名(請注意二維陣列括號要兩層) int vote[50]; // 票數 int num = 0; // 幾個球員 int i; // 迴圈計數器 for(i=0; i<50; i++) { // 姓名 cout << "請輸入球員姓名,或輸入 \"-1\" 終止:"; cin >> name[i]; // name 是個 50 列 100 行的矩陣 // name[i] 的意思是第 i 列 // -1 就終止 if(name[i][0]=='-' && name[i][1]=='1') break; // 票數 cout << "請輸入該球員的票數:"; cin >> vote[i]; // 累計球員數 num++; } // 畫表格 for(i=0; i<60; i++) cout << "="; cout << endl << setw(10) << "球員" << setw(15) << "累計票數" << "\t繪圖" << endl; for(i=0; i<60; i++) cout << "="; cout << endl; for(i=0; i<num; i++) { // 顯示姓名與票數 cout << setw(10) << name[i] << setw(15) << vote[i] << "\t"; // 畫星星 for(int j=0; j<(vote[i]/1000); j++) cout << "*"; cout << endl; } for(i=0; i<60; i++) cout << "="; cout << endl; } 第九題:(15分) 請以物件導向的觀念設計一個程式計算長方形的周長與面積。 在此程式中你需要設計一個 Rectangle 的類別來記錄與處理資 料。程式由使用者輸入長方形的長與寬,分別計算出此長方形的 周長與面積輸出至電腦螢幕。程式的要求如下: 1. 長方形的長、寬、周長與面積為 Rectangle 類別的內部 (private)資料,其讀寫需要由類別的成員函式來完成。 2. 分別設計設定長寬與計算周長與面積的函式,並將其設計 為 Rectangle 類別中的 public 成員函式。 3. 程式連續執行,至使用者輸入結束指令後(自行設計)終止。 Ans: #include "stdafx.h" #include <iostream> using namespace std; class Rectangle { public: void SetLength(float l); // 設定長 void SetWidth(float w); // 設定寬 float GetArea(){return length*width;} // 回傳面積 // 因為這函式實在太短了,而且我想偷懶,所以打在這裡; // 不過這種寫法很糟糕,平常還是盡量不要的好。 float GetAround(){return (2*length + 2*width);} // 回傳周長 private: float length; float width; }; void Rectangle::SetLength(float l) { length = l; } void Rectangle::SetWidth(float w) { width = w; } void main() { float le, wi; // 矩形長寬 Rectangle rect; // 矩形 while(1) { // 讀取長寬 cout << "請輸入矩形的長:"; cin >> le; cout << "請輸入矩形的寬:"; cin >> wi; // 設定長寬 rect.SetLength(le); rect.SetWidth(wi); // 顯示面積周長 cout << "該矩形面積 = " << rect.GetArea() << endl << "該矩形周長 = " << rect.GetAround() << endl << endl; // 繼續? char tmp; cout << "繼續嗎?(Y/N)"; cin >> tmp; if(tmp=='n' || tmp=='N') // N 就跳出 break; cout << endl; } } 就這樣了。這次考題根本就大放水,而且老闆說改鬆一點, 基本上我根本就昧著良心在改......@@ 原始分數平均就有 6x,8x 分的一卡車........ -- 「唉...好吧,我長話短說,」 「你...比妲己強嗎?」 「我絕對不會輸她」 「因為我不會和她打!!!!!!!!!!!」 --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.166.73.37 ※ 編輯: SuperBEAR 來自: 218.166.73.37 (01/21 03:50)
1F:→ jrshin:推~昧著良心 推 218.35.83.51 01/21
2F:→ jrshin:老師特地交代 所以我作業7成績平移30~50分 推 218.35.83.51 01/21
3F:→ coldshawn:第六和第八題都用不到矩陣阿 推218.164.109.178 01/21
4F:→ SuperBEAR:不用也可以寫的出來沒錯,不過一般而言, 推 218.166.73.37 01/21
5F:→ SuperBEAR:這種東西不會要人家用鍵盤輸入,而且多半 推 218.166.73.37 01/21
6F:→ SuperBEAR:還會要做別的事情,所以存起來比較好 推 218.166.73.37 01/21
※ 編輯: SuperBEAR 來自: 218.166.73.37 (01/21 12:36)
7F:→ st3001:突然發現簽名檔 推推太公望XD 推 218.184.78.145 01/31
8F:→ sima:你好空虛喔~ 推 140.112.25.184 02/01
9F:→ wendychang:害我在想怎麼過了這麼久推文數又變多了... 推 218.174.158.16 02/01







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:e-shopping站內搜尋

TOP