変数

コンピュータ(プログラム)に入力された値は一時的にメモリに記録する必要があります。メモリの特定領域を確保して、指定した名前でアクセスするための仕組みが変数です。

変数は、そのデータ型(整数、浮動小数点、文字、など)と名前の組で宣言をする必要があります。たとえば、1つの整数データを保持することができる x という名前の変数は以下のように宣言します。

int x;

代入演算

変数の役割は、プログラムで扱う値をメモリへ書き込み、必要な時に参照することです。最も基本となる代入演算では = の左側の変数(メモリ領域)に、右側の式の計算結果が書き込まれます。変数はその名の通り「変わる数」で、代入演算などによって値を何度でも変更することができます。一方、式の中に含まれる変数は、それが指すメモリ領域の値を返します。たとえば次のプログラムは、変数a, b にそれぞれ5, 8 を格納し、その後それらの中身を交換するプログラムです。

int main(){
  int a, b, t; // 3つの整数を宣言
  a = 5;       // a に 5 を格納 
  b = 8;       // b に 8 を格納 
  t = a;       // t に a の値を格納 
  a = b;       // a に b の値を格納、この直後 a の値は 8 になる
  b = t;       // b に t の値を格納、この直後 b の値は 5 になる

  return 0;
}

算術演算

プログラミングの目的はコンピュータに計算をさせることです。計算の最も基本となるものが算術演算です。定数、変数、関数などに対して算術演算を行い計算式を記述します。四則演算はそれぞれ、+-*/、で行います。たとえば

y = 2*a - b/c;

は、「2 × a − b ÷ c」の計算結果を y に代入するという意味になります。代入演算 = は、左辺に右辺の計算結果を代入するという意味になることに注意してください。

x の3乗は x * x * x と記述することができます。C/C++ 言語で x^3^ はべき乗のための演算子ではないことに注意してください。

標準入力

コンピュータへの最も基本的な入力の1つが標準入力です。データの入力先は主にプログラム中に宣言された変数(メモリ)になります。C++言語ではscanf関数、またはstd::cinによって標準入力を行うことができます。

scanf

scanf関数はC言語の標準入力を扱う関数です。scanf関数は以下のような形式で記述します。

scanf("入力変換指定子", &変数名);

入力変換指定子は、入力されたデータをどのように変換して対応する変数に記録するかを指定します。引数となる変数名には、入力されたデータを記録する変数を指定します。ここで、scanfの引数として変数を指定するときは、変数名の前に&を付ける必要があります。これは、関数の引数として「変数の値」を渡すのではなく、「その変数が記録されているメモリ領域のアドレス」を渡すという意味になります。

たとえば、標準入力(キーボード)から1つの整数を変数 x に読み込むには以下のように書きます。

scanf("%d", &x);

変換指定子の%d は「int型の値を10進数で読み込む」という意味になります。

std::cin

std::cin を用いて標準入力から1つの整数を変数 x に読み込むには以下のように記述します。

std::cin >> x;

std::cinで用いられるシフト演算子>>は「左にあるものを右に流し込む」という意味を持ちます。std::cinは変数へ値を記録する際に型を自動的に識別する機能を持つため、scanf関数で用いた変換指定子のようなコードを書く必要がありません。特別な事情がない限り、C++ではstd::cinを使うようにしましょう。

標準出力

標準出力に変数 x の値を出力するには以下のように記述します。

std::cout << x;

std::coutで使われる演算子<<は「右にあるものを左に流し込む」という意味を持ちます。std::coutは出力する数値の型を自動的に識別する機能を持つので、printfで用いた変換指定子を記述する必要がありません。


Reference

 

オンラインジャッジではじめるC/C++プログラミング入門 (マイナビ)

AIZU ONLINE JUDGE のコース問題を題材にした解説書です。各トピックごとに C/C++ 言語の基礎的な内容を学習し、Introduction to Programming の演習問題にチャレンジしていきます。内容は敷居の高いものではなく、プログラミング初学者が取り組む例題からスタートしています。