Test

Soru Kümesi 1

Aşağıdaki programı inceleyin ve ardından aşağıdaki soruları yanıtlayın. Soruları yalnızca kaynak koduna bakarak cevaplamanızı rica ediyoruz. Yani, lütfen kodu bir dosyaya kopyalamayın, derlemeyin ve çalıştırılmasına göre cevaplamayın. Böylece tüm eğlencesi bulmuş olur.

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

Soru 1: Bu programın sonucunda ne oldu?

A) 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) Sonuç hiçbir şey vermiyor; söz diziminde hatalar var.

2. Soru: "Sayaç"ın başlatılmasını "süre" döngüsünden önce kaldırırsak ne olur?

A) Sonsuz döngü - do-duration döngüsü, bir dizi 1
B) Programın çıkışı değişmez
C) Do-de döngüsü, 2 ve 4. çıktıları verir.
D) Do-Süre döngüsü hiçbir sonuç vermez
E) Yapma-süre döngüsü 3 ve 9 çıktılarını verir.

Soru 3: Bu sayfanın üst kısmındaki orijinal programa göre, süre döngüsünden önce sayaç değişkenini başlatan satırı kaldırdığımızı varsayalım. Aşağıda gösterildiği gibi, süre döngüsü içindeki sayaç++ satırını da kaldırırsak ne olur?

A) Süre döngüsü hiçbir şey döndürmez.
B) Süre döngüsü 1 ve 1 çıktıları verir, do-süre döngüsü ise hiçbir şey döndürmez.
C) Süre döngüsünün çıktısı, her iki satırın da dahil edilmesiyle aynıdır.
D) Bilgisayar kapatılıncaya kadar sistem rastgele sayılar üretir.
E) Süre döngüsü bir sonsuz döngüdür

Soru 4: Bu sayfanın üst kısmındaki orijinal program göz önüne alındığında, süre döngüsü böyle bir şey olsaydı ne olurdu?

counter = first;
while (counter <= last) {
  cout << "\n" << counter;
  if (first % 2 == 0)
    next = counter * counter;
  cout << "  " << next;
  counter++;
}
A) Süre döngüsünün çıkışı orijinal programdakiyle aynıdır.
B) ılırken döngüsü hiçbir sonuç döndürmez
C) Süre döngüsünün çıkışı 1 1 ve 1 4 şeklindedir.
D) Süre döngüsünün çıkışı 1 2 ve 2 4 şeklindedir.
E) Süre döngüsünün çıkışı 1 4 ve 2 4 şeklindedir.
F) Süre döngüsünün çıkışı 2 4 ve 2 4 şeklindedir.

5. Soru: İlk değişken son değerden büyükse ne olur?

A) Süre döngüsü bir sonucu üretir, ancak başka hiçbir şey çıkarmaz.
B) Yapma sırasında döngü bir değer üretir, ancak başka hiçbir şey çıkarmaz.
C) Hiç çıkış yapılmaz.
D) Program, hata veya çökme seg'ler
E) For döngüsü bir sonucu üretir, ancak başka hiçbir şey çıkmaz.

Soru 6: İlk değişkeni son değişkenle aynı olacak şekilde başlatırsak programın sonucu ne olur?

A) Yapma sırasında döngü bir değer üretir, ancak başka hiçbir şey çıkarmaz.
B) Süre döngüsü bir sonucu üretir, ancak başka hiçbir şey çıkarmaz.
C) Her döngü bir satır üretir.
D) Do not döngüsü 2 satır üretirken diğeri bir satır döngüye girer.
E) Hiçbir şey çıkmaz
F) For döngüsü bir sonucu üretir, ancak başka hiçbir şey çıkmaz.


Soru Kümesi 2

Önceki soru setinde de olduğu gibi bu programı değerlendirebilirsiniz. Lütfen yalnızca kaynak kodu inceleyerek aşağıdaki soruları yanıtlayın.

#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. Soru: İşaretli çizgilerdeki Boys değişkeninin sonucu nedir?

A) 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) Derlenmediği veya çalışmadığı için hiçbir şey döndürmez.

Soru 2: Programın aşağıdaki satırlarıyla ilgili tüm yanıtları seçin:

