Kuis

Set Soal 1

Pelajari program berikut ini, lalu jawab pertanyaan di bawah ini. Kami ingin Anda menjawab pertanyaan dengan hanya melihat kode sumbernya, yaitu, jangan menyalinnya ke dalam file, mengompilasinya, dan menjawab pertanyaan berdasarkan menjalankannya. Itu akan menghilangkan semua kesenangan darinya!

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
D) 1 1
2 4
1 1
1 1
2 4
D) Tidak menghasilkan apa pun - terdapat error dalam sintaksis.

Pertanyaan 2: Apa yang akan terjadi jika kita menghapus inisialisasi "penghitung" sebelum loop do-when?

J) Loop tak terbatas - loop lakukan saat akan menghasilkan rangkaian 1
B) Output program tidak akan berubah
C) Loop do-when menghasilkan 2 dan 4.
D) Loop lakukan sementara tidak akan menghasilkan apa pun
D) Loop do-when menghasilkan 3 dan 9.

Pertanyaan 3: Dengan program asli di bagian atas halaman ini, anggap kita telah menghapus baris yang menginisialisasi variabel penghitung sebelum loop while. Apa yang akan terjadi jika kita juga menghapus baris counter++ di dalam while-loop, seperti dalam contoh berikut?

J) Loop sementara tidak menghasilkan output apa pun.
B) Loop sementara menghasilkan 1 dan 1; {i>do-when<i} tidak menghasilkan apa-apa.
C) Output loop sementara akan sama dengan saat kedua baris disertakan.
D) Sistem akan menghasilkan output angka acak hingga kita mematikan komputer.
D) Loop sementara adalah loop Tak terbatas

Pertanyaan 4: Dengan program asli di bagian atas halaman ini, apa yang akan terjadi jika loop sementara 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 akan sama dengan dalam program asli.
B) Loop sementara tidak akan menghasilkan output apa pun
C) Output dari loop sementara adalah 1 1 dan 1 4.
D) Output dari loop sementara adalah 1 2 dan 2 4.
D) Output dari loop sementara adalah 1 4 dan 2 4.
F) Output dari loop sementara adalah 2 4 dan 2 4.

Pertanyaan 5: Apa yang akan terjadi jika variabel pertama lebih besar dari variabel terakhir?

J) Loop sementara akan menghasilkan output berupa sesuatu, tetapi tidak akan menghasilkan output apa pun.
B) {i>Do while-loop<i} akan menghasilkan sesuatu, tetapi tidak akan menghasilkan apa pun.
C) Tidak akan ada output sama sekali.
D) Program akan mendeteksi kesalahan atau error
D) {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 agar sama dengan variabel terakhir?

J) {i>Do while-loop<i} akan menghasilkan sesuatu, tetapi tidak akan menghasilkan apa pun.
B) Loop sementara akan menghasilkan output berupa sesuatu, tetapi tidak akan menghasilkan output apa pun.
C) Setiap loop akan menghasilkan satu baris.
D) Loop do while akan menghasilkan 2 baris, dan loop lainnya membuat loop satu baris.
D) Tidak akan menghasilkan apa pun
F) {i>For-loop<i} akan menghasilkan sesuatu, tetapi tidak ada yang lain.


Set Soal 2

Seperti pada kumpulan masalah sebelumnya, berikut adalah program yang perlu Anda pertimbangkan. Jawablah pertanyaan berikut ini dengan hanya melihat pada 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
D) Tidak menghasilkan apa-apa karena tidak dikompilasi atau dijalankan.

Pertanyaan 2: Pilih semua yang sesuai dengan baris program berikut:

void F1(int males, int females);
void F2(int &m, int &f);
J) Aturan C++ menyatakan bahwa kita dapat menghapus kedua baris ini selama metode tersebut ditentukan sebelum digunakan.
B) Aturan C++ menyatakan bahwa nama argumen harus sama antara deklarasi dan definisi.
C) Program ini akan error jika kita menghapus dua baris ini.
D) Deklarasi umumnya dinyatakan dalam cakupan global.
D) Ini disebut deklarasi penerusan.

Pertanyaan 3: Jika kita memindahkan baris berikut dari main() dan menempatkannya dalam cakupan global, 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 di semua {i>output<i}
C) Anak laki-laki akan = 3 dan Anak Perempuan akan = 5 hanya dalam {i>output<i} 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 error saat kita mencoba dan menjalankannya.
B) Tidak akan ada perubahan pada output
C) Outputnya adalah Boys = 3 Girls = 5 di seluruh program
D) Outputnya adalah Anak Laki-Laki = 3 Anak Perempuan = 5 hanya di {i>output<i} dari main()
D) Program mungkin tidak akan dikompilasi (tergantung pada compilernya).

