LoginSignup
0
0

C++クイズ!

Posted at

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

以下のプログラムを動かしました。何が出力されますか? また、そこから推測されるfunc1func2の違いは何でしょうか?

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0