C++クイズ!
これはC++の基本的な文法を勉強するためのクイズです。解答は乗せませんので、分からないものがあったら、実際にそのコードを動かして確認してみましょう。
超初級
Q.1 入出力、その1
以下のプログラムを動かしました。何が起こるでしょうか?
#include <iostream>
int main(void) {
int a = 2;
double pi = 3.14;
std::cout << "Hello World!\n";
std::cout << a << "\n";
std::cout << pi << "\n";
return 0;
}
Q.2 入出力、その2
以下のプログラムを動かして、10と入力しました。何が出力されますか?
#include <iostream>
int main(void) {
int a;
std::cin >> a;
a *= 2;
std::cout << a << "\n";
return 0;
}
Q.3 入出力、その3
以下のプログラムを動かして、10と入力し、続いて20と入力しました。何が出力されますか?
#include <iostream>
int main(void) {
int a, b, c;
std::cin >> a >> b;
c = a + b * 2;
std::cout << "a=" << a << ";b=" << b << "\n";
std::cout << c << "\n";
return 0;
}
初級
Q.4 関数
以下のプログラムを動かしました。何が出力されますか?
#include <iostream>
int func(int x, int y) {
return x * y;
}
int main(void) {
int a = 2, b = 5;
int c = func(a, b);
std::cout << c << "\n";
return 0;
}
Q.5 構造体
以下のプログラムを動かしました。何が出力されますか?
#include <iostream>
struct Point {
int x;
int y;
};
int main(void) {
Point point = {2, 3};
std::cout << point.x << "," << point.y << "\n";
point.x = 4;
std::cout << point.x << "," << point.y << "\n";
point = {10, 20};
std::cout << point.x << "," << point.y << "\n";
return 0;
}
Q.6 クラス、その1
以下のプログラムを動かしました。何が出力されますか?
#include <iostream>
class Data {
public:
Data(int a, int b) {
a_ = a;
b_ = b;
}
int sum() { return a_ + b_; }
int mul() { return a_ * b_; }
private:
int a_;
int b_;
};
int main(void) {
Data data(2, 3);
std::cout << "sum=" << data.sum() << "\n";
std::cout << "mul=" << data.mul() << "\n";
return 0;
}
Q.7 クラス、その2
以下のプログラムを動かしました。何が出力されますか? また、SetA
関数とSetB
関数は別の書き方をしていますが、それぞれのメリット/デメリットは何でしょうか?
#include <iostream>
class Data {
public:
Data(int a, int b) {
a_ = a;
b_ = b;
}
void SetA(int a){a_ = a;}
void SetB(int);
int sum() { return a_ + b_; }
int mul() { return a_ * b_; }
private:
int a_;
int b_;
};
void Data::SetB(int b){b_ = b;}
int main(void) {
Data data(2, 3);
std::cout << "sum=" << data.sum() << "\n";
std::cout << "mul=" << data.mul() << "\n";
std::cout << "\n";
data.SetA(5);
std::cout << "sum=" << data.sum() << "\n";
std::cout << "mul=" << data.mul() << "\n";
std::cout << "\n";
data.SetB(8);
std::cout << "sum=" << data.sum() << "\n";
std::cout << "mul=" << data.mul() << "\n";
return 0;
}
Q.8 クラス、その3
以下のプログラムはエラーが起きます。どんなエラーメッセージが出力されますか?
#include <iostream>
class Data {
public:
Data(int a, int b) {
a_ = a;
b_ = b;
}
int sum() { return a_ + b_; }
private:
int mul() { return a_ * b_; }
int a_;
int b_;
};
int main(void) {
Data data(2, 3);
std::cout << "sum=" << data.sum() << "\n";
std::cout << "mul=" << data.mul() << "\n";
return 0;
}
中級
Q.9 参照、その1
以下のプログラムを動かしました。何が出力されますか? また、この結果から推測して、変数a
と変数c
の関係性はどうなっていますか? 言い方を変えると、変数b
と変数c
の違いは何でしょうか?
#include <iostream>
int main(void) {
int a = 2;
int b = a;
std::cout << a << "," << b << "\n";
b = 3;
std::cout << a << "," << b << "\n";
std::cout << "\n";
int& c = a;
std::cout << a << "," << c << "\n";
c = 4;
std::cout << a << "," << c << "\n";
return 0;
}
Q10 参照、その2
以下のプログラムを動かしました。何が出力されますか? Q.9とやっている事は同じなので、予想がつくかもしれませんが、自信が無ければ確認しておきましょう。
#include <iostream>
struct Point {
int x;
int y;
};
int main(void) {
Point a = {2, 3};
Point b = a;
std::cout << "a=" << a.x << "," << a.y << "\n";
std::cout << "b=" << b.x << "," << b.y << "\n";
b.x = 10;
std::cout << "a=" << a.x << "," << a.y << "\n";
std::cout << "b=" << b.x << "," << b.y << "\n";
std::cout << "\n";
Point& c = a;
std::cout << "a=" << a.x << "," << a.y << "\n";
std::cout << "c=" << c.x << "," << c.y << "\n";
c.x = 100;
std::cout << "a=" << a.x << "," << a.y << "\n";
std::cout << "c=" << c.x << "," << c.y << "\n";
return 0;
}
Q.11 参照渡し、その1
以下のプログラムを動かしました。何が出力されますか? また、そこから推測されるfunc1
とfunc2
の違いは何でしょうか?
#include <iostream>
void func1(int x, int y) {
x = 0;
y = 0;
}
void func2(int& x, int& y) {
x = 0;
y = 0;
}
int main(void) {
int a = 2, b = 5;
func1(a, b);
std::cout << a << "," << b << "\n";
std::cout << "\n";
func2(a, b);
std::cout << a << "," << b << "\n";
return 0;
}
Q.12 参照渡し、その2
以下のプログラムを動かしました。何が出力されますか? Q.11とやっている事は同じなので、予想がつくかもしれませんが、自信が無ければ確認しておきましょう。
#include <iostream>
struct Point {
int x;
int y;
};
void func1(Point p) {
p.x = 0;
p.y = 0;
}
void func2(Point& p) {
p.x = 0;
p.y = 0;
}
int main(void) {
Point a = {2, 3};
std::cout << a.x << "," << a.y << "\n";
func1(a);
std::cout << a.x << "," << a.y << "\n";
std::cout << "\n";
std::cout << a.x << "," << a.y << "\n";
func2(a);
std::cout << a.x << "," << a.y << "\n";
return 0;
}
上級
以下のプログラムを動かしました。何が出力されますか? 特に最後のoutputに着目して、変数y
と変数z
の違いを理解しましょう。
#include <iostream>
class Data {
public:
Data(int a, int b) {
a_ = a;
b_ = b;
}
int a();
int& b();
void output();
private:
int a_;
int b_;
};
int Data::a() { return a_; }
int& Data::b() { return b_; }
void Data::output() {
std::cout << "a=" << a_ << "\n";
std::cout << "b=" << b_ << "\n\n";
}
int main(void) {
Data data(2, 3);
data.output();
int x = data.a();
x = 5;
data.output();
int& y = data.b();
y = 10;
data.output();
int z = data.b();
z = 15;
data.output();
return 0;
}