Pertanyaan 5: Data diteruskan oleh nilai di F2.

J) Benar.
B) Salah.


Set Soal 3

Seperti pada kumpulan masalah sebelumnya, berikut adalah program yang perlu Anda pertimbangkan. Harap jawab pertanyaan berikut ini dengan hanya melihat kode sumbernya.Yang ini lebih menarik daripada dua kode sebelumnya - lacak kodenya 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 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
D) 1 3 2 4
8 6 7 5
9 11 10 12
D) 1 2 3 4
10 11 12 5
9 8 7 6
D) 9 8 7 6
10 11 12 5
1 2 3 4
H) Tidak menghasilkan apa pun - logikanya salah.
I) Tidak ada output apa pun - terdapat error sintaksis.
J) Perintah ini tidak menghasilkan apa pun - seharusnya tidak.
R) {i>Output<i} 12 angka pertama yang muncul di pikiran saat Anda menunggu program untuk dijalankan.

Pertanyaan 2: Bagaimana jika kita menambahkan baris berikut ke fungsi main()?

MAX_SIZE = 10;
J) Ini tidak diperbolehkan pada C++.
B) Ini diizinkan; program akan berjalan dengan MAX_SIZE disetel ke 20
C) Ini diizinkan; program akan berjalan dengan MAX_SIZE disetel 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 menggunakan const 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
D) 1) Ya 2) Tidak

Pertanyaan 4: Dapatkah kita menggunakan yang berikut:

#define MAX_SIZE 20
, bukan:
const int MAX_SIZE = 20;
J) Ya itu akan berhasil dan boleh menggunakan #define untuk konstanta di C++
B) Ya, itu akan berhasil, tetapi biasanya kita tidak menggunakan #define untuk konstanta pada C++
C) #define tidak tersedia di C++
D) Anda tidak dapat melakukan salah satu 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 dalam fungsi Fill()?

J) {i>Function<i} itu akan berjalan tetapi {i>outputnya<i} akan 12 detik
B) Perintah ini akan berjalan dengan baik dan menghasilkan output yang sama seolah-olah array diinisialisasi ke 0
C) Program tidak akan berjalan atau akan error
D) Ini akan berjalan tetapi output-nya akan semuanya 0
D) Ini akan berjalan, tetapi mungkin tidak menghasilkan output apa pun

Pertanyaan 7: Centang semua yang sesuai. Mengapa kita menggunakan const untuk MAX_SIZE dalam program ini? Bukankah lebih mudah untuk hanya mengetik "20" daripada MAX_SIZE di mana pun diperlukan?

J) MAX_SIZE adalah nilai C++ bawaan yang dapat digunakan siapa pun. Cukup setel dan gunakan.
B) Const global harus dihindari seperti halnya variabel global
C) Menggunakan {i>Const<i} membuat program kita lebih mudah dipahami
D) Angka ajaib dalam suatu program biasanya dianggap sebagai praktik yang baik.
D) Jika kita ingin mengubah MAX_SIZE, kita hanya perlu mengubahnya di satu tempat

Pertanyaan 8: Pernyataan switch di fungsi Fill() harus memiliki kasus default, karena dianggap gaya yang baik untuk menyertakannya.

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 pada C++, atau apakah semua variabel harus dideklarasikan di bagian atas fungsi?

J) Tidak apa-apa bila Anda melakukan ini.
B) Semua variabel harus dideklarasikan di bagian atas fungsi.
C) Kedua cara tersebut salah - C++ tidak mengizinkan variabel di mana pun dalam program.
D) Semua variabel harus dideklarasikan dalam cakupan global.

Set Soal 4

Berikut adalah kumpulan file yang mendefinisikan dan menguji class sederhana. Seperti biasa, jawab pertanyaan berikut ini dengan merujuk pada kode sumbernya saja.

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_;
};

#endif

Berikut 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;
}

Berikut 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 bertuliskan MOO.
B) betsy berkata MOO.
betsy memiliki berat 400, dia berwarna hitam dan bertuliskan MOO.
C) betsy berkata MOO.
betsy memiliki berat 400,

Pertanyaan 2: Kita tidak boleh menempatkan kode untuk metode pengakses dan mutator dalam file header. (Perhatikan bahwa pengakses adalah metode yang menampilkan nilai, dan mutator adalah metode yang mengubah nilai.)

J) Benar.
B) Salah.