void F1(int males, int females);
void F2(int &m, int &f);
A) C++ kuralları, yöntemlerin kullanılmadan önce tanımlanması koşuluyla bu iki satırı kaldırabileceğimizi belirtir.
B) C++ kuralları, bağımsız değişken adlarının bildirim ve tanım arasında aynı olması gerektiğini belirtir.
C) Bu iki satırı kaldırırsak bu program kilitlenir.
D) Beyanların global kapsamda belirtilmesi daha yaygındır.
E) Bunlara ileriye dönük beyanlar denir.

3. Soru: Aşağıdaki satırı main() işlevinden taşıyıp global kapsama yerleştirirsek ne olur?

int Boys = 3, Girls = 5;
A) Sonuç aynı olur.
B) Tüm çıktılarda erkek çocuklar 3, Kız çocuklar = 5 olur
C) Yalnızca main() işlevindeki çıktıda erkek çocuklar 3, Kız çocuklar ise 5 değerine eşittir.

Soru 4: Programın başlangıcını aşağıdaki gibi değiştirsek ne olur?

// We have moved moved these to global scope
const int Boys = 3;
const int Girls = 5;

void main() {
  //int Boys = 3, Girls = 5;
A) Program derlenecek, ancak çalıştırmaya çalıştığımızda kilitlenecek.
B) Çıkışta herhangi bir değişiklik olmaz
C) Sonuç, program genelinde Erkek = 3 Kız = 5 olur.
D) Çıktı, main() yönteminden gelen çıkışta yalnızca Boys = 3 Girls = 5 olur.
E) Program büyük olasılıkla derlemeyecektir (derleyiciye bağlı olarak).

5. Soru: Veriler F2'de değer tarafından aktarılır.

A) Doğru.
B) Yanlış.


Soru Kümesi 3

Önceki soru setinde de olduğu gibi bu programı değerlendirebilirsiniz. Lütfen yalnızca kaynak kodu inceleyerek aşağıdaki soruları yanıtlayın.Bu seçenek, önceki iki koddan daha ilginçtir - kodu dikkatli bir şekilde izleyin.

#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. Soru: Bu program, satırlar için 3 ve sütunlar için 4 girişle ne sonucunu verir?

A) 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
G) 9 8 7 6
10 11 12 5
1 2 3 4
E) Sonuç hiçbir şey vermiyor, mantık hatalı.
I) Herhangi bir sonuç vermiyor, söz dizimi hataları var.
J) Olması gerektiği gibi, hiçbir şey üretmez.
k) Programın çalışmasını beklerken aklınıza gelen ilk 12 sayıyı üretir.

Soru 2: Aşağıdaki satırı main() işlevimize eklesek ne olur?

MAX_SIZE = 10;
A) C++'ta buna izin verilmez.
B) Buna izin verilir; program, MAX_SIZE 20 değerine ayarlanmış olarak çalışır
C) Buna izin verilir; program, MAX_SIZE 10 değerine ayarlanmış olarak çalışır.

Soru 3: Yukarıdaki programda yer alan aşağıdaki dört satırı göz önünde bulundurun:

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) Türdef içinde Cont kullanmak mümkün müdür?
2) Bir değişken bildirilmeden önce bir tanımlamada typedef kullanmak mümkün müdür?

A) 1) Evet 2) Evet
B) 1) Hayır 2) Hayır
C) 1) Hayır 2) Evet
D) 1) Evet 2) Hayır

Soru 4: Aşağıdakileri kullanabilir miyiz:

#define MAX_SIZE 20
şunun yerine:
const int MAX_SIZE = 20;
A) Evet, işe yarayacaktır ve C++
B) Evet, işe yarar ancak genellikle C++'ta sabit değerler için #define ifadesini kullanmayız
C) #define C++'ta kullanılamaz
D) Bu işlemlerin ikisini de C'de yapamazsınız

5. Soru: typedef, bir tür adı için takma ad oluşturmak amacıyla kullanılır.

A) Doğru.
B) Yanlış.

6. Soru: Diziyi Dolgu() işlevinde 0'a başlatmasaydık ne olurdu?

A) Çalışacak, ancak çıktının tümü 12
B) Sorunsuz bir şekilde çalışır ve dizi 0'a başlatılmış gibi aynı çıktıyı oluşturur
C) Program çalışmaz veya kilitlenir
D) Çalışır ancak çıkışın tümü 0'dır
E) Çalışır ancak herhangi bir çıkış oluşturmayabilir

