Aufgabengruppe 1
Lies dir das folgende Programm durch und beantworte dann die folgenden Fragen. Wir möchten, dass Sie die Fragen beantworten, indem Sie sich nur den Quellcode ansehen. Kopieren Sie den Code also nicht in eine Datei, kompilieren Sie ihn und beantworten Sie die Fragen basierend auf der Ausführung des Codes. Das macht den ganzen Spaß!
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); }
Frage 1: Was ist das Ergebnis dieses Programms?
A) |
1 2 2 4 1 2 2 4 1 2 24. |
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) | Es wird nichts ausgegeben. Die Syntax enthält Fehler. |
Frage 2: Was würde passieren, wenn wir die Initialisierung von „counter“ entfernen vor der Do-Through-Schleife?
A) | Eine Endlosschleife: Die Do- while-Schleife gibt eine Reihe von Einsen aus. |
B) | Die Ausgabe des Programms ändert sich nicht |
C) | Die Do-während-Schleife gibt 2 und 4 aus. |
D) | Die Do-während-Schleife gibt nichts aus. |
E) | Die Do-während-Schleife gibt 3 und 9 aus. |
Frage 3: Nehmen wir an, wir haben für das ursprüngliche Programm oben auf dieser Seite die Zeile entfernt, mit der die Zählervariable vor der während-Schleife initialisiert wird. Was? würde passieren, wenn wir auch die Zeile "counter++" innerhalb der while-Schleife entfernen, wie in Folgendes?
A) | Die while-Schleife gibt nichts aus. |
B) | Die while-Schleife gibt 1 und 1 aus. gibt die Do- while-Schleife nichts aus. |
C) | Die Ausgabe der while-Schleife ist die gleiche, als wenn beide Zeilen enthalten. |
D) | Das System gibt Zufallszahlen aus, bis wir den Computer einschalten. deaktiviert. |
E) | Die while-Schleife ist eine Endlosschleife. |
Frage 4: Was würde mit dem ursprünglichen Programm oben auf dieser Seite geschehen? Würde die „Während-Schleife“ so aussehen?
counter = first; while (counter <= last) { cout << "\n" << counter; if (first % 2 == 0) next = counter * counter; cout << " " << next; counter++; }
A) | Die Ausgabe der while-Schleife entspricht der des Originalprogramms. |
B) | Die while-Schleife gibt nichts aus |
C) | Die Ausgabe der while-Schleife ist 1 1 und 1 4. |
D) | Die Ausgabe der while-Schleife ist 1 2 und 2 4. |
E) | Die Ausgabe der while-Schleife ist 1 4 und 2 4. |
F) | Die Ausgabe der while-Schleife ist 2 4 und 2 4. |
Frage 5: Was würde passieren, wenn die erste Variable größer als die letzte ist?
A) | Die while-Schleife gibt etwas aus, sonst nichts. |
B) | Die Do-Während-Schleife gibt etwas aus, sonst nichts. |
C) | Es wird überhaupt keine Ausgabe geben. |
D) | Das Programm erkennt Fehler oder Absturz. |
E) | Die For-Schleife gibt etwas aus, sonst nichts. |
Frage 6: Was gibt das Programm aus, wenn die erste Variable initialisiert wird? mit der letzten Variablen übereinstimmen?
A) | Die Do-Während-Schleife gibt etwas aus, sonst nichts. |
B) | Die while-Schleife gibt etwas aus, sonst nichts. |
C) | In jeder Schleife wird eine Zeile ausgegeben. |
D) | Bei der Do while-Schleife werden zwei Zeilen ausgegeben, in der anderen eine. |
E) | Es wird nichts ausgegeben. |
F) | Die For-Schleife gibt etwas aus, sonst nichts. |
Aufgabengruppe 2
Wie im vorherigen Problemsatz finden Sie hier ein Programm, das Sie in Betracht ziehen können. Sehen Sie sich zur Beantwortung der folgenden Fragen nur den Quellcode an.
#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; }
Frage 1: Wie wird die Variable „boys“ in den markierten Zeilen ausgegeben?
A) |
Nr. 1: 6 Nr. 2: 3 Nr. 3: 11 Nr. 4: 11 |
B) |
Nr. 1: 6 Nr. 2: 3 Nr. 3: 11 Nr. 4: 3 |
C) |
Nr. 1: 6 Nr. 2: 6 Nr. 3: 11 Nr. 4: 11 |
D) | Es wird nichts ausgegeben, da es nicht kompiliert oder ausgeführt wird. |
Question 2: Wählen Sie alle zutreffenden Antworten für die folgenden Zeilen des Programms aus:
void F1(int males, int females); void F2(int &m, int &f);
A) | Die C++-Regeln besagen, dass wir diese beiden Zeilen entfernen können, werden die Methoden vor der Verwendung definiert. |
B) | C++-Regeln besagen, dass die Argumentnamen zwischen die Deklaration und Definition. |
C) | Dieses Programm stürzt ab, wenn wir diese beiden Zeilen entfernen. |
D) | Es ist üblicher, dass die Deklarationen auf der globalen Umfang. |
E) | Diese werden als Forward-Deklarationen bezeichnet. |
Question 3: Wenn wir die folgende Zeile aus "main()" verschieben und im globalen was passiert?
int Boys = 3, Girls = 5;
A) | Die Ausgabe wäre die gleiche. |
B) | Jungen: = 3 und Mädchen = 5 |
C) | Jungen würden in der Ausgabe von Main() = 3 und Mädchen = 5 |
Frage 4: Was wäre, wenn wir den Beginn des Programms so ändern würden:
// We have moved moved these to global scope const int Boys = 3; const int Girls = 5; void main() { //int Boys = 3, Girls = 5;
A) | Das Programm würde kompilieren, aber stürzt ab, wenn wir versuchen, es auszuführen. |
B) | Die Ausgabe ändert sich nicht. |
C) | Die Ausgabe wäre während des gesamten Programms „Jungen = 3 Mädchen = 5“. |
D) | Die Ausgabe würde nur in der Ausgabe von Main() so aussehen: Boys = 3 Girls = 5 |
E) | Je nach Compiler wird das Programm wahrscheinlich nicht kompiliert. |
Frage 5: In F2 werden Daten als Wert übergeben.
A) | Richtig |
B) | Falsch |
Aufgabengruppe 3
Wie im vorherigen Problemsatz finden Sie hier ein Programm, das Sie in Betracht ziehen können. Bitte beantworten die folgenden Fragen, indem Sie sich nur den Quellcode ansehen.Dieser ist interessanter als die beiden vorherigen. Zeichnen Sie den Code sorgfältig nach.
#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; } }
Frage 1: Was gibt dieses Programm mit einer Eingabe von 3 für Zeilen und 4 für die Eingabe von Spalten?
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 |
H) | Es wird nichts ausgegeben – die Logik ist fehlerhaft. |
Es wird nichts ausgegeben. Syntaxfehler sind aufgetreten. | |
J) | Es wird nichts ausgegeben, das ist auch nicht vorgesehen. |
T) | Es werden die ersten zwölf Zahlen ausgegeben, die Ihnen einfallen, während Sie auf die Ausführung des Programms warten. |
Frage 2: Was wäre, wenn wir unserer Funktion "main()" die folgende Zeile hinzufügen?
MAX_SIZE = 10;
A) | Dies ist in C++ nicht zulässig. |
B) | Dies ist zulässig: wird das Programm mit MAX_SIZE auf 20 |
C) | Dies ist zulässig: würde das Programm mit MAX_SIZE auf 10 laufen. |
Question 3: Betrachten Sie die folgenden vier Zeilen aus dem Programm oben:
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) Ist es möglich, eine const-Datei in einer typedef zu verwenden?
2) Ist es möglich, eine typedef in einer Deklaration zu verwenden, bevor eine Variable dieses Typs deklariert wurde?
A) | 1) Ja 2) Ja |
B) | 1) Nein 2) Nein |
C) | 1) Nein 2) Ja |
D) | 1) Ja 2) Nein |
Frage 4: Können wir Folgendes verwenden?
#define MAX_SIZE 20
const int MAX_SIZE = 20;
A) | Ja, das funktioniert. Sie können auch #definieren für Konstanten in C++ |
B) | Ja, es wird funktionieren, aber wir verwenden in der Regel nicht „#define“ für Konstanten. in C++ |
C) | #define ist in C++ nicht verfügbar |
D) | Beides ist in C nicht möglich. |
Frage 5: Mit „typedef“ wird ein Alias für einen Typnamen erstellt.
A) | Richtig |
B) | Falsch |
Frage 6: Was würde passieren, wenn wir das Array nicht im Fill()?
A) | Er wird ausgeführt, aber die Ausgabe ist 12 |
B) | Sie funktioniert problemlos und generiert die gleiche Ausgabe, als ob das Array Mit 0 initialisiert |
C) | Das Programm wird nicht ausgeführt oder stürzt ab |
D) | Er wird ausgeführt, aber die Ausgabe ist Nullen. |
E) | Sie wird ausgeführt, generiert aber möglicherweise keine Ausgabe |
Question 7: Wählen Sie alle zutreffenden Antworten aus. Warum verwenden wir in diesem Programm const für MAX_SIZE? Ist es nicht einfacher, einfach „20“ einzugeben statt MAX_SIZE, wo immer sich erforderlich?
A) | MAX_SIZE ist ein integrierter C++-Wert, den jeder verwenden kann. Gerade eingerichtet und nutzen sie. |
B) | Globale Consts sollten genau wie globale Variablen vermieden werden. |
C) | Die Verwendung von const-Zeichen macht unser Programm leichter verständlich. |
D) | Magische Zahlen in einem Programm gelten normalerweise als gute Übung. |
E) | Wenn wir MAX_SIZE ändern möchten, brauchen wir das nur auf einmal zu ändern. Ort |
Frage 8: Die „switch“-Anweisung in der Funktion „Fill()“ sollte eine Standardeinstellung haben da es als guter Stil gilt, einen einzubeziehen.
A) | Richtig |
B) | Falsch |
Frage 9: In der Funktion Fill() deklarieren wir Variablen zwischen Anweisungen. Zum Beispiel werden cNum und cRow deklariert und initialisiert, nachdem eine For-Schleife ausgeführt wurde. Funktioniert das in C++ oder müssen alle Variablen am Anfang die Funktion?
A) | Das ist kein Problem. |
B) | Alle Variablen müssen am Anfang der Funktion deklariert werden. |
C) | Beide Möglichkeiten sind falsch. C++ lässt keine Variablen in . |
D) | Alle Variablen müssen global deklariert werden. |
Aufgabengruppe 4
Hier sehen Sie eine Reihe von Dateien, mit denen eine einfache Klasse definiert und getestet wird. Beziehen Sie sich bei der Beantwortung der folgenden Fragen wie immer nur auf den Quellcode.
Hier ist die Headerdatei (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
Hier ist die zugehörige .cc-Datei (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; }
Und hier ist ein Client-Programm für diesen Kurs (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(); }
Frage 1: Was gibt dieses Programm aus?
A) | betsy sagt MOO. Betsy wiegt 400, ist 0 und sagt "MOO". |
B) | betsy sagt MOO. Betsy wiegt 400, ist schwarz und sagt "MOO". |
C) | betsy sagt MOO. Betsy wiegt 400, ist |
Question 2: Wir sollten niemals Code für Accessor- oder Mutator-Methoden platzieren in einer Headerdatei. (Eine Zugriffsfunktion ist eine Methode, die einen Wert zurückgibt, und ein Mutator, ist eine Methode, die einen Wert ändert.)
A) | Richtig |
B) | Falsch |
Question 3: Brauchen wir das "Kuh::" vor jeder der Funktionsdefinitionen auf cow.cc?
A) | Nein, da „cow.h“ enthalten ist |
B) | Ja |
Frage 4: Welche Rolle spielen folgende Aufgaben:
#ifndef COW_H #define COW_H ... #endif
in der Headerdatei wiedergeben?
Wähle alle zutreffenden Antworten aus.
A) | Sie erfüllen keinen Zweck, da der Name der Datei „cow.h“ lautet. nicht COW_H. |
B) | Andernfalls erhalten wir einen Laufzeitfehler. |
C) | Ohne diesen Schritt wird die Datei möglicherweise mehrmals eingefügt. |
D) | Es wird nichts unternommen, da mindestens eines der Keywords falsch geschrieben ist. |
E) | Sie tun nichts, da die Cow-Klasse nur eine Headerdatei hat. |
Frage 5: Was würde passieren, wenn wir die folgende Zeile zu cowmain.cc hinzufügen?
cow1.weight_ = 24;
A) | Das Programm wird ausgeführt und die Gewichtungsvariable wird geändert. durch diese Zeile. |
B) | Das Programm würde zwar kompilieren und ausgeführt, aber in dieser Zeile abstürzen. |
C) | In C++ ist dies nicht zulässig. |
D) | Das Programm würde kompilieren und ausführen, aber die Variable "weight" ist nicht durch diese Zeile geändert. |
Frage 6: Wenn die folgende Zeile ausgeführt wird, wird der Konstruktor in der Cow-Klasse aufgerufen:
Cow cow1;
Was sind einige wichtige Eigenschaften von Konstrukteuren?
Wähle alle zutreffenden Antworten aus.
A) | Sie geben normalerweise keine Werte zurück |
B) | Wenn wir in unserer Klasse keinen Konstruktor bereitstellen, wird die Klasse Nicht kompilieren |
C) | Der Konstruktor in der Cow-Klasse ist untypisch, da er nicht initialisiert wird. privaten Variablen. |
D) | Sie haben immer denselben Namen wie der Kurs. |
E) | Eine Klasse kann mehrere Konstruktoren haben, unterscheiden |
F) | Ein Konstruktor wird aufgerufen, wenn eine Klasse instanziiert wird. |
Frage 7: Was sind einige der wichtigsten Merkmale eines Zerstörers?
A) | Ein Destruktor wird aufgerufen, wenn ein Objekt den Geltungsbereich überschreitet. |
B) | Ein Destruktor hat den gleichen Namen wie die Klasse, dem jedoch „~“ vorangestellt ist. |
C) | Mit dem Destruktor in cow.cc stimmt etwas nicht, tut nichts. |
D) | Wenn wir keinen Destruktor für unsere Klasse erstellen, kann die Klasse nicht kompilieren |
Frage 8: Berücksichtigen Sie in Anbetracht der Art und Weise, wie die Klasse im Client-Programm verwendet wird, Folgendes:
Die Einteilung der Mitglieder in öffentlich und privat ist in der Kuhklasse nicht angemessen. Das heißt: Etwas, das privat ist, sollte öffentlich sein, oder etwas, das öffentlich ist, privat sein sollte.
A) | Richtig |
B) | Falsch |
Frage 9: Was wäre, wenn wir neben dem Konstruktor noch einen weiteren Konstruktor hinzufügen würden, müssen wir cow.cc. Der neue Konstruktor sieht so aus:
Cow::Cow(string inName, double inWeight, Color inColor) { set_name(inName); set_weight(inWeight); set_color(inColor); }
Und wir fügen die folgenden Zeilen zu "main()" hinzu:
Cow cow2("milly", 350.2, brown); cow2.Moo(); cow2.Properties();
Wenn ja, unter welchen Voraussetzungen?
Wähle alle zutreffenden Antworten aus.
A) | Die Zeile in "main()", in der wir cow2 initialisieren, stürzt ab. |
B) | Wir können nur einen Konstruktor haben. |
C) | Dies ist üblich in C++ |
D) | Ja, aber dies ist keine typische Verwendung von C++. |
E) | Dies funktioniert zwar fehlerfrei, aber es wird nichts ausgegeben, Private nicht initialisiert. |
F) | setName(), setColor() und setWeight() können nicht innerhalb von der gleichen Klasse. |
Bonusfragen
Frage 1) Wie wird Folgendes ausgegeben?
#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; }
Frage 2) Betrachten Sie die folgende Anweisung, wobei davon ausgegangen wird, dass eine Apple-Klasse vorhanden und initialisiert wurde. Die Apple-Klasse hat die Instanzvariable color_:
Apple* granny_smith = new Apple;
Wählen Sie alle zutreffenden Aussagen aus:
A) | Apple* granny_smith = NULL; if (granny_smith == NULL)... Das ist NICHT in Ordnung. NULL ist kein Wert, der auf diese Weise überprüft werden kann. |
B) | Apfel* granny_smith, fuji; Deklariert zwei Zeiger auf Apple-Objekte |
C) | Die Variable „granny_smith“ enthält die Werte der Instanzvariablen, die mit einem Apple-Objekt verknüpft sind. |
D) | Apple* granny_smith = NULL; Das ist in Ordnung, |
E) | Die Variable granny_smith enthält die Adresse für ein Apple-Objekt. |
F) | string gs_color = *(granny_smith.get_color()); Diese Anweisung gibt die Farbe des granny_smith-Objekts zurück, vorausgesetzt, es wurde initialisiert. |
G) | Speicher für das neue Apple-Objekt wird im Heap zugewiesen |
H) | Speicher für das neue Apple-Objekt wird im Laufzeitstack zugewiesen |
int* a = &b; Dadurch wird die Adresse von b in a platziert. |
Question 3) Was ist das Ergebnis des folgenden Programms?
#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; }
Quizantworten
Sie sollten versuchen, alle oben genannten Fragen zu beantworten, ohne sich die Antworten anzusehen. Es ist besser, jemanden um Hilfe zu bitten, als direkt zum Antwortbogen zu springen.
Hier finden Sie die Antworten zu den oben genannten Problemen.