Pertanyaan 3: Apakah kita memerlukan "Cow::" sebelum setiap definisi fungsi di cow.cc?

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) File tersebut tidak memiliki kegunaan karena nama filenya adalah cow.h, bukan COW_H.
B) Jika tidak melakukannya, kita akan mendapatkan error runtime
C) Jika tidak melakukannya, kami mungkin menyertakan file lebih dari sekali
D) Kata kunci ini tidak melakukan apa-apa karena satu atau beberapa kata kunci salah eja.
D) Tidak melakukan apa-apa karena kelas Cow 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 oleh baris ini.
B) Program akan mengompilasi dan berjalan, tetapi mengalami error di baris tersebut.
C) C++ tidak mengizinkan ini.
D) Program akan dikompilasi dan berjalan, tetapi variabel bobot tidak diubah oleh baris ini.

Pertanyaan 6: Ketika baris berikut dieksekusi, konstruktor di class Cow akan dipanggil:

Cow cow1;

Apa sajakah karakteristik penting dari konstruktor?

Pilih semua yang sesuai

J) Mereka biasanya tidak mengembalikan nilai apa pun
B) Jika kita tidak menyediakan konstruktor di dalam class, class tidak akan dikompilasi
C) Konstruktor dalam class Cow tidak biasa karena tidak menginisialisasi variabel pribadi.
D) Nama class selalu sama dengan class
D) Kita dapat memiliki beberapa konstruktor dalam satu class selama argumennya berbeda
F) Konstruktor dipanggil saat class dibuat instance.

Pertanyaan 7: Apa sajakah karakteristik penting dari destruktor?

J) Destruktor dipanggil ketika objek berada di luar cakupan
B) Destruktor memiliki nama yang sama dengan class tetapi didahului oleh "~"
C) Ada yang salah pada destruktor di cow.cc karena destruktor tidak melakukan apa pun.
D) Jika kita tidak membuat destruktor untuk class, class tidak akan dikompilasi

Pertanyaan 8: Mengingat cara program klien menggunakan class, pertimbangkan hal berikut:

Pembagian anggota menjadi publik dan pribadi dalam kelas Sapi tidak tepat. Artinya, sesuatu yang pribadi harus publik atau sesuatu yang publik harus pribadi.

J) Benar.
B) Salah.

Pertanyaan 9: Bagaimana jika kita menambahkan konstruktor lain selain yang harus menggunakan cow.cc. Konstruktor baru terlihat seperti ini

Cow::Cow(string inName, double inWeight, Color inColor) {
  set_name(inName);
  set_weight(inWeight);
  set_color(inColor);
}

Dan kita menambahkan baris berikut ke main():

Cow cow2("milly", 350.2, brown);
cow2.Moo();
cow2.Properties();

Bisakah kita melakukannya?

Pilih semua yang sesuai

J) Baris di main() tempat kita melakukan inisialisasi cow2 akan error.
B) Kita hanya dapat memiliki satu konstruktor.
C) Ini biasa digunakan di C++
D) Ya, tetapi ini bukan penggunaan C++ biasa
D) Proses ini akan berjalan lancar, tetapi tidak akan menghasilkan output apa pun karena private tidak diinisialisasi.
F) Kita tidak dapat memanggil setName(), setColor(), dan setWeight() dari dalam metode class yang sama.


Pertanyaan Bonus

Pertanyaan 1) Apa {i>output<i} dari berikut ini?

#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 di bawah ini yang benar:

J) Apple* granny_smith = NULL; if (granny_smith == NULL)... Ini TIDAK oke - NULL bukan nilai yang dapat diperiksa dengan cara ini.
B) Apple* granny_smith, fuji; Fungsi ini mendeklarasikan dua pointer ke objek Apple
C) Variabel granny_smith berisi nilai variabel instance yang terkait dengan objek Apple
D) Apple* granny_smith = NULL; Tidak apa-apa,
D) Variabel granny_smith berisi alamat untuk objek Apple
F) string gs_color = *(granny_smith.get_color()); Pernyataan ini mengembalikan warna objek granny_smith, dengan asumsi objek tersebut telah diinisialisasi.
D) Penyimpanan untuk objek Apple baru dialokasikan di heap
H) Penyimpanan untuk objek Apple baru dialokasikan pada stack runtime
I) int* a = &b; Ini menempatkan alamat b ke a.


Pertanyaan 3) Apa {i>output<i} 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 seseorang daripada langsung menuju ke lembar jawaban untuk meminta bantuan.

Anda dapat melihat jawaban atas masalah di atas di sini.