問題セット 1
次のプログラムを学習してから、下記の質問に答えてください。質問への回答は、ソースコードのみを見て回答してください。つまり、ファイルにコピーしてコンパイルしたり、実行に基づいて質問に回答したりしないでください。そうすれば楽しさがまったくなくなります!
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);
}
質問 1: このプログラムからどのような出力が得られますか?
| 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) | 構文にエラーがあるため、何も出力されません。 |
質問 2: 「counter」の初期化を削除するとどうなるかどうなるでしょうか
| A) | 無限ループ - do-while ループにより一連の 1 が出力されます。 |
| B) | プログラムの出力は変わりません。 |
| C) | do-while ループは、出力 2 と 4 を行います。 |
| D) | do-while ループは何も出力しない |
| E) | do-while ループは、3 と 9 を出力します。 |
質問 3: このページの一番上にある元のプログラムについて、 while ループの前にカウンタ変数を初期化する行を削除しました。内容 次のように、while-loop 内の counter++行も削除した場合、 どのようなものですか?
| A) | while ループは何も出力しません。 |
| B) | while ループは 1 と 1 を出力します。do-while ループは何も出力しません。 |
| C) | while ループの出力は、両方の行が 含まれます。 |
| D) | コンピュータを回すまで、システムは乱数を出力します。 オフにします。 |
| E) | while ループは無限ループである |
質問 4: このページの一番上にある元のプログラムの場合、 while ループがこのようになりますか?
counter = first;
while (counter <= last) {
cout << "\n" << counter;
if (first % 2 == 0)
next = counter * counter;
cout << " " << next;
counter++;
}| A) | while ループの出力は、元のプログラムと同じです。 |
| B) | while ループは何も出力しない |
| C) | while ループの出力は 1 1 と 1 4 です。 |
| D) | while ループの出力は 1、2、2 4 です。 |
| E) | while ループの出力は 1 4 と 2 4 です。 |
| F) | while ループの出力は 2 4 と 2 4 です。 |
質問 5: 最初の変数が最後の変数よりも大きい場合はどうなりますか?
| A) | while ループは何かを出力し、それ以外は何も出力しません。 |
| B) | do while ループは何かを出力し、それ以外は何も出力しません。 |
| C) | 出力はまったくありません。 |
| D) | プログラムが障害またはクラッシュを分離する |
| E) | for ループはなんらかの出力を返しますが、それ以外は出力されません。 |
質問 6: 最初の変数を初期化すると、プログラムは何を出力するか どうすればよいでしょうか。
| A) | do while ループは何かを出力し、それ以外は何も出力しません。 |
| B) | while ループは何かを出力し、それ以外は何も出力しません。 |
| C) | 各ループから 1 行が出力されます。 |
| D) | do while ループは 2 行を出力し、もう 1 行は 1 行をループします。 |
| E) | 出力は |
| F) | for ループはなんらかの出力を返しますが、それ以外は出力されません。 |
問題セット 2
前の問題セットと同様に、検討すべきプログラムがあります。以降の質問には、ソースコードのみを見て回答してください。
#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: マーク付きの行の Boys 変数の出力は何ですか?
| 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) | コンパイルや実行を行わないため、何も出力しません。 |
質問 2: プログラムの以下の行に関して該当するものをすべて選択してください。
void F1(int males, int females); void F2(int &m, int &f);
| A) | C++ のルールでは、 使用前にメソッドを定義します。 |
| B) | C++ のルールでは、引数名は 必要があります。 |
| C) | この 2 行を削除すると、このプログラムはクラッシュします。 |
| D) | 宣言はグローバル レベルで記述されるのが一般的です。 あります。 |
| E) | これらは前方宣言と呼ばれます。 |
質問 3: 次の行を main() から どうなるでしょうか
int Boys = 3, Girls = 5;
| A) | 出力は同じです。 |
| B) | すべての出力で、男の子は 3、女の子は 5 になります。 |
| C) | main() からの出力でのみ、男の子は = 3、女の子は = 5 になります。 |
質問 4: プログラムの最初の部分を以下のように変更したらどうなるでしょうか。
// We have moved moved these to global scope
const int Boys = 3;
const int Girls = 5;
void main() {
//int Boys = 3, Girls = 5;| A) | プログラムはコンパイルされますが、実行しようとするとクラッシュします。 |
| B) | 出力に変更はありません。 |
| C) | 出力は、プログラム全体で男の子 = 3 人の女の子 = 5 になります。 |
| D) | main() からの出力でのみ、出力は Boys = 3 Girls = 5 になります。 |
| E) | コンパイラによっては、プログラムがコンパイルされない可能性があります。 |
質問 5: データは F2 の値によって渡されます。
| A) | 正しい。 |
| B) | 誤り。 |
問題セット 3
前の問題セットと同様に、検討すべきプログラムがあります。恐れ入りますが、 続いて、ソースコードのみを見て質問に答えます。これは 前の 2 つよりも興味深いものになります。コードを慎重にトレースします。
#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: このプログラムは、行を 3、行を 4 に入力した場合、何を出力しますか。 列
| 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) | 何も出力しません。ロジックに不具合があります。 |
| I) | 構文エラーがあるため、何も出力されません。 |
| J) | 何も出力しません。想定外です。 |
| K) | プログラムの実行を待っている間に頭に浮かんだ最初の 12 個の数字が出力されます。 |
質問 2: main() 関数に次の行を追加するとどうなるでしょうか。
MAX_SIZE = 10;
| A) | C++ では、これは許容されません。 |
| B) | このようなケースは許可されています。プログラムは MAX_SIZE を 20 に設定して実行します。 |
| C) | このようなケースは許可されています。プログラムは MAX_SIZE を 10 に設定して実行します。 |
質問 3: 上のプログラムの次の 4 行について考えてみましょう。
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 で定数を使用できるか。
2)変数が宣言される前に、その型の宣言で typedef を使用することはできますか?
| A) | 1) はい 2) はい |
| B) | 1) いいえ 2) いいえ |
| C) | 1) いいえ 2) はい |
| D) | 1) はい 2) いいえ |
質問 4: 次の質問を使用できますか?
#define MAX_SIZE 20
const int MAX_SIZE = 20;
| A) | はい、機能します。また、環境変数で定数に #define を使用しても C++ |
| B) | 機能するが、通常は定数に #define を使用しない C++ |
| C) | #define は C++ では使用できません |
| D) | C ではこのどちらも行えない |
質問 5: typedef は、型名のエイリアスを作成するために使用されます。
| A) | 正しい。 |
| B) | 誤り。 |
質問 6:配列を 0 に初期化しないとどうなりますか? Fill() 関数はどうでしょうか。
| A) | 実行されますが、出力はすべて 12 になります |
| B) | 正常に実行され、配列が元の状態の場合と同じ出力が生成されます。 0 に初期化されます |
| C) | プログラムが実行されない、またはクラッシュする |
| D) | 実行されますが、出力はすべて 0 になります |
| E) | 実行されますが、出力が生成されない場合があります。 |
質問 7: 当てはまるものをすべて選択してください。このプログラムで MAX_SIZE に const を使用する理由 「20」と入力する方が簡単ではないでしょうか(MAX_SIZE の代わりになります) 必要か?
| A) | MAX_SIZE は、誰でも使用できる組み込みの C++ 値です。設定する 使います。 |
| B) | グローバル定数はグローバル変数と同じように使用しないでください。 |
| C) | const を使うとプログラムがわかりやすくなる |
| D) | 通常、プログラムでマジック ナンバーを使用することはおすすめです。 |
| E) | MAX_SIZE を変更する場合は、1 つの 場所 |
質問 8: Fill() 関数の switch ステートメントには、 含めることをおすすめします。
| A) | 正しい。 |
| B) | 誤り。 |
問題 9: Fill() 関数では、ステートメント間で変数を宣言しています。 たとえば、cNum と cRow は、for ループの実行後に宣言され、初期化されます。 これは C++ で動作しますか?それとも、すべての変数を どうすればよいでしょうか。
| A) | これは問題ありません。 |
| B) | すべての変数は関数の先頭で宣言する必要があります。 |
| C) | どちらの方法も間違っています。C++ では 。 |
| D) | すべての変数はグローバル スコープで宣言する必要があります。 |
問題セット 4
以下に、単純なクラスを定義してテストするファイルのセットを示します。通常どおり、ソースコードのみを参照して、以降の質問に回答します。
ヘッダー ファイル(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関連する .cc ファイル(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;
}以下は、このクラス(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();
}質問 1: このプログラムは何を出力しますか。
| A) | Betsy は「MOO」と言います。 Betsy の体重は 400、0 で、MOO と書かれています。 |
| B) | Betsy は「MOO」と言います。 Betsy の体重は 400、黒人で「MOO」と書かれています。 |
| C) | Betsy は「MOO」と言います。 Betsy の体重は 400 で、 |
質問 2: アクセサ メソッドとミューテータ メソッドのコードは決して配置すべきではありません。 記述する必要があります。(アクセサーは値を返すメソッドであり、ミューテータは 値を変更するメソッドです)。
| A) | 正しい。 |
| B) | 誤り。 |
質問 3:「牛::」は必要ですか?各関数定義の前に どうでしょうか
| A) | いいえ - cow.h が含まれているため |
| B) | ○ |
質問 4: 担当する役割
#ifndef COW_H #define COW_H ... #endif
再生できるでしょうか。
該当するものをすべて選択してください:
| A) | ファイルの名前は cow.h であるため、それらは役に立ちません。 COW_H ではありません。 |
| B) | そうしなかった場合、ランタイム エラーが発生します。 |
| C) | これを行わないと、ファイルが複数回インクルードされる可能性があります。 |
| D) | 1 つ以上のキーワードにスペルミスがあるため、何もしない。 |
| E) | Cow クラスにはヘッダー ファイルが 1 つしかないため、何もしません。 |
質問 5: cowmain.cc に次の行を追加するとどうなるでしょうか。
cow1.weight_ = 24;
| A) | プログラムが実行されて、重み変数が変更されます。 この行で作成します。 |
| B) | プログラムはコンパイルされて実行されますが、その行でクラッシュします。 |
| C) | C++ では、これを行えません。 |
| D) | プログラムはコンパイルされて実行されますが、weight 変数は この行で変更されます。 |
質問 6: 次の行を実行すると、Cow クラスのコンストラクタが呼び出されます。
Cow cow1;
コンストラクタの重要な特性は何ですか。
(該当するものをすべて選択してください)。
| A) | 通常は何も返されない |
| B) | クラスにコンストラクタを指定しない場合、 コンパイルしない |
| C) | Cow クラスのコンストラクタは、初期化を行わないため非定型的 プライベート変数を定義します。 |
| D) | 変数は常にクラスと同じ名前にする。 |
| E) | 引数が 1 つである限り、クラス内に複数のコンストラクタを含めることができます。 |
| F) | コンストラクタは、クラスがインスタンス化されると呼び出されます。 |
質問 7: デストラクタの重要な特徴は何ですか?
| A) | オブジェクトがスコープ外になると、デストラクタが呼び出される |
| B) | デストラクタの名前はクラスと同じですが、先頭に「~」が付きます |
| C) | cow.cc のデストラクタに何か問題があります。 何もしません。 |
| D) | クラスにデストラクタを作成しない場合、クラスは コンパイル |
質問 8: クライアント プログラムがクラスを使用する方法を踏まえて、 次のとおりです。
Cow クラスでメンバーをパブリックとプライベートに分けることは適切ではありません。つまり、非公開であるものは公開であるべき、または公開であるものは、非公開であるべきです。
| A) | 正しい。 |
| B) | 誤り。 |
質問 9: 既存のコンストラクタに加えて、さらに別のコンストラクタを追加したら、 cow.cc を指定します新しいコンストラクタは次のようになります。
Cow::Cow(string inName, double inWeight, Color inColor) {
set_name(inName);
set_weight(inWeight);
set_color(inColor);
}main() に次の行を追加します。
Cow cow2("milly", 350.2, brown);
cow2.Moo();
cow2.Properties();これは可能ですか?
(該当するものをすべて選択してください)。
| A) | cow2 を初期化する main() 内の行がクラッシュします。 |
| B) | コンストラクタは 1 つだけ設定できます。 |
| C) | これは C++ では一般的です。 |
| D) | はい。ただし、これは一般的な C++ の使用方法ではありません |
| E) | このコマンドは正常に実行されますが、何も出力されません。これは、 初期化されません。 |
| F) | setName()、setColor()、setWeight() を メソッドを呼び出せます。 |
ボーナス質問
質問 1)以下の出力はどのようなものになりますか?
#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;
}
質問 2)Apple クラスが存在し、初期化されていると仮定して、次の文について考えてみましょう。Apple クラスには color_ インスタンス変数があります。
Apple* granny_smith = new Apple;
次の説明のうち該当するものをすべて選択してください。
| A) | Apple* granny_smith = NULL;if (granny_smith == NULL)...これは問題ではありません。NULL はこの方法でチェックできる値ではありません。 |
| B) | Apple* granny_smith, fuji;これは、Apple オブジェクトへの 2 つのポインタを宣言します。 |
| C) | granny_smith 変数には、Apple オブジェクトに関連付けられたインスタンス変数値が含まれます |
| D) | Apple* granny_smith = NULL;問題ありません。 |
| E) | granny_smith 変数には Apple オブジェクトのアドレスが含まれる |
| F) | string gs_color = *(granny_smith.get_color());このステートメントは granny_smith オブジェクトの色を返します(初期化済みの場合)。 |
| G) | 新しい Apple オブジェクトのストレージがヒープに割り当てられる |
| H) | 新しい Apple オブジェクトのストレージがランタイム スタックに割り当てられる |
| I) | int* a = &b;これにより、b のアドレスが a に格納されます。 |
質問 3)次のプログラムではどのような出力が得られますか?
#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;
}
理解度チェックの解答
答えを見ずに上記の質問をすべて完了するようにしてください。すぐに回答シートにジャンプしてサポートを求めるよりも、誰かに助けを求める方が効果的です。
上記の問題への回答はこちらでご確認いただけます。