Soru 7: Tüm uygun seçenekleri işaretleyin. Bu programda MAX_SIZE için neden kapsayıcı kullanıyoruz? Gerekli olan her yerde MAX_SIZE yerine "20" yazmak daha kolay değil mi?

A) MAX_SIZE, herkesin kullanabileceği yerleşik bir C++ değeridir. Sadece ayarlayıp kullanın.
B) Global sabit değerlerden, global değişkenlerde olduğu gibi kaçınılmalıdır
C) Ekstrem kullanmak, programımızın daha kolay anlaşılmasını sağlar
D) Bir programdaki sihirli sayılar genellikle iyi uygulama olarak kabul edilir.
E) MAX_SIZE değerini değiştirmek istersek bunu yalnızca tek bir yerde değiştirmemiz gerekir

Soru 8: Fill() işlevindeki Switch ifadesinde varsayılan bir büyük/küçük harf düzeni olmalıdır. Çünkü bu ifadenin büyük/küçük harf kullanımı iyi bir stil olarak kabul edilir.

A) Doğru.
B) Yanlış.

Soru 9: Fill() işlevinde, ifadeler arasında değişkenler bildiriyoruz. Örneğin, cNum ve cRow, bir for-loop çalıştırmasından sonra bildirilir ve başlatılır. Bu işlem C++ üzerinde çalışacak mı, yoksa tüm değişkenlerin işlevin üst kısmında mı belirtilmesi gerekiyor?

A) Sorun değil.
B) Tüm değişkenler işlevin üst kısmında bildirilmelidir.
C) İki yöntem de yanlıştır: C++, programın hiçbir yerinde değişkenlere izin vermez.
D) Tüm değişkenler global kapsamda tanımlanmalıdır.

Soru Kümesi 4

Aşağıda, basit bir sınıfı tanımlayan ve test eden bir dizi dosya verilmiştir. Her zaman olduğu gibi, aşağıdaki soruları yalnızca kaynak koduna bakarak yanıtlayın.

Başlık dosyasını (cow.h) burada görebilirsiniz:

#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

İlişkili .cc dosyası (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;
}

Şimdi de bu sınıf için bir müşteri programı (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();
}

Soru 1: Bu program ne kazandırıyor?

A) "MOO" (MOO) diyor.
betsy değeri 400, ağırlığı 0 ve MOO yazıyor.
B) "MOO" (MOO) diyor.
400 ağırlığındaki betsy, siyahi ve MOO diyor.
C) "MOO" (MOO) diyor.
betsy 400 ağırlığında,

2. Soru: Erişimci ve mutatör yöntemlerinin kodunu hiçbir zaman başlık dosyasına yerleştirmemeliyiz. (Erişimcinin değer döndüren bir yöntem, mutatör ise değeri değiştiren bir yöntem olduğunu unutmayın.)

A) Doğru.
B) Yanlış.

3. Soru: cow.cc'deki işlev tanımlarının her birinden önce "Cow::" ifadesini eklememiz gerekir mi?

A) Hayır - cow.h dahil edildiği için
B) Evet

Soru 4: Hangi rol üstlenir?

#ifndef COW_H
#define COW_H
...
#endif

başlık dosyasında oynatılacak mı?

Uygun olan tüm seçenekleri işaretleyin:

A) Dosyanın adı COW_H değil cow.h olduğundan hiçbir işe yaramazlar.
B) Bu işlemi yapmazsanız çalışma zamanı hatası alırdık.
C) Bunu yapmadıysak dosyayı birden çok kez ekleyebiliriz.
D) Bir veya daha fazla anahtar kelime yanlış yazıldığı için hiçbir şey işe yaramaz.
E) İnek sınıfının yalnızca bir üstbilgi dosyası olduğundan, hiçbir şey yapmazlar.

5. Soru: Aşağıdaki satırı cowmain.cc dosyasına eklersek ne olur?

cow1.weight_ = 24;
A) Program çalıştırılır ve ağırlık değişkeni bu satır tarafından değiştirilir.
B) Program derlenip çalışır ancak bu satırda kilitlenir.
C) C++ buna izin vermez.
D) Program derlenir ve çalışır ancak ağırlık değişkeni bu satırla değiştirilmez.

