1. Soru Kümesi
Aşağıdaki programı inceleyin ve aşağıdaki soruları yanıtlayın. Soruları yalnızca kaynak koda bakarak yanıtlamanızı rica ediyoruz. Yani, lütfen kodu bir dosyaya kopyalamayın, derlemeyin ve soruları, kodu çalıştırarak cevaplamayın. Tüm eğlenceyi bulacaklar.
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 sonucu nedir?
A) |
12 24 12 24 12 2 4 |
B) |
11 24 11 24 11 24 |
C) |
11 24 11 24 11 |
D) |
11 24 11 11 24 |
D) | Herhangi bir çıktı sağlamaz, söz diziminde hatalar var. |
Soru 2: "Sayaç"ın ilk kullanıma hazırlanmasını kaldırsak ne olur? ne kadar önemli?
A) | Sonsuz döngü - do- surette döngüsü 1'er seri çıktı |
B) | Programın sonucu değişmeyecek |
C) | Do-time döngüsü, 2 ve 4 sonucunu verir. |
D) | Do-time döngüsü, hiçbir şey çıkarmaz |
D) | Do-time döngüsü, 3 ve 9 sonucunu verir. |
Soru 3: Bu sayfanın en üstündeki orijinal programı göz önünde bulundurarak sırasında, sayaç değişkenini başlatan satırı kaldırır. Ne? süre döngüsündeki "counter++" satırını da şunlar:
A) | if döngüsü hiçbir şey döndürmez. |
B) | if döngüsü 1 ve 1 sonucunu verir; do-time döngüsü hiçbir şey çıkarmaz. |
C) | before döngüsünün çıkışı, her iki satırın da döndürdüğü zamanla aynıdır. dahil. |
D) | Bilgisayarı çevirene kadar sistem rastgele sayılar üretir kapalı. |
D) | süre döngüsü sonsuz bir döngüdür |
Soru 4: Bu sayfanın en üstündeki orijinal program düşünüldüğünde, süre döngüsü böyle görünürse ne olur?
counter = first; while (counter <= last) { cout << "\n" << counter; if (first % 2 == 0) next = counter * counter; cout << " " << next; counter++; }
A) | Hal döngüsünün çıkışı, orijinal programdakiyle aynıdır. |
B) | süre döngüsünden hiçbir sonuç çıkmaz |
C) | if döngüsünün sonucu 1 1 ve 1 4'tür. |
D) | if döngüsünün sonucu 1 2 ve 2 4'tür. |
D) | Any döngüsünün sonucu 1 4 ve 2 4 olur. |
K) | Any döngüsünün sonucu 2 4 ve 2 4 olur. |
5. soru: İlk değişken sondan büyükse ne olur?
A) | süre döngüsü bir şeyler üretir ancak başka hiçbir şey çıkmaz. |
B) | Yap sırasında yap döngüsü bir şeyler üretir, ancak başka hiçbir şey çıkmaz. |
C) | Hiç çıkış yapılmaz. |
D) | Program, hatayı veya kilitlenmeyi algılar |
D) | For döngüsünden bir sonuç alınır, ancak başka hiçbir şey çıkmaz. |
Soru 6: İlk değişkeni başlatırsak program nasıl bir çıktı verir aynı olması gerekir.
A) | Yap sırasında yap döngüsü bir şeyler üretir, ancak başka hiçbir şey çıkmaz. |
B) | süre döngüsü bir şeyler üretir ancak başka hiçbir şey çıkmaz. |
C) | Her döngü bir satır çıktısı verir. |
D) | Do döngüsü sırasında 2 satır, diğerininki de bir satır üretir. |
D) | Herhangi bir çıktı oluşturmaz |
K) | For döngüsünden bir sonuç alınır, ancak başka hiçbir şey çıkmaz. |
Soru Kümesi 2
Önceki problemlerde belirttiğimiz gibi, aşağıdaki programı da düşünebilirsiniz. Lütfen aşağıdaki soruları yalnızca kaynak koduna bakarak 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 satırlarda Boys değişkeninin sonucu ne olur?
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) | Derleme veya çalıştırma işlemi yapılmadığı için hiçbir sonuç vermez. |
Soru 2: Programın aşağıdaki satırlarıyla ilgili tüm uygun şıkları seçin:
void F1(int males, int females); void F2(int &m, int &f);
A) | C++ kurallarında belirtildiği gibi, bu iki satırı yalnızca yöntemler kullanılmadan önce tanımlanır. |
B) | C++ kuralları, bağımsız değişken adlarının beyan ve tanım. |
C) | Bu iki satırı kaldırırsak bu program çöker. |
D) | Bu beyanların dünya genelinde belirtilmesi daha yaygındır. kapsam. |
D) | Bunlara yönlendirme bildirimleri denir. |
Soru 3: Aşağıdaki satırı main() işlevinden çıkarıp global ne olacak?
int Boys = 3, Girls = 5;
A) | Sonuç aynı olur. |
B) | Tüm çıkışlarda erkekler 3, kız çocuklar da 5'tir |
C) | Yalnızca main() çıkışında erkeklerin sayısı 3, da 5'e eşittir |
Soru 4: Programın başlangıcını şu şekilde 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 derlenir, ancak çalıştırılmaya çalışıldığında kilitlenir. |
B) | Çıkışta herhangi bir değişiklik olmaz |
C) | Sonuç, program boyunca Erkek Çocuk = 3 Kız = 5 şeklinde olur. |
D) | Çıkış, main() fonksiyonunun çıkışında Boys = 3 Girls = 5 olur. |
D) | Program muhtemelen derleme yapmaz (derleyiciye bağlı olarak). |
Soru 5: Veriler F2'de değer tarafından iletilir.
A) | Doğru. |
B) | Yanlış. |
Sorun Kümesi 3
Önceki problemlerde belirttiğimiz gibi, aşağıdaki programı da düşünebilirsiniz. Lütfen aşağıdaki soruları yalnızca kaynak koduna bakarak cevaplama.Bu, daha ilginç olabilir. Kodu dikkatli bir şekilde bulun.
#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; } }
Soru 1: Bu program, satırlar için 3 ve satırlar için 3 ve görebilir miyiz?
A) |
123 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 |
K) |
9 8 7 6 10 11 12 5 1 2 3 4 |
E) | Herhangi bir çıktı sağlamaz, mantık hatalıdır. |
I) | Herhangi bir çıktı sağlamaz. Söz dizimi hataları var. |
J) | Herhangi bir çıktı oluşturmaz, çıkmaması gerekir. |
K) | Programın çalışmasını beklerken aklınıza gelen ilk 12 sayıyı verir. |
Soru 2: Aşağıdaki satırı main() işlevimize eklersek ne olur?
MAX_SIZE = 10;
A) | C++'ta buna izin verilmez. |
B) | Buna izin verilir; program, MAX_SIZE 20 olarak ayarlanmış şekilde ç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) typedef'de const kullanılabilir mi?
.
2) Belirli bir türde değişken bildirilmeden önce bildirimde typedef kullanılabilir mi?
A) | 1) Evet 2) Evet |
B) | 1) Hayır 2) Hayır |
C) | 1) Hayır 2) Evet |
D) | 1) Evet 2) Hayır |
4. Soru: Aşağıdakileri kullanabilir miyiz?
#define MAX_SIZE 20
const int MAX_SIZE = 20;
A) | Evet, çalışır. C++ |
B) | Evet, işe yarar ancak sabit değerler için genellikle #define kullanmıyoruz. C++'ta |
C) | #define C++'ta kullanılamaz |
D) | Bu işlemlerin ikisini de C dilinde yapamazsınız |
Soru 5: typedef, tür adı için takma ad oluşturmak amacıyla kullanılır.
A) | Doğru. |
B) | Yanlış. |
Soru 6: Diziyi Fill() işlevi?
A) | Çalıştırılacak ancak çıkış 12 saniye olacak |
B) | Sorunsuz çalışır ve dizidekiyle aynı çıktıyı verir. 0 olarak başlatıldı |
C) | Program çalışmayacak veya çökecek |
D) | Çalışır ancak çıkış tamamen 0 olur |
D) | Çalışır ancak herhangi bir çıkış oluşturmayabilir |
Soru 7: Geçerli olanların tümünü işaretleyin. Bu programda neden MAX_SIZE için const kullanıyoruz? Yalnızca "20" yazmak daha kolay değil mi? her yerde MAX_SIZE yerine neler gerekiyor?
A) | MAX_SIZE, herkesin kullanabileceği yerleşik bir C++ değeridir. Az önce ayarla kullanmaya başlayabilirsiniz. |
B) | Global değişkenlerden, global değişkenler gibi kaçınılması gerekir |
C) | Özet kullanmak, programımızın anlaşılmasını kolaylaştırır |
D) | Bir programdaki sihirli sayılar genellikle iyi uygulama olarak kabul edilir. |
D) | MAX_SIZE değiştirmek istersek, bunu yalnızca bir tanesinde değiştirmemiz gerekir yer |
Soru 8: Fill() işlevindeki Switch deyiminin varsayılan değeri olmalıdır çünkü bu açıklamaya eklemek iyi bir stil olarak kabul edilir.
A) | Doğru. |
B) | Yanlış. |
Soru 9: Fill() işlevinde, ifadeler arasında değişkenleri açıkladığımıza dikkat edin. Örneğin, cNum ve cRow bir for döngüsü çalıştırıldıktan sonra bildirilir ve başlatılır. Bu C++'ta mı çalışır, yoksa tüm değişkenlerin ne anlama geliyor?
A) | Bu işlemin herhangi bir sakıncası yoktur. |
B) | Tüm değişkenler işlevin üstünde tanımlanmalıdır. |
C) | Her iki yol da yanlıştır: C++, çok önemli. |
D) | Tüm değişkenler global kapsamda bildirilmelidir. |
4. Soru Kümesi
Basit bir sınıfı tanımlayan ve test eden bir dizi dosya aşağıda verilmiştir. Her zaman olduğu gibi, aşağıdaki soruları yalnızca kaynak koda başvurarak yanıtlayın.
Başlık dosyası (cow.h) aşağıda verilmiştir:
#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) aşağıda verilmiştir:
#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; }
Aşağıda, bu sınıf için bir istemci programı yer almaktadır (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 gibi çıktılar sağlıyor?
A) | betsy "MOO" diyor. . betsy 400 ağırlığında, 0'dır ve "MOO" (MOO) diyor. |
B) | betsy "MOO" diyor. . 400 ağırlıkta olan Betsy, siyahi ve MOO diyor. |
C) | betsy "MOO" diyor. . betsy 400 ağırlıkta, |
2. Soru: Erişimci ve mutatör yöntemleri için hiçbir zaman kodu yerleştirmemeliyiz başlık dosyasına. (Erişimcinin, değer döndüren bir yöntem, mutatör ise değerleri değiştiren bir yöntemdir.)
A) | Doğru. |
B) | Yanlış. |
Soru 3: "İne:" bilgisine ihtiyacımız var mı? her bir fonksiyon tanımından önce cow.cc'de mi?
A) | Hayır (cow.h dahil edildiği için) |
B) | Evet |
Soru 4: Hangi rol:
#ifndef COW_H #define COW_H ... #endif
başlık dosyasında oynatılsın mı?
Uygun olan tüm seçenekleri işaretleyin:
A) | Dosyanın adı cow.h olduğu için bir işe yaramazlar. COW_H değil. |
B) | Bunu yapmasaydık, çalışma zamanı hatası |
C) | Bunu yapmadığımızda dosyayı bir kereden fazla ekleyebiliriz. |
D) | Anahtar kelimelerden biri veya daha fazlası yanlış yazıldığı için hiçbir işlem yapmazlar. |
D) | Cow sınıfında yalnızca bir başlık dosyası olduğu için hiçbir şey yapmıyorlar. |
5. Soru: Aşağıdaki satırı cowmain.cc'ye ekleyecek olsaydık ne olurdu?
cow1.weight_ = 24;
A) | Program çalışır ve ağırlık değişkeni değiştirilir bu satıra ekle. |
B) | Program derlenir ve çalışır, ancak bu satırda çöker. |
C) | C++ buna izin vermez. |
D) | Program derlenir ve çalışır ancak ağırlık değişkeni bu satır tarafından değiştirildi. |
Soru 6: Aşağıdaki satır yürütüldüğünde, Cow sınıfındaki kurucu şu şekilde adlandı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 oluşturucu sağlamazsak sınıf, derlemedi |
C) | İnek sınıfındaki oluşturucu, başlatılmadığı için normal değil olduğunu unutmayın. |
D) | Her zaman sınıfla aynı ada sahip olurlar |
D) | Bir sınıfta, bağımsız değişkenler olduğu sürece birden fazla kurucu olabilir farklı |
K) | Bir sınıf canlandırıldığında bir oluşturucu çağrılır. |
7. Soru: Yıkıcının ö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 önünde "~" vardır |
C) | cow.cc'deki yıkıcıda bir hata var, hiçbir şey yapmaz. |
D) | Sınıfımız için bir yıkıcı oluşturmazsak sınıf derlemek |
Soru 8: Müşteri programının dersi kullanma biçimini göz önünde bulundurarak, takip etmek için:
İnek sınıfında üyelerin, herkese açık ve gizli olarak bölünmesi uygun değildir. Yani, gizli olan bir şey herkese açık veya herkese açık bir şey gizli olmalıdır.
A) | Doğru. |
B) | Yanlış. |
Soru 9: Yapısında kullanılan oluşturucuya ek olarak başka bir oluşturucu cow.cc zorunluluğumuz var. Yeni oluşturucu şöyle görünür:
Cow::Cow(string inName, double inWeight, Color inColor) { set_name(inName); set_weight(inWeight); set_color(inColor); }
Ayrıca, aşağıdaki satırları main() işlevine ekleriz:
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 hazırladığımız satır çöker. |
B) | Yalnızca bir oluşturucumuz olabilir. |
C) | Bu, C++'ta yaygındır |
D) | Evet ancak bu tipik bir C++ kullanımı değil |
D) | Bu işlem düzgün çalışır ancak özel'ler başlatılmaz. |
K) | setName(), setColor() ve setweight() işlevlerini içinden çağıramıyoruz. aynı sınıfın bir yöntemidir. |
Bonus Sorular
Soru 1) Aşağıdaki sonuç ne olur?
#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 ele alalım. Apple sınıfında bir color_ örnek değişkeni bulunur:
Apple* granny_smith = new Apple;
Aşağıdaki ifadelerden doğru olanların tümünü seçin:
A) | Apple* granny_smith = NULL; if (granny_smith == NULL)... Bu uygun DEĞİLDİR. NULL, bu şekilde kontrol edilebilecek bir değer değildir. |
B) | Apple* granny_smith, fuji; Bu komut, Apple nesnelerine iki işaretçi bildirir |
C) | granny_smith değişkeni, bir Apple nesnesiyle ilişkilendirilmiş örnek değişkeni değerlerini içerir |
D) | Apple* granny_smith = NULL; Bunda herhangi bir sakınca yok, |
D) | granny_smith değişkeni bir Apple nesnesinin adresini içerir |
K) | string gs_color = *(granny_smith.get_color( sırası) Bu ifade, başlatıldığı varsayılarak granny_smith nesnesinin rengini döndürür. |
K) | Yeni Apple nesnesi için depolama alanı, yığında ayrıldı |
E) | Yeni Apple nesnesi için depolama alanı, çalışma zamanı yığınında ayrılır |
I) | int* a = &b; Bu, b adresini a içine yerleştirir. |
Soru 3) Aşağıdaki programın çıktısı 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ı
Yanıtlara bakmadan yukarıdaki soruların hepsini tamamlamaya çalışmalısınız. Yardım almak için doğrudan yanıt sayfasına gitmek yerine birinden yardım istemek daha iyidir.
Yukarıdaki sorunların yanıtlarını burada görüntüleyebilirsiniz.