ชุดโจทย์ข้อที่ 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 |
ง) |
1 1 2 4 1 1 1 1 2 4 |
จ) | โดยไม่แสดงผลสิ่งใดเลย เนื่องจากมีข้อผิดพลาดทางไวยากรณ์ |
คำถามที่ 2: จะเกิดอะไรขึ้นหากเรานำการเริ่มต้น "counter" ออกก่อนลูป "Do-With"
ก) | ลูปที่ไม่สิ้นสุด - ลูป "ทำขณะ" จะแสดงผลชุดของ 1 |
B) | เอาต์พุตของโปรแกรมจะไม่เปลี่ยนแปลง |
C) | ลูป "ทำระหว่างดำเนินการ" จะมีเอาต์พุตเป็น 2 และ 4 |
ง) | ลูป "ทำขณะ" จะไม่แสดงอะไรเลย |
จ) | ลูป "ทำก่อน" จะมีเอาต์พุตเป็น 3 และ 9 |
คำถามที่ 3: จากโปรแกรมเดิมที่ด้านบนของหน้านี้ สมมติว่าเราลบบรรทัดที่เริ่มต้นตัวแปรตัวนับก่อนวงกลมขณะวนซ้ำ จะเกิดอะไรขึ้นหากเรานำบรรทัด counter++ ภายในขณะลูปออกด้วย ดังตัวอย่างต่อไปนี้
ก) | การวนซ้ำขณะไม่แสดงผล |
B) | การวนซ้ำคำสั่งจะเอาต์พุต 1 และ 1 ส่วนลูป "ทำขณะ" จะไม่แสดงข้อมูลอะไรเลย |
C) | เอาต์พุตของลูปขณะเหมือนกันเมื่อรวมทั้ง 2 บรรทัด |
ง) | ระบบจะแสดงตัวเลขแบบสุ่มจนกว่าเราจะปิดคอมพิวเตอร์ |
จ) | ลูปขณะเป็นการวนซ้ำที่ไม่มีที่สิ้นสุด |
คำถามที่ 4: จากโปรแกรมเดิมที่ด้านบนของหน้านี้ จะเกิดอะไรขึ้น หากลูปมีลักษณะดังนี้
counter = first; while (counter <= last) { cout << "\n" << counter; if (first % 2 == 0) next = counter * counter; cout << " " << next; counter++; }
ก) | เอาต์พุตของลูปขณะจะเหมือนกับในโปรแกรมต้นฉบับ |
B) | การวนซ้ำขณะจะไม่แสดงข้อมูลใดๆ |
C) | เอาต์พุตของลูปขณะคือ 1 1 และ 1 4 |
ง) | เอาต์พุตของลูปขณะคือ 1 2 และ 2 4 |
จ) | เอาต์พุตของลูปขณะคือ 1 4 และ 2 4 |
ฉ) | เอาต์พุตของลูปขณะคือ 2 4 และ 2 4 |
คำถามที่ 5: จะเกิดอะไรขึ้นหากตัวแปรแรกมากกว่าตัวแปรสุดท้าย
ก) | ขณะที่ลูปจะแสดงผลบางอย่าง แต่ไม่ส่งออกไปที่อื่น |
B) | คำสั่งทำขณะวนซ้ำจะแสดงผลลัพธ์บางอย่าง แต่ไม่แสดงผลลัพธ์อื่น |
C) | จะไม่มีเอาต์พุตเลย |
ง) | โปรแกรมจะแยกความผิดหรือข้อขัดข้อง |
จ) | For-loop จะแสดงบางอย่าง แต่ไม่แสดงผลลัพธ์ |
คำถามที่ 6: โปรแกรมจะได้ผลลัพธ์เป็นอย่างไรหากเราเริ่มต้นตัวแปรแรกให้เหมือนกับตัวแปรตัวสุดท้าย
ก) | คำสั่งทำขณะวนซ้ำจะแสดงผลลัพธ์บางอย่าง แต่ไม่แสดงผลลัพธ์อื่น |
B) | ขณะที่ลูปจะแสดงผลบางอย่าง แต่ไม่ส่งออกไปที่อื่น |
C) | แต่ละวนซ้ำจะแสดง 1 บรรทัด |
ง) | การดำเนินการวนลูปจะแสดงผล 2 บรรทัด และลูปอีกบรรทัดหนึ่งจะวนซ้ำ 1 บรรทัด |
จ) | จะไม่มีการแสดงผลลัพธ์ใดๆ |
ฉ) | For-loop จะแสดงบางอย่าง แต่ไม่แสดงผลลัพธ์ |
ชุดโจทย์ข้อที่ 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 |
ง) | ซึ่งจะไม่แสดงผลใดๆ เนื่องจากไม่มีการคอมไพล์หรือเรียกใช้ |
คำถามที่ 2: เลือกทุกข้อที่เกี่ยวข้องกับบรรทัดต่อไปนี้ของโปรแกรม
void F1(int males, int females); void F2(int &m, int &f);
ก) | โดยกฎ C++ ระบุว่าเรานำ 2 บรรทัดนี้ออกได้ ตราบใดที่มีการกำหนดวิธีการก่อนใช้งาน |
B) | โดยกฎ C++ จะระบุว่าชื่ออาร์กิวเมนต์ต้องเหมือนกันระหว่างการประกาศและคำจำกัดความ |
C) | โปรแกรมนี้จะขัดข้องหากเรานำ 2 บรรทัดนี้ออก |
ง) | การประกาศในขอบเขตส่วนกลางถือเป็นเรื่องปกติ |
จ) | ซึ่งเรียกว่าการประกาศส่งต่อ |
คำถามที่ 3: หากเราย้ายบรรทัดต่อไปนี้จาก main() และวางไว้ในขอบเขตทั่วโลก จะเกิดอะไรขึ้น
int Boys = 3, Girls = 5;
ก) | ผลลัพธ์จะเหมือนกัน |
B) | เด็กผู้ชายจะ = 3 และเด็กผู้หญิงจะ = 5 ในเอาต์พุตทั้งหมด |
C) | เด็กผู้ชายจะ = 3 และเด็กผู้หญิงจะ = 5 เฉพาะในเอาต์พุตจาก main() |
คำถามที่ 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) | ผลลัพธ์ที่ได้จะเป็นเด็กผู้ชาย = เด็กผู้หญิง 3 คน = 5 ตลอดระยะเวลาของโปรแกรม |
ง) | เอาต์พุตจะเป็น Boys = 3 Girls = 5 เฉพาะในเอาต์พุตจาก main() เท่านั้น |
จ) | โปรแกรมอาจไม่คอมไพล์ (ขึ้นอยู่กับคอมไพเลอร์) |
คำถามที่ 5: มีการส่งข้อมูลโดยค่าในหน่วย F2
ก) | จริง |
B) | เท็จ |
ชุดโจทย์ข้อที่ 3
นี่เป็นโปรแกรมที่คุณควรพิจารณาเช่นเดียวกับในชุดปัญหาก่อนหน้า โปรดตอบคำถามที่ตามมาโดยดูเฉพาะซอร์สโค้ดส่วนนี้น่าสนใจกว่า 2 รายการก่อนหน้า - ติดตามโค้ดอย่างละเอียด
#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 |
ง) |
1 3 2 4 8 6 7 5 9 11 10 12 |
จ) |
1 2 3 4 10 11 12 5 9 8 7 6 |
ช) |
9 8 7 6 10 11 12 5 1 2 3 4 |
ซ) | โปรแกรมไม่แสดงข้อมูล - ตรรกะนี้มีข้อผิดพลาด |
1) | ไม่แสดงข้อมูลใดๆ เนื่องจากมีข้อผิดพลาดทางไวยากรณ์ |
จ) | ระบบไม่ส่งออกอะไรเลย ซึ่งไม่ควรจะเป็น |
พ) | โดยจะแสดงผลตัวเลข 12 ตัวแรกที่นึกถึงเมื่อคุณรอให้โปรแกรมทำงาน |
คำถามที่ 2: จะเป็นอย่างไรหากเราเพิ่มบรรทัดต่อไปนี้ลงในฟังก์ชัน main() ของเรา
MAX_SIZE = 10;
ก) | ไม่อนุญาตให้ใช้ใน C++ |
B) | ได้รับอนุญาต โปรแกรมจะทำงานโดยตั้งค่า MAX_SIZE เป็น 20 |
C) | ค่านี้ได้รับอนุญาต โปรแกรมจะทำงานโดยตั้งค่า MAX_SIZE เป็น 10 |
คำถามที่ 3: พิจารณา 4 บรรทัดต่อไปนี้จากโปรแกรมด้านบน
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) สามารถใช้ Const ใน Typedef ได้ไหม
2) เป็นไปได้ไหมที่จะใช้ typedef ในการประกาศก่อนที่จะมีการประกาศตัวแปรประเภทนั้น
ก) | 1) ได้ 2) ได้ |
B) | 1) ไม่เห็น 2) ไม่เคย |
C) | 1) ไม่ได้ 2) ใช่ |
ง) | 1) ได้ 2) ไม่ได้ |
คำถามที่ 4: เราใช้สิ่งต่อไปนี้ได้ไหม
#define MAX_SIZE 20แทน:
const int MAX_SIZE = 20;
ก) | ใช่ ใช้งานได้ และสามารถใช้ #define สำหรับค่าคงที่ใน C++ ได้ |
B) | ได้ วิธีนี้ได้ผลแต่เรามักจะไม่ใช้ #define สำหรับค่าคงที่ใน C++ |
C) | #define ใช้ไม่ได้ใน C++ |
ง) | คุณทำสิ่งเหล่านี้ในโหมด C ไม่ได้ |
คำถามที่ 5: typedef ใช้ในการสร้างชื่อแทนสำหรับชื่อประเภท
ก) | จริง |
B) | เท็จ |
คำถามที่ 6: จะเกิดอะไรขึ้นหากเราไม่กำหนดค่าเริ่มต้นของอาร์เรย์เป็น 0 ในฟังก์ชันFill()
ก) | โปรแกรมจะทำงานแต่เอาต์พุตจะเป็น 12 |
B) | ตัวแปรจะทำงานได้ปกติและสร้างเอาต์พุตเดียวกับที่เริ่มต้นอาร์เรย์เป็น 0 |
C) | โปรแกรมจะไม่ทำงานหรือเกิดข้อขัดข้อง |
ง) | โปรแกรมจะทำงานแต่เอาต์พุตจะเป็น 0 ทั้งหมด |
จ) | โปรแกรมจะทำงานแต่ไม่สร้างเอาต์พุตใดๆ |
คำถามที่ 7: เลือกได้หลายคำตอบ ทำไมเราต้องใช้ค่าคงที่สำหรับ MAX_SIZE ในโปรแกรมนี้ ง่ายกว่าพิมพ์ "20" แทนที่จะเป็น MAX_SIZE ในทุกที่ที่ต้องการไหม
ก) | MAX_SIZE เป็นค่า C++ ในตัวที่ทุกคนใช้ได้ เพียงตั้งค่าและใช้งาน |
B) | ควรหลีกเลี่ยงค่าคงที่ร่วมเหมือนกับตัวแปรร่วม |
C) | การใช้ Const ช่วยให้เข้าใจโปรแกรมได้ง่ายขึ้น |
ง) | ตัวเลขมหัศจรรย์ในโปรแกรมถือเป็นแนวทางปฏิบัติที่ดี |
จ) | หากต้องการเปลี่ยน MAX_SIZE เราสามารถเปลี่ยนได้ในที่เดียว |
คำถามที่ 8: คำสั่ง Switch ในฟังก์ชัน Fill() ควรมีกรณีเริ่มต้น เพราะถือเป็นรูปแบบที่ดีที่จะรวมกรณีหนึ่ง
ก) | จริง |
B) | เท็จ |
คำถามที่ 9: โปรดสังเกตในฟังก์ชัน Fill() เราจะประกาศตัวแปรระหว่างคำสั่ง ตัวอย่างเช่น cNum และ cRow จะมีการประกาศและเริ่มต้นหลังจากเรียกใช้ for-loop ฟังก์ชันนี้จะทำงานใน C++ ไหม หรือต้องมีการประกาศตัวแปรทั้งหมดที่ด้านบนของฟังก์ชัน
ก) | ซึ่งไม่เป็นไร |
B) | ต้องประกาศตัวแปรทั้งหมดที่ด้านบนของฟังก์ชัน |
C) | ทั้ง 2 อย่างไม่ถูกต้อง - C++ ไม่อนุญาตให้มีตัวแปรใดๆ ในโปรแกรม |
ง) | ต้องประกาศตัวแปรทั้งหมดในขอบเขตรวม |
ชุดโจทย์ที่ 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: โปรแกรมนี้ให้ผลอย่างไร
ก) | Betsy กล่าวไว้ว่า MOO เบ็ตซี่หนัก 400 เท่ากับ 0 และบอกว่า MOO |
B) | Betsy กล่าวไว้ว่า MOO เบ็ตซี่หนัก 400 เป็นสีดำและเขียนว่า MOO |
C) | Betsy กล่าวไว้ว่า MOO betsy หนัก 400 คือ |
คำถามที่ 2: เราไม่ควรวางโค้ดสำหรับเมธอดตัวเข้าถึงและเปลี่ยนแปลงในไฟล์ส่วนหัว (โปรดทราบว่าตัวเข้าถึงคือเมธอดที่แสดงผลค่า ส่วนการเปลี่ยนแปลงคือเมธอดที่แก้ไขค่า)
ก) | จริง |
B) | เท็จ |
คำถามที่ 3: เราต้องใส่ "Cow:" ก่อนคำจำกัดความฟังก์ชันแต่ละรายการใน cow.cc หรือไม่
ก) | ไม่ - เนื่องจากมี cow.h |
B) | มี |
คำถามที่ 4: หน้าที่ต้องทำ
#ifndef COW_H #define COW_H ... #endif
เล่นในไฟล์ส่วนหัวได้ไหม
เลือกได้หลายคำตอบ
ก) | ไฟล์เหล่านี้ไม่มีจุดประสงค์เพราะชื่อไฟล์คือ cow.h ไม่ใช่ COW_H |
B) | เราอาจพบข้อผิดพลาดรันไทม์หากเราไม่ดำเนินการ |
C) | หากไม่ดำเนินการนี้ เราอาจรวมไฟล์มากกว่า 1 ครั้ง |
ง) | พวกเขาไม่ดำเนินการใดๆ เนื่องจากมีการสะกดคีย์เวิร์ดอย่างน้อย 1 คำผิด |
จ) | ไม่ดำเนินการใดๆ เนื่องจากคลาส Cow มีส่วนหัวเพียง 1 ไฟล์ |
คำถามที่ 5: จะเกิดอะไรขึ้นหากเราเพิ่มบรรทัดต่อไปนี้ใน cowmain.cc
cow1.weight_ = 24;
ก) | โปรแกรมจะทำงาน และตัวแปรน้ำหนักจะได้รับการแก้ไขโดยบรรทัดนี้ |
B) | โปรแกรมคอมไพล์และเรียกใช้ แต่จะขัดข้องในบรรทัดนั้น |
C) | C++ ไม่อนุญาตการดำเนินการนี้ |
ง) | โปรแกรมจะรวบรวมและเรียกใช้ แต่บรรทัดนี้จะไม่เปลี่ยนแปลงตัวแปรน้ำหนัก |
คำถามที่ 6: เมื่อมีการเรียกใช้บรรทัดต่อไปนี้ ตัวสร้างในคลาส "วัว":
Cow cow1;
ลักษณะที่สำคัญของผู้สร้างมีอะไรบ้าง
เลือกได้หลายคำตอบ
ก) | โดยมักจะไม่แสดงค่าใดๆ |
B) | หากเราไม่ได้ให้ตัวสร้างในชั้นเรียน ชั้นเรียนก็จะไม่คอมไพล์ |
C) | ตัวสร้างในคลาส Cow นั้นผิดปกติเพราะไม่ได้กำหนดค่าเริ่มต้นตัวแปรส่วนตัว |
ง) | จะมีชื่อเหมือนกับชั้นเรียนเสมอ |
จ) | เรามีตัวสร้างได้หลายรายการในคลาสตราบใดที่อาร์กิวเมนต์แตกต่างกัน |
ฉ) | จะมีการเรียกใช้ตัวสร้างเมื่อคลาสสร้างขึ้น |
คำถามที่ 7: ลักษณะที่สำคัญบางอย่างของผู้ทำลายคืออะไร
ก) | ระบบจะเรียกตัวทำลายเมื่อออบเจ็กต์ออกนอกขอบเขต |
B) | ตัวทำลายมีชื่อเหมือนกับคลาส แต่ขึ้นต้นด้วย "~" |
C) | ตัวทำลายใน cow.cc มีบางอย่างผิดพลาดตรงที่ตัวทำลายนั้นไม่ได้ทำอะไร |
ง) | หากเราไม่สร้างตัวทำลายชั้นเรียน ชั้นเรียนก็จะไม่คอมไพล์ |
คำถามที่ 8: จากวิธีที่โปรแกรมลูกค้าใช้คลาส โปรดพิจารณาสิ่งต่อไปนี้
การแบ่งสมาชิกเป็นแบบสาธารณะและส่วนตัวในคลาส Cow นั้นไม่เหมาะสม นั่นคือ สิ่งที่เป็นข้อมูลส่วนตัวควรเป็นสาธารณะ หรือสิ่งที่เป็นสาธารณะควรเป็นแบบส่วนตัว
ก) | จริง |
B) | เท็จ |
คำถามที่ 9: จะเกิดอะไรขึ้นหากเราเพิ่มตัวสร้างอีกตัวนอกเหนือจากตัวสร้างที่เราต้อง cow.cc ตัวสร้างใหม่จะมีลักษณะดังนี้
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();
เราสามารถทำได้หรือไม่
เลือกได้หลายคำตอบ
ก) | บรรทัดใน main() ที่เราเริ่มต้น cow2 จะขัดข้อง |
B) | เรามีตัวสร้างได้เพียงรายการเดียว |
C) | กรณีนี้พบได้บ่อยใน C++ |
ง) | ใช่ แต่นี่ไม่ใช่การใช้งาน C++ ทั่วไป |
จ) | การดำเนินการนี้จะทำงานได้ปกติ แต่จะไม่แสดงผลใดๆ เนื่องจากคีย์ส่วนตัวไม่ได้เริ่มต้น |
ฉ) | เราไม่สามารถเรียก setName(), setColor() และ setน้ำหนัก() จากในเมธอดของคลาสเดียวกัน |
คำถามโบนัส
คำถามที่ 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; ประกาศตัวชี้ 2 จุดไปยังวัตถุของ Apple |
C) | ตัวแปร granny_smith มีค่าตัวแปรอินสแตนซ์ที่เชื่อมโยงกับออบเจ็กต์ Apple |
ง) | Apple* granny_smith = NULL |
จ) | ตัวแปร granny_smith มีที่อยู่สำหรับออบเจ็กต์ Apple |
ฉ) | string gs_color = *(granny_smith.get_color(อย่างใดอย่างหนึ่ง) คำสั่งนี้จะแสดงสีของออบเจ็กต์ granny_smith โดยสมมติว่าคุณได้เริ่มต้นแล้ว |
ช) | พื้นที่เก็บข้อมูลสำหรับออบเจ็กต์ Apple ใหม่จะได้รับการจัดสรรในฮีป |
ซ) | พื้นที่เก็บข้อมูลสำหรับออบเจ็กต์ Apple ใหม่ได้รับการจัดสรรในสแต็กรันไทม์ |
1) | 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; }
คำตอบในแบบทดสอบ
คุณควรพยายามตอบคำถามด้านบนทั้งหมดโดยไม่ดูคำตอบ คุณควรขอความช่วยเหลือจากผู้อื่น แทนที่จะไปยังแผ่นคำตอบเพื่อขอความช่วยเหลือโดยตรง
คุณสามารถดูคำตอบของปัญหาข้างต้นได้ที่นี่