Soal Set 1
Pelajari program berikut dan kemudian jawab pertanyaan di bawah ini. Kami ingin Anda menjawab pertanyaan dengan melihat kode sumbernya saja, yaitu, jangan menyalin kode ke dalam file, mengompilasinya, dan menjawab pertanyaan berdasarkan menjalankannya. Semua itu akan membuat Anda senang.
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);
}
Pertanyaan 1: Apa output dari program ini?
| J) |
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 |
| P) |
1 1 2 4 1 1 1 1 2 4 |
| T) | Itu tidak menghasilkan apa pun - ada kesalahan dalam sintaks. |
Pertanyaan 2: Apa yang akan terjadi jika kita menghapus inisialisasi "penghitung" sebelum loop do-when?
| J) | Loop tanpa henti - loop do-when akan menghasilkan serangkaian 1 |
| B) | Output program tidak akan berubah |
| C) | Loop do-when menghasilkan 2 dan 4. |
| P) | Loop do-when tidak akan menghasilkan apa pun |
| T) | Loop do-when menghasilkan 3 dan 9. |
Pertanyaan 3: Dengan program asli di bagian atas halaman ini, anggaplah kita memiliki menghapus baris yang melakukan inisialisasi variabel penghitung sebelum loop sementara. Apa akan terjadi jika kita juga menghapus baris penghitung++ di dalam sementara-loop, seperti pada berikut ini?
| J) | Loop sementara tidak menghasilkan apa pun. |
| B) | Loop sementara menghasilkan output 1 dan 1; {i>loop do-when<i} tidak menghasilkan apa-apa. |
| C) | Output dari loop sementara sama dengan ketika kedua baris disertakan. |
| P) | Sistem akan menampilkan angka acak sampai kita memutar komputer nonaktif. |
| T) | Loop sementara adalah loop Infinite |
Pertanyaan 4: Berdasarkan program asli di bagian atas halaman ini, apa yang akan terjadi jika {i>loop <i}saat{i> <i}terlihat seperti ini?
counter = first;
while (counter <= last) {
cout << "\n" << counter;
if (first % 2 == 0)
next = counter * counter;
cout << " " << next;
counter++;
}| J) | Output loop sementara sama seperti pada program asli. |
| B) | Loop sementara tidak akan menghasilkan apa pun |
| C) | Output dari loop sementara adalah 1 1 dan 1 4. |
| P) | Output dari loop sementara adalah 1 2 dan 2 4. |
| T) | Output dari loop sementara adalah 1 4 dan 2 4. |
| P) | Output dari loop sementara adalah 2 4 dan 2 4. |
Pertanyaan 5: Apa yang akan terjadi jika variabel pertama lebih besar dari yang terakhir?
| J) | Sementara-loop akan menampilkan sesuatu, tetapi tidak ada lagi. |
| B) | {i>Do when-loop <i}akan menghasilkan sesuatu, tetapi tidak ada yang lain. |
| C) | Tidak akan ada output sama sekali. |
| P) | Program akan memisahkan fault atau error |
| T) | {i>for-loop <i}akan menghasilkan sesuatu, tetapi tidak ada yang lain. |
Pertanyaan 6: Apa yang akan dihasilkan oleh program jika kita menginisialisasi variabel pertama sama dengan variabel terakhir?
| J) | {i>Do when-loop <i}akan menghasilkan sesuatu, tetapi tidak ada yang lain. |
| B) | Sementara-loop akan menampilkan sesuatu, tetapi tidak ada lagi. |
| C) | Setiap loop akan menghasilkan satu baris. |
| P) | {i>Do when-loop<i} akan menghasilkan 2 baris, dan yang lainnya melakukan loop satu baris. |
| T) | Tidak akan menghasilkan apa pun |
| P) | {i>for-loop <i}akan menghasilkan sesuatu, tetapi tidak ada yang lain. |
Soal Set 2
Seperti pada masalah sebelumnya, berikut ini program untuk Anda pertimbangkan. Harap jawab pertanyaan berikutnya dengan hanya melihat kode sumbernya.
#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;
}Pertanyaan 1: Apa {i>output<i} dari variabel Boys pada garis yang ditandai?
| J) |
#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 |
| P) | Kode ini tidak menghasilkan apa-apa karena tidak dikompilasi atau dijalankan. |
Pertanyaan 2: Pilih semua yang berlaku terkait dengan baris program berikut:
void F1(int males, int females); void F2(int &m, int &f);
| J) | Aturan C++ menyatakan bahwa kita dapat menghapus dua baris ini selama metode tersebut didefinisikan sebelum digunakan. |
| B) | Aturan C++ menyatakan bahwa nama argumen harus sama antara deklarasi dan definisinya. |
| C) | Program ini akan error jika kita menghapus dua baris ini. |
| P) | Deklarasi lebih umum dinyatakan dalam jaringan ruang lingkup proyek. |
| T) | Ini disebut deklarasi maju. |
Pertanyaan 3: Jika kita memindahkan baris berikut dari main() dan menempatkannya ruang lingkup, apa yang akan terjadi?
int Boys = 3, Girls = 5;
| J) | Output-nya akan sama. |
| B) | Anak laki-laki akan = 3 dan Anak Perempuan akan = 5 pada semua jumlah output |
| C) | Anak laki-laki akan = 3 dan Anak Perempuan akan = 5 hanya dalam output dari main() |
Pertanyaan 4: Bagaimana jika kita mengubah awal program menjadi seperti ini:
// We have moved moved these to global scope
const int Boys = 3;
const int Girls = 5;
void main() {
//int Boys = 3, Girls = 5;| J) | Program akan dikompilasi tetapi akan {i>crash<i} ketika kita mencoba dan menjalankannya. |
| B) | Tidak akan ada perubahan pada output |
| C) | Hasilnya adalah Anak Laki-laki = 3 Anak Perempuan = 5 di seluruh program |
| P) | Output-nya adalah Boys = 3 Girls = 5 hanya dalam output dari main() |
| T) | Program mungkin tidak akan dikompilasi (bergantung pada compiler). |
Pertanyaan 5: Data diteruskan oleh nilai di F2.
| J) | Benar. |
| B) | Salah. |
Soal Set 3
Seperti pada masalah sebelumnya, berikut ini program untuk Anda pertimbangkan. Memohon menjawab pertanyaan yang mengikutinya dengan hanya melihat kode sumbernya.Yang ini lebih menarik dari dua penjelasan sebelumnya - telusuri kode dengan cermat.
#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;
}
}Pertanyaan 1: Apa yang dihasilkan oleh program ini dengan input 3 untuk baris dan 4 untuk kolom?
| J) |
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 |
| P) |
1 3 2 4 8 6 7 5 9 11 10 12 |
| T) |
1 2 3 4 10 11 12 5 9 8 7 6 |
| J) |
9 8 7 6 10 11 12 5 1 2 3 4 |
| T) | Perintah ini tidak menghasilkan output apa pun - logikanya salah. |
| I) | Hasilnya tidak menghasilkan apa pun - ada error sintaksis. |
| J) | Perintah ini tidak menghasilkan output apa pun - hal ini tidak seharusnya menghasilkan apa pun. |
| rb) | Fungsi ini menghasilkan 12 angka pertama yang muncul saat Anda menunggu program dijalankan. |
Pertanyaan 2: Bagaimana jika kita menambahkan baris berikut ke fungsi main()?
MAX_SIZE = 10;
| J) | Ini tidak diperbolehkan di C++. |
| B) | Hal ini diizinkan; program akan berjalan dengan MAX_SIZE yang ditetapkan ke 20 |
| C) | Hal ini diizinkan; program akan berjalan dengan MAX_SIZE yang ditetapkan ke 10. |
Pertanyaan 3: Pertimbangkan empat baris berikut dari program di atas:
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) Apakah mungkin untuk menggunakan konstanta dalam typedef?
2) Apakah mungkin untuk menggunakan typedef dalam deklarasi sebelum variabel dideklarasikan dari jenis tersebut?
| J) | 1) Ya 2) Ya |
| B) | 1) Tidak 2) Tidak |
| C) | 1) Tidak 2) Ya |
| P) | 1) Ya 2) Tidak |
Pertanyaan 4: Dapatkah kita menggunakan hal berikut:
#define MAX_SIZE 20
const int MAX_SIZE = 20;
| J) | Ya, ini akan berfungsi dan tidak masalah menggunakan #define untuk konstanta di C++ |
| B) | Ya, ini akan berfungsi, tetapi biasanya kita tidak menggunakan #define untuk konstanta di C++ |
| C) | #define tidak tersedia di C++ |
| P) | Anda tidak dapat melakukan salah satu dari hal ini di C |
Pertanyaan 5: typedef digunakan untuk membuat alias untuk nama jenis.
| J) | Benar. |
| B) | Salah. |
Pertanyaan 6: Apa yang akan terjadi jika kita tidak menginisialisasi array ke 0 di Fungsi Fill()?
| J) | Ini akan berjalan tetapi outputnya adalah semua 12 |
| B) | Ini akan berjalan dengan baik dan menghasilkan {i>output<i} yang sama seolah-olah diinisialisasi ke 0 |
| C) | Program tidak akan berjalan atau akan error |
| P) | Fungsi akan berjalan tetapi output-nya akan berupa semua 0 |
| T) | Fungsi ini akan berjalan, tetapi mungkin tidak menghasilkan output apa pun |
Pertanyaan 7: Centang semua yang sesuai. Mengapa kita menggunakan konstanta untuk MAX_SIZE dalam program ini? Bukankah lebih mudah hanya dengan mengetik "20" bukan MAX_SIZE di mana pun berada diperlukan?
| J) | MAX_SIZE adalah nilai C++ bawaan yang dapat digunakan siapa saja. Baru saja disetel dan menggunakannya. |
| B) | Sama seperti variabel global, konstanta global harus dihindari |
| C) | Menggunakan konstanta membuat program lebih mudah dipahami |
| P) | Bilangan ajaib dalam suatu program biasanya dianggap sebagai praktik yang baik. |
| T) | Jika ingin mengubah MAX_SIZE, kita hanya perlu mengubahnya dalam satu tempat |
Pertanyaan 8: Pernyataan switch dalam fungsi Fill() harus memiliki yang sesuai, karena dianggap sebagai gaya yang baik untuk memasukkannya.
| J) | Benar. |
| B) | Salah. |
Pertanyaan 9: Perhatikan dalam fungsi Fill(), kita mendeklarasikan variabel di antara pernyataan. Misalnya, cNum dan cRow dideklarasikan dan diinisialisasi setelah for-loop berjalan. Apakah ini akan berfungsi di C++, atau apakah semua variabel harus dideklarasikan di bagian atas fungsi tersebut?
| J) | Boleh saja melakukan ini. |
| B) | Semua variabel harus dideklarasikan di bagian atas fungsi. |
| C) | Kedua cara ini salah - C++ tidak mengizinkan variabel di mana pun dalam program ini. |
| P) | Semua variabel harus dideklarasikan dalam lingkup global. |
Soal Set 4
Berikut adalah kumpulan file yang menentukan dan menguji class sederhana. Seperti biasa, jawab pertanyaan berikutnya dengan hanya merujuk ke kode sumber.
Berikut adalah file {i>header<i} (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_;
};
#endifBerikut adalah file .cc terkait (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;
}Dan berikut ini adalah program klien untuk kelas ini (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();
}Pertanyaan 1: Apa yang dihasilkan oleh program ini?
| J) | betsy berkata MOO. betsy memiliki berat 400, bernilai 0 dan mengatakan MOO. |
| B) | betsy berkata MOO. betsy memiliki berat 400, berkulit hitam dan bertuliskan MOO. |
| C) | betsy berkata MOO. memiliki berat betsy 400, adalah |
Pertanyaan 2: Kita tidak boleh menempatkan kode untuk metode pengakses dan mutator dalam file {i>header<i}. (Perhatikan bahwa pengakses adalah metode yang menampilkan nilai, dan mutator adalah metode yang mengubah nilai.)
| J) | Benar. |
| B) | Salah. |
Pertanyaan 3: Apakah kita memerlukan "Sapi::" sebelum setiap definisi fungsi di {i>cow.cc<i}?
| J) | Tidak - karena cow.h disertakan |
| B) | Ya |
Pertanyaan 4: Peran apa yang dilakukan:
#ifndef COW_H #define COW_H ... #endif
putar di file {i>header<i}?
Pilih semua yang sesuai:
| J) | Mereka tidak memiliki tujuan apa pun karena nama {i>file<i} adalah {i>cow.h<i} bukan COW_H. |
| B) | Jika kita tidak melakukan ini, kita akan mendapatkan {i>error<i} runtime |
| C) | Jika kami tidak melakukannya, kami mungkin menyertakan file lebih dari sekali |
| P) | Mereka tidak melakukan apa-apa karena satu atau beberapa kata kunci salah eja. |
| T) | Mereka tidak melakukan apa-apa karena kelas {i>Cow<i} hanya memiliki satu file {i>header<i}. |
Pertanyaan 5: Apa yang akan terjadi jika kita menambahkan baris berikut ke cowmain.cc?
cow1.weight_ = 24;
| J) | Program akan berjalan, dan variabel bobot akan dimodifikasi melalui garis ini. |
| B) | Program akan dikompilasi dan berjalan, tetapi mengalami error pada baris tersebut. |
| C) | C++ tidak mengizinkan ini. |
| P) | Program akan mengompilasi dan berjalan, tetapi variabel bobot tidak yang diubah oleh baris ini. |
Pertanyaan 6: Ketika baris berikut dieksekusi, konstruktor di kelas Cow dipanggil:
Cow cow1;
Apa saja karakteristik penting dari konstruktor?
Pilih semua yang sesuai
| J) | Biasanya fungsi ini tidak menampilkan nilai apa pun |
| B) | Jika kita tidak menyediakan konstruktor di class, class akan tidak mengompilasi |
| C) | Konstruktor di kelas Cow tidak biasa karena tidak melakukan inisialisasi variabel privat. |
| P) | Class tersebut selalu memiliki nama yang sama dengan class |
| T) | Kita dapat memiliki beberapa konstruktor dalam satu class selama argumen berbeda |
| P) | Konstruktor dipanggil saat class instanciated. |
Pertanyaan 7: Apa saja karakteristik penting dari destruktor?
| J) | Destruktor dipanggil ketika objek berada di luar cakupan |
| B) | Destruktor memiliki nama yang sama dengan class tersebut, tetapi didahului oleh "~" |
| C) | Ada yang salah pada destruktor di {i>cow.cc<i} di dalamnya tidak melakukan apa pun. |
| P) | Jika kita tidak membuat destruktor untuk class, class tersebut tidak akan kompilasi |
Pertanyaan 8: Mengingat cara program klien menggunakan class, pertimbangkan berikut ini:
Pembagian anggota menjadi publik dan pribadi di kelas Cow tidaklah tepat. Artinya, sesuatu yang bersifat pribadi harus bersifat publik atau sesuatu yang bersifat publik harus bersifat pribadi.
| J) | Benar. |
| B) | Salah. |
Pertanyaan 9: Bagaimana jika kita menambahkan konstruktor lain selain yang kita harus {i>cow.cc<i}. Konstruktor baru terlihat seperti ini
Cow::Cow(string inName, double inWeight, Color inColor) {
set_name(inName);
set_weight(inWeight);
set_color(inColor);
}Dan kita tambahkan baris berikut ke main():
Cow cow2("milly", 350.2, brown);
cow2.Moo();
cow2.Properties();Dapatkah kita melakukannya?
Pilih semua yang sesuai
| J) | Baris di main() tempat kita melakukan inisialisasi cow2 akan error. |
| B) | Kita hanya bisa memiliki satu konstruktor. |
| C) | Hal ini umum terjadi di C++ |
| P) | Ya, tetapi ini bukan penggunaan C++ biasa |
| T) | Ini akan berjalan dengan baik, tetapi tidak akan menghasilkan apa-apa karena private tidak diinisialisasi. |
| P) | Kita tidak dapat memanggil setName(), setColor(), dan setWeight() dari dalam metode class yang sama. |
Pertanyaan Bonus
Pertanyaan 1) Apa output dari pernyataan berikut?
#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;
}
Pertanyaan 2) Pertimbangkan pernyataan berikut, dengan asumsi class Apple ada dan telah diinisialisasi. Class Apple memiliki variabel instance color_:
Apple* granny_smith = new Apple;
Pilih semua pernyataan berikut yang benar:
| J) | Apple* granny_smith = NULL; if (granny_smith == NULL)... Tidak apa-apa - NULL bukan nilai yang dapat diperiksa dengan cara ini. |
| B) | Apple* granny_smith, fuji; Perintah ini mendeklarasikan dua pointer ke objek Apple |
| C) | Variabel granny_smith berisi nilai variabel instance yang terkait dengan objek Apple |
| P) | Apple* granny_smith = NULL; Tidak apa-apa. |
| T) | Variabel granny_smith berisi alamat untuk objek Apple |
| P) | string gs_color = *(granny_smith.get_color()); Pernyataan ini menampilkan warna objek granny_smith, dengan asumsi objek tersebut telah diinisialisasi. |
| J) | Penyimpanan untuk objek Apple baru dialokasikan di heap |
| T) | Penyimpanan untuk objek Apple baru dialokasikan pada stack runtime |
| I) | int* a = &b; Ini menempatkan alamat b ke a. |
Pertanyaan 3) Apa output dari program berikut?
#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;
}
Jawaban Kuis
Anda harus mencoba menyelesaikan semua pertanyaan di atas tanpa melihat jawabannya. Lebih baik meminta bantuan kepada seseorang daripada langsung membuka lembar jawaban untuk meminta bantuan.
Anda dapat melihat jawaban atas masalah di atas di sini.