今回は式の計算や変数についてイチから解説していきます。C++初心者の方でも分かるように、丁寧に説明していきます。
整数の計算結果を出力しよう
和を求める
まずは2つの整数の和を計算して表示する方法を見ていきます。
// 2つの整数1と4の和を計算して表示 #include <iostream> int main() { std::cout << "1 + 4は " << 1 + 4 << " です。\n"; }
1 + 4 は 5 です。
演算(計算)を行う+などの記号を演算子といいます。
いろいろな計算結果を求める
次に、足し算以外の計算をしますが、掛け算(×)や割り算(÷)の記号は全角文字です。代わりに掛け算には*(アスタリスク)演算子、割り算には/(スラッシュ)演算子を用います。
// 2つの整数の演算結果を表示 #include <iostream> int main() { std::cout << "1 - 4 は " << 1 - 4 << " です。\n"; std::cout << "2 * 3 は " << 2 * 3 << " です。\n"; std::cout << "6 / 3 は " << 6 / 3 << " です。\n"; std::cout << "6 / 4 は " << 6 / 4 << " です。\n"; std::cout << "6 % 4 は " << 6 % 4 << " です。\n"; std::cout << "(2 + 3) * 2 は " << (2 + 3) * 2 << " です。\n"; std::cout << "2 + 3 * 2 は " << 2 + 3 * 2 << " です。\n"; }
1 - 4 は -3 です。 2 * 3 は 6 です。 6 / 3 は 2 です。 6 / 4 は 1 です。 6 % 4 は 2 です。 (2 + 3) * 2 は 10 です。 2 + 3 * 2 は 8 です。
10行目では 「6 / 4 は 1です。」となってますが、1.5が正解ですね。「整数 / 整数」では小数点以下が切り捨てられます。11行目の%演算子では、割り算のあまりを求めます。
13行目は、( )の中身が優先的に計算されています。( )がない14行目では 3 * 2 が先に計算されています。
上記で作成したプログラムの不便なところは、1と4以外の数値の和を計算できない点にあります。今は短いプログラムなので数値の変更が簡単ですが、プログラムの行数が増えていくと変更点が多くなり、ミスしやすくなります。そこで、変数を使っています。
変数
上記で作成した2つの整数の和の計算をするプログラムを、変数を使用して書き換えていきます。
// 2つの整数値xとyの和を計算して表示 #include <iostream> int main() { int x; int y; x = 1; y = 4; std::cout << "xとyの和は" << x + y << "です。\n"; }
xとyの和は 5 です。
順番に見ていきます。
7、8行目は、今から x, y の変数を使いますよという宣言をしています。int(イント)は整数の意味であるintegerの略です。intという型で宣言された x, y には整数値のみ持たせることができます。
10、11行目は、xに1, yに4を代入しています。
次のように、宣言と代入を同時に行うこともできます。
// 2つの整数値xとyの和を計算して表示(変数を初期化) #include <iostream> int main() { int x = 1; int y = 4; std::cout << "xとyの和は" << x + y << "です。\n"; }
宣言時に値を代入することを初期化といいます。
変数の初期値を設定せずに使用すると、不定値が入ります。
// xとyを表示(不定値) #include <iostream> int main() { int x; int y; std::cout << "xの値は" << x << "です。\n"; std::cout << "yの値は" << y << "です。\n"; }
xの値は 6386 です。 yの値は 4255 です。
reptitを使用してプログラミングをする場合は、変数の宣言時に勝手に0で初期化されますが、変数を使用するときは初期値を設定することを習慣づけましょう。
変数の値を変更する
変数は初期化した後に値を変更することもできます。
// int型の変数xの値を変えてみる #include <iostream> int main() { int x = 0; // 変数xを0で初期化 x += 3; // x = x + 3 と同じ std::cout << "x += 3 は " << x << " です。\n"; x++; // x = x + 1 と同じ std::cout << "x++ は " << x << " です。\n"; x = x * 2 + 3; std::cout << "x = x * 2 + 3 は " << x << " です。\n"; }
x += 3 は 3 です。 x++ は 4 です。 x = x * 2 + 3 は 11 です。
9行目では、xの値に3を足してからxに代入しており、x = x + 3と同じ意味です。
12行目は、xに1を足してxに代入しています。xから1を引いて代入する演算子の x– もあります。
15行目は、数学の方程式のように解くとx=-3になりますが、プログラムでは「xを2倍して、3を足す」処理が行われるので注意が必要です。
変数の値を変更させない
変数の型の前にconstを付けると初期化時以外、値が絶対に書き換わらなくなります。「変更させてはいけない変数が知らずしらずのうちに変更されてた」なんてことが起こるのを防いでくれます。
int main() { const int x = 0; x += 3; //エラー }
実数を扱おう
int型で扱えない小数部を持つ実数はdoubleという型で扱えます。実際にdouble型を使ったプログラムを見ていきましょう。
// 2つの実数値xとyの計算 #include <iostream> int main() { double x = 3.5; double y = 7.25; std::cout << "x + y は " << x + y << " です。\n"; std::cout << "x - y は " << x - y << " です。\n"; std::cout << "x * y は " << x * y << " です。\n"; std::cout << "x / y は " << x / y << " です。\n"; // std::cout << "x % y は " << x % y << " です。\n"; // エラーとなるためコメントアウト }
x + y は 10.75 です。 x - y は -3.75 です。 x * y は 25.375 です。 x / y は 0.482759 です。
割り算のあまりを求める%演算子は整数型でないと使用できません。
型を宣言しない型推論
変数宣言のときに型を明示的に指定しなくてもautoを使うと、右辺の値から型を推論します。
#include <iostream> int main() { auto x = 1; auto y = 2.4; std::cout << "xの値は" << x << "です。\n"; std::cout << "yの値は" << y << "です。\n"; }
xの値は1です。 yの値は2.4です。
どんな型が推論されたのかを確認するには次のように追記して下さい。
#include <iostream> #include <typeinfo> int main() { auto x = 1; auto y = 2.4; std::cout << "xの値は" << x << "です。\n"; std::cout << "yの値は" << y << "です。\n"; std::cout << "xの型は" << typeid(x).name() << "です。\n"; std::cout << "yの型は" << typeid(y).name() << "です。\n"; }
xの値は1です。 yの値は2.4です。 xの型はiです。 yの型はdです。
「xの型はiです。」のiはint型、「yの型はdです。」のdはdouble型を表しています。
値の入力
値の入力にはcinを使います。冒頭で行った整数の和の計算を、今度は値を入力して行います。
// 2つの整数を読み込んで和を計算してから表示 #include <iostream> int main() { int x; int y; std::cout << "xとyの和を求めます。\n"; std::cout << "xの値:"; std::cin >> x; std::cout << "yの値:"; std::cin >> y; std::cout << "xとyの和は" << x + y << "です。\n"; }
xとyの和を求めます。 xの値:6 yの値:7 xとyの和は13です。
値は半角で入力してください。
この記事のまとめ
- 掛け算:*演算子
- 割り算:/演算子(「整数 / 整数」は小数部を切り捨て)
- 余り:%演算子(整数型のみ使用可能)
- 変数は宣言してから使う
- 変数には、= を使って値を代入(例外:x++,x–)
- x = x * 2 + 3;などは方程式でなく、代入を意味する
- const:変数の書き換え禁止
- auto:型推論