問題組合 1
請瀏覽以下計畫,然後回答以下問題。我們希望您只照著原始碼來回答問題,也就是說,請不要將複製檔案複製到檔案中,再編譯並依執行情況回答問題。這樣就可以從中得到樂趣!
int main() { int counter, first, last, next; first = 1; last = 2; for (counter = first; counter <= last; counter++) { cout << "\n " << counter; next = counter * counter; cout << " " << next; } counter = first; while (counter <= last) { cout << "\n " << counter; next = counter * counter; cout << " " << next; counter++; } counter = first; do { cout << "\n " << counter; next = counter * counter; cout << " " << next; counter++; } while (counter < last); }
問題 1:這個計畫的輸出內容是什麼?
答: |
1 2 2 4 1 2 2 4 1 2 2 至 4 個 |
B) |
1 1 2 4 1 1 2 4 1 1 2 4 |
C) |
1 1 2 4 1 1 2 4 1 1 |
D) |
1 1 2 4 1 1 1 1 2 4 |
E) | 它不會輸出任何內容,因為語法有誤。 |
問題 2:移除「counter」的初始化時會有什麼後果會發生什麼情況?
答: | 無限迴圈 - Do-while 迴圈會輸出一系列 |
B) | 程式的輸出內容不會改變 |
C) | Do-while 迴圈會輸出 2 和 4。 |
D) | 暫時迴圈不會輸出任何內容 |
E) | Do-while 迴圈會輸出 3 和 9。 |
第 3 題:以本頁上方的原始計畫假設 已移除在 while 迴圈前初始化計數器變數的那一行。內容 如果我們也會移除 when 迴圈中的計數器++ 行,就像在 下列項目?
答: | when 迴圈不會輸出任何內容, |
B) | when 迴圈會輸出 1 和 1;do-while 迴圈不會輸出任何內容。 |
C) | when 迴圈的輸出內容會與這兩行 包含。 |
D) | 系統將輸出隨機號碼,直到電腦轉動為止 關閉。 |
E) | when 迴圈是無限迴圈 |
問題 4:如果使用這個頁面頂端的原始程式,會發生什麼情況? 會這樣?
counter = first; while (counter <= last) { cout << "\n" << counter; if (first % 2 == 0) next = counter * counter; cout << " " << next; counter++; }
答: | when 迴圈的輸出內容與原始程式相同。 |
B) | when 迴圈不會輸出任何內容 |
C) | when 迴圈的輸出結果為 1 1 和 1 4。 |
D) | when 迴圈的輸出結果為 1 2 和 2 4。 |
E) | when 迴圈的輸出結果為 1 4 和 2 4。 |
女) | when 迴圈的輸出結果是 2 4 和 2 4。 |
問題 5:如果第一個變數大於最後一個變數,會發生什麼情況?
答: | 時迴圈會輸出任何內容,但不會輸出其他內容。 |
B) | 這個「迴圈」指令會輸出部分內容,其他則不會。 |
C) | 因此不會有任何輸出內容。 |
D) | 程式會隔離錯誤或異常終止 |
E) | for 迴圈會輸出部分內容,其他則不會。 |
問題 6:如果初始化第一個變數,程式會輸出什麼內容 會與最後一個變數相同?
答: | 這個「迴圈」指令會輸出部分內容,其他則不會。 |
B) | 時迴圈會輸出任何內容,但不會輸出其他內容。 |
C) | 每個迴圈輸出一行。 |
D) | 模擬迴圈會輸出 2 行,另一個迴圈會呈現一條線。 |
E) | 這個指令不會輸出任何內容 |
女) | for 迴圈會輸出部分內容,其他則不會。 |
問題組合 2
和上一個問題相同,歡迎參考這個計畫。請僅查閱原始碼來回答後續問題。
#include <iostream> using namespace std; int main() { int Boys = 3, Girls = 5; void F1(int males, int females); void F2(int &m, int &f); F1(Boys, Girls); cout << "\nAfter calling F1, within main()"; cout << "\n\tBoys = " << Boys; // #2 cout << "\n\tGirls = " << Girls; F2(Boys, Girls); cout << "\nAfter calling F2, within main()"; cout << "\n\tBoys = " << Boys; // #4 cout << "\n\tGirls = " << Girls; } void F1(int b, int g) { b += 3, g += 4; cout << "\nF1"; cout << "\n\tBoys = " << b; // #1 cout << "\n\tGirls = " << g; } void F2(int &b, int &g) { b = b + 8, g = g + 5; cout << "\nF2"; cout << "\n\tBoys = " << b; // #3 cout << "\n\tGirls = " << g; }
問題 1:標記行上的 Boys 變數輸出是什麼?
答: |
#1:6 #2:3 #3:11 #4:11 |
B) |
#1:6 #2:3 #3:11 #4:3 |
C) |
#1:6 #2:6 #3:11 #4:11 |
D) | 這個函式不會編譯或執行,因此不會輸出任何內容。 |
第 2 題:請針對下列計畫幾行選擇所有適用的選項:
void F1(int males, int females); void F2(int &m, int &f);
答: | C++ 規則狀態表明我們可以移除這兩行,只要 方法是在使用前定義 |
B) | C++ 規則指出, 宣告和定義 |
C) | 如果移除這兩行,這個程式就會異常終止。 |
D) | 更常在全球聲明 範圍。 |
E) | 這些稱為正向宣告。 |
問題 3:如果我們從 main() 移動下列這一行並放到全域 範圍,會發生什麼事?
int Boys = 3, Girls = 5;
答: | 輸出內容會相同。 |
B) | 男孩會 = 3,女孩們在所有輸出結果中 = 5 |
C) | 男孩會 = 3,而女孩在 main() 的輸出內容中只會 5 |
問題 4:如果我們將計畫開頭改成以下示例,會發生什麼情況:
// We have moved moved these to global scope const int Boys = 3; const int Girls = 5; void main() { //int Boys = 3, Girls = 5;
答: | 程式會編譯,但在嘗試執行時就會異常終止。 |
B) | 輸出內容不會有任何變更 |
C) | 模型中的輸出內容將是「Boys = 3 Girls = 5」 |
D) | 輸出值會是 Boys = 3 Girls = 5 only in the output from main() |
E) | 程式可能無法編譯 (視編譯器而定)。 |
問題 5:資料是透過 F2 中的值傳送。
答: | 正確。 |
B) | 不正確。 |
問題組合 3
和上一個問題相同,歡迎參考這個計畫。請 才能回答後續問題。這是 比起前兩部影片,請小心追蹤程式碼。
#include <iostream> using namespace std; const int MAX_SIZE = 20; typedef int ARR2D[MAX_SIZE][MAX_SIZE]; void Print(ARR2D in_array, int rows, int cols); void Fill(ARR2D in_array, int rows, int cols); int main() { ARR2D matrix; int row, col; do { cout << "Please enter the size of the matrix to generate (rows and cols) :" << endl; cin >> row >> col; } while (row <= 0 || row > MAX_SIZE || col <= 0 || col > MAX_SIZE); Fill(matrix, row, col); Print(matrix, row, col); return(0); } void Print(ARR2D in_array, int rows, int cols) { for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) cout << '\t' << in_array[i][j]; cout << endl; } } void Fill(ARR2D in_array, int rows, int cols) { for(int i = 0; i < rows; i++) for (int j = 0; j < cols; j++) in_array[i][j] = 0; const int limit = rows * cols; int cNum = 1; int cRow = 0; int cCol = 0; int cDir = 0; // 0-north, 1-east, 2-south, 3-west while(true) { // Place the number. in_array[cRow][cCol] = cNum; cNum++; if (cNum > limit) break; int fRow = cRow; int fCol = cCol; while (true) { fRow = cRow; fCol = cCol; switch(cDir) { case 0: fRow--; break; case 1: fCol++; break; case 2: fRow++; break; case 3: fCol--; break; } if ( fRow >= 0 && fRow < rows && fCol >= 0 && fCol < cols && in_array[fRow][fCol] == 0) break; cDir = (cDir + 1) % 4; } cRow = fRow; cCol = fCol; } }
問題 1:此程式在列 3 和 4 的輸入值下輸出什麼? 欄位?
答: |
1 2 3 4 5 6 7 8 9 10 11 12 |
B) |
1 2 3 4 5 6 7 8 9 10 11 12 |
C) |
12 11 10 9 8 7 6 5 4 3 2 1 |
D) |
1 3 2 4 8 6 7 5 9 11 10 12 |
E) |
1 2 3 4 10 11 12 5 9 8 7 6 |
登機門) |
9 8 7 6 10 11 12 5 1 2 3 4 |
H) | 而且不會輸出任何內容,因為邏輯錯誤。 |
我) | 因為有語法錯誤,所以不會輸出任何內容。 |
J) | 因此不會輸出任何值。 |
K 鍵) | 輸出的前 12 個數字會在您等待程式執行時出現。 |
問題 2:如果我們在 main() 函式中加入這一行,該怎麼辦?
MAX_SIZE = 10;
答: | 不允許在 C++ 中發生此情況。 |
B) | 這符合規定程式會在 MAX_SIZE 設為 20 的情況下執行 |
C) | 這符合規定該程式會在 MAX_SIZE 設為 10 的情況下執行。 |
問題 3:試想上述計畫的下列四行內容:
const int MAX_SIZE = 20; typedef int ARR2D [MAX_SIZE][MAX_SIZE]; void Print (ARR2D A, int rows, int cols); void Fill (ARR2D A, int rows, int cols);
1) 是否可以在 typedef 中使用 const?
2) 在宣告該類型的變數之前,是否可以在宣告中使用 typedef?
答: | 1) 是 2) 是 |
B) | 1) 否 2) 否 |
C) | 1) 否 2) 是 |
D) | 1) 是 2) 否 |
第 4 題:我們可以使用下列哪項產品:
#define MAX_SIZE 20
const int MAX_SIZE = 20;
答: | 可以,但您也可以在 C++ |
B) | 可以,但我們通常不使用 #define 做為常數 C++ 中 |
C) | #define 不適用於 C++ |
D) | 您無法透過 C 方法執行其中一項操作 |
問題 5:typedef 是用來建立類型名稱的別名。
答: | 正確。 |
B) | 不正確。 |
問題 6:如果沒有將陣列初始化為 0,會發生什麼情況? Fill() 函式嗎?
答: | 系統會執行 12 秒的輸出內容 |
B) | 其執行正常,並產生與陣列相同的輸出內容 初始化為 0 |
C) | 程式無法執行或當機 |
D) | 這項指令會執行,但輸出內容將會是 0 的 |
E) | 這項指令可以執行,但可能不會產生任何輸出內容 |
問題 7:勾選所有適用選項。為什麼在計畫中採用 MAX_SIZE 常數? 如果只輸入「20」是不夠的而非 MAX_SIZE ?
答: | MAX_SIZE 是任何人都能使用的內建 C++ 值。剛設定完畢 並讓他們使用 |
B) | 應避免使用全域常數 |
C) | 使用常數可讓程式更容易理解 |
D) | 計劃中的魔術數字通常被視為好方法。 |
E) | 如果我們想要變更 MAX_SIZE,就只需要在一個容器中變更設定 地點 |
問題 8:Fill() 函式中的切換陳述式應有預設值 因為是包含文字的組合才會是不錯的風格。
答: | 正確。 |
B) | 不正確。 |
問題 9:請注意,在 Fill() 函式中,我們在陳述式之間宣告變數。 舉例來說,cNum 和 cRow 會在 for 迴圈執行後宣告並初始化。 這在 C++ 中運作嗎?或者必須在頂端宣告所有變數 函式?
答: | 但您也可以這麼做。 |
B) | 所有變數都必須在函式頂端宣告。 |
C) | 兩者都不正確 - C++ 不允許 計畫。 |
D) | 所有變數都必須在全域範圍中宣告。 |
問題組合 4
以下是定義和測試簡易類別的一組檔案。一如往常,只要參照原始碼來回答後續問題即可。
以下是標頭檔案 (cow.h):
#ifndef COW_H #define COW_H using namespace std; typedef enum Color {black, brown, beige, blackandwhite, nocolor}; class Cow { public: Cow(); ~Cow(); // accessors double weight() { return weight_; }; string name() { return name_; }; Color color() { return color_; }; // mutators void set_name(string inName) { name_ = inName; }; void set_color(Color inColor) { color_ = inColor; }; void set_weight(double inWeight) {weight_ = inWeight; }; void Moo(); void Properties(); private: Color color_; double weight_; string name_; }; #endif
以下是相關的 .cc 檔案 (cow.cc):
#include <iostream> #include "cow.h" using namespace std; Cow::Cow() {} Cow::~Cow() {} void Cow::Moo() { cout << name() << " says MOO." << endl; } void Cow::Properties() { cout << name() << " weighs " << weight() << ", is " << color() << " and says MOO." << endl; }
以下是這個類別的用戶端程式 (cowmain.cc):
#include <iostream> #include "cow.h" using namespace std; int main() { Cow cow1; cow1.set_name("betsy"); cow1.set_weight(400.0); cow1.set_color(black); cow1.Moo(); cow1.Properties(); }
問題 1:這個程式輸出的內容為何?
答: | 表現得非常好 小心,體重 400,是 0,並說 MOO。 |
B) | 表現得非常好 甜心的體重為 400,黑色為 MOO。 |
C) | 表現得非常好 體重 400,是 |
問題 2:絕對不應該放置存取子和變動器方法的程式碼 都會儲存在標頭檔案中(請注意,存取子是傳回值的方法,以及會變動器 是一種修改值的方法)。
答: | 正確。 |
B) | 不正確。 |
問題 3:我們需要有「草修訂」:在每個函式定義之前 電子郵件地址?
答: | 否 - 因為已包含 cow.h |
B) | 是 |
問題 4:角色用途:
#ifndef COW_H #define COW_H ... #endif
會在標頭檔案中播放?
可複選:
答: | 因為檔案名稱為 cow.h,因此不具備用途。 而不是 COW_H。 |
B) | 如果不這樣做,就會發生執行階段錯誤 |
C) | 如果不是,可能會重複加入這個檔案 |
D) | 不會採取任何行動,因為一或多個關鍵字的拼寫錯誤。 |
E) | 由於 Cow 類別只有一個標頭檔案,因此不會執行任何動作。 |
問題 5:如果在 cowmain.cc 中加入這一行,會發生什麼情況?
cow1.weight_ = 24;
答: | 程式會執行,權重變數會隨之修改 。 |
B) | 程式會編譯並執行,但會在該行異常終止。 |
C) | C++ 不允許這種情況。 |
D) | 程式會編譯並執行,但權重變數不會 已由這一行變更。 |
問題 6:執行下列行時,系統會呼叫 Cow 類別中的建構函式:
Cow cow1;
建構函式有哪些重要特性?
(可複選)
答: | 通常不會傳回任何值 |
B) | 如果沒有在類別中提供建構函式,該類別就會 不編譯 |
C) | Cow 類別中的建構函式未初始化,因此十分異常 私人變數 |
D) | 其名稱一律與類別相同 |
E) | 只要 引數 不同 |
女) | 如果指定類別,就會叫用建構函式。 |
問題 7:解構函式有哪些重要特性?
答: | 當物件超出範圍時,系統就會呼叫解構函式 |
B) | 解構函式與類別相同,但前面加上「~」 |
C) | Cow.cc 中的解構函式有東西 也不會有任何作用。 |
D) | 如果沒有為類別建立解構函式,類別就不會 編譯 |
問題 8:鑒於用戶端程式使用類別的方式,請考慮使用 包括:
將廣告從 Cow 課程中設定為公開和不公開的時候,是不適用的。換句話說,不公開的項目必須設為公開,否則便不得公開。
答: | 正確。 |
B) | 不正確。 |
問題 9:如果除了原本的建構函式之外 我們必須取得版本新建構函式外觀如下:
Cow::Cow(string inName, double inWeight, Color inColor) { set_name(inName); set_weight(inWeight); set_color(inColor); }
接著在 main() 中加入以下這幾行程式碼:
Cow cow2("milly", 350.2, brown); cow2.Moo(); cow2.Properties();
可以嗎?
(可複選)
答: | 我們初始化 cow2 中的 main() 行會異常終止。 |
B) | 我們只能有一個建構函式。 |
C) | 這在 C++ 中很常見 |
D) | 是,但這並不是一般的 C++ 使用情況 |
E) | 這樣可以執行,但不會輸出任何值,因為 就不會進行初始化 |
女) | 我們無法從以下位置呼叫 setName()、setColor() 和 setWeight() 具備相同類別的方法 |
加分題
問題 1) 下列各項輸出內容為何?
#include <iostream> using namespace std; void HelpMe(int *p, int *num, int *q); void WhereAmI(int *p, int *q, int a); void HelpMe(int *p, int *num, int *q) { int a; a = 2; q = &a; *p = *q + *num; num = p; } void WhereAmI(int *p, int *q, int a) { a = 6; *p = a + *p; *q = a + 3; HelpMe(q, &a, p); } int main() { int *p; int q; int *num; int a; a = 3; q = 5; p = &a; num = &q; HelpMe(&a, p, num); WhereAmI(&q, p, *num); cout << "*p = " << *p << " q = " << q << " *num = " << *num << endl; }
問題 2) 假設已有 Apple 類別且已初始化,請考慮以下敘述。Apple 類別具有 color_ 執行個體變數:
Apple* granny_smith = new Apple;
請選擇下列所有正確的敘述:
答: | Apple* granny_smith = NULL;if (granny_smith == NULL)...這並不安全 - NULL 不是可透過這種方式進行檢查的值。 |
B) | Apple* granny_smith, fuji;這可宣告 Apple 物件的兩個指標 |
C) | granny_smith 變數包含與 Apple 物件相關聯的例項變數值 |
D) | Apple* granny_smith = NULL;沒關係 |
E) | granny_smith 變數包含 Apple 物件的地址 |
女) | string gs_color = *(granny_smith.get_color());這個陳述式會傳回 granny_smith 物件的顏色 (假設物件已初始化)。 |
登機門) | 新 Apple 物件的儲存空間已分配到堆積中 |
H) | 新 Apple 物件的儲存空間會於執行階段堆疊上分配 |
我) | int* a = &b;這會將 b 的地址放入 a。 |
問題 3) 下列程式的輸出內容為何?
#include <iostream> using namespace std; const int kNumVeggies = 4; void Grill(int squash, int *mushroom); int Saute(int onions[], int celery); void Grill(int squash, int *mushroom) { *mushroom = squash/4; cout << *mushroom + squash << endl; } int Saute(int onions[], int celery) { celery *= 2; onions[celery]++; Grill(onions[0], &onions[3]); cout << celery << " " << onions[3] << endl; return celery; } int main() { int broccoli, peppers[kNumVeggies], *zucchini; for (broccoli = 0; broccoli < kNumVeggies; broccoli++) peppers[broccoli] = kNumVeggies - broccoli; zucchini = &peppers[Saute(peppers,1)]; Grill(*zucchini, zucchini); zucchini--; cout << peppers[3] + *zucchini + *(zucchini + 1) << endl; }
測驗答案
您應該試著在不查看答案的情況下,完成上述所有問題。建議你請人協助,而不要直接跳到答案表尋求協助。
您可以在這裡查看上述問題的答案。