Soru 6: Aşağıdaki satır yürütüldüğünde, İnek sınıfındaki kurucu çağrılır:

Cow cow1;

Oluşturucuların önemli özellikleri nelerdir?

Uygun olan tüm seçenekleri işaretleyin

A) Genellikle herhangi bir değer döndürmezler
B) Sınıfımızda bir kurucu sağlamazsak sınıf derlenmez.
C) Cow sınıfındaki kurucu, özel değişkenleri başlatmadığı için alışılmışın dışındadır.
D) Sınıfla her zaman aynı ada sahip olurlar
E) Bağımsız değişkenler farklı olduğu sürece bir sınıfta birkaç kurucumuz olabilir.
F) Bir sınıf sorgulandığında yapıcı çağrılır.

Soru 7: Yıkıcının bazı önemli özellikleri nelerdir?

A) Bir nesne kapsam dışına çıktığında yıkıcı çağrılır
B) Yıkıcı, sınıfla aynı ada sahiptir ancak öncesinde "~" işareti bulunur
C) cow.cc'deki yıkıcıda bir sorun var, çünkü bunun hiçbir işlevi yok.
D) Sınıfımız için bir yıkıcı oluşturmazsak sınıf derlenmez

Soru 8: İstemci programının sınıfı kullanma şekli göz önünde bulundurulduğunda, aşağıdakileri göz önünde bulundurun:

İnek sınıfında üyelerin kamu ve özel olarak ayrılması uygun değildir. Yani özel bir öğe herkese açık olmalıdır ya da herkese açık bir öğe özel olmalıdır.

A) Doğru.
B) Yanlış.

Soru 9: cow.cc'ye ek olarak başka bir oluşturucu daha eklersek ne olur? Yeni oluşturucu şuna benzer:

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

Ve şu satırları main() işlevine ekliyoruz:

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

Bunu yapabilir miyiz?

Uygun olan tüm seçenekleri işaretleyin

A) main() işlevinde cow2'yi ilk kullanıma sunduğumuz satır kilitlenecek.
B) Yalnızca bir oluşturucumuz olabilir.
C) Bu, C++'ta yaygındır
D) Evet ancak bu tipik bir C++ kullanımı değildir
E) Bu komut sorunsuz çalışacaktır ancak gizli öğeler başlatılmadığı için hiçbir sonuç vermez.
F) setName(), setColor() ve setweight() öğelerini aynı sınıfın bir yöntemi içinden çağıramayız.


Bonus Sorular

Soru 1) Aşağıdakilerin sonucu nedir?

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

Soru 2) Bir Apple sınıfının mevcut olduğunu ve başlatıldığını varsayarak aşağıdaki ifadeyi düşünün. Apple sınıfının bir color_ örnek değişkeni vardır:

Apple* granny_smith = new Apple; 

Aşağıdaki tüm doğru ifadeleri seçin:

A) Elma* granny_smith = NULL; if (granny_smith == NULL)... Bu uygun DEĞİLDİR - NULL bu şekilde kontrol edilebilecek bir değer değildir.
B) Elma* granny_smith, fuji; Apple nesnelerine işaret eden iki işaretçi
C) granny_smith değişkeni, bir Apple nesnesiyle ilişkilendirilmiş örnek değişkeni değerlerini içeriyor
D) Apple* granny_smith = NULL; Sorun değil,
E) granny_smith değişkeni bir Apple nesnesinin adresini içeriyor
F) string gs_color = *(granny_smith.get_color(); Bu ifade, başlatıldığı varsayılarak granny_smith nesnesinin rengini döndürür.
G) Yeni Apple nesnesi için depolama alanı, yığında ayrılır
E) Yeni Apple nesnesi için depolama alanı, çalışma zamanı yığınına ayrılır.
I) int* a = &b; b'nin adresini a'ya yerleştirir.


Soru 3) Aşağıdaki programın sonucu nedir?

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


Test Yanıtları

Yukarıdaki soruların tamamını yanıtlara bakmadan tamamlamaya çalışmalısınız. Birinden yardım istemek, doğrudan cevap sayfasına atlamaktan daha iyidir.

Yukarıdaki sorunların yanıtlarını burada görebilirsiniz.