MMGamesロゴ  MMGames
Twitterシェアボタン  Facebookシェアボタン   
 English 

しんで覚えるC言語
しんで覚えるC言語

数値を記憶する

記憶の必要性
前章までの内容で、四則演算を使った計算ならば、どんな複雑な式も計算できます。
しかし、これで満足してしまうのは、あまりにも志(こころざし)が低すぎます。

前章までの方法では、数値は直接プログラムとして毎回書き込んでいましたが、
その時、例え同じ数値が合ったとしても、すべてバカ正直に書き込んでいました。
先ほど作成した、10+3、10-3、10×3、10÷3 を計算するプログラムでは、
10、3 と言う数値は同じなのに、何回も書き込んでいました。

つまり、この方法では、10と3 を 20と7 に代えたいと思った場合には、
すべての数値を、わざわざ書き直さなくてはならないのです。

これは、はっきり言って面倒です。
この面倒をなくすためには、数値を記憶しておく手段が必要です。
1度数値を記憶しておき、その数値を取り出して使うような方法があれば、
その記憶させる数値を代えるだけで、すべての数値を変更できます。
変数というメモリ
前項で考えたことを実現する機能がC言語には存在します。それが、変数です。
変数と聞くと、数学を思い出してイヤになる人も多いかもしれませんが、
プログラミングの変数と、数学の変数とは、まったくの別物です。

変数とは、数値を保存しておくためのメモリ領域に名前をつけることです。
これ、ほとんどの入門書では、数値を入れておく箱と説明しますが、
こんなのは、誰もコンピュータに触ったことがなかった時代の説明方法でしょう。
コンピュータをそれなりに使っている人には、メモリと言った方がすっきりします。

キーワード
【変数】

数値を記憶するメモリに名前をつけて管理する方法


コンピュータのメモリとは、横1列に膨大に並べられたロッカーのような構造です。
ロッカーの端っこから、1つ1つに番号がつけられています。
そして、コンピュータで扱われる数値は、そのロッカーのどこかに入っています。

普通ならば、そのロッカーの番号を元に、数値を入れたり出したりするのですが、
毎回毎回、長ったらしい番号をつかっていては面倒なことこの上ありません。
皆さんも、7桁の社員番号でロッカーを区別したくはないだろうと思います。

そこで、それぞれのロッカーに、名前をつけておくことにします。
こうすれば、名前を見ることで、それが何のためのロッカーなのかすぐにわかり、
また、扱いもとても簡単になると言うわけなのです。
変数の宣言
メモリに名前をつけて管理することは、前項で説明しました。
つまり、変数を使うには、その変数に名前をつけてやらなくてはいけません。

C言語では、変数に名前をつけることを、変数を宣言すると呼んでいます。
変数を宣言するには、次のような書き方を使います。

変数を宣言
型名 変数名;

型名とは、記憶しておきたい数値の種類を表す名前です。
とりあえずは、整数を意味するintを覚えておいてください。

変数名とは、その名の通り、変数につける名前のことです。
この名前のつけ方には、下のような決まりがあります。

変数名の付け方
1、半角アルファベット、半角数字、半角_を使うことができる。
2、1文字目には、数字を使うことは出来ない。
3、あらかじめ決められた予約語も使用することが出来ない。

あれ、これ、どこかでみたことがあるような気がしませんか?
そうです、これは、関数名の名前のつけ方とまったく同じなのです。

これだけのことがわかれば、変数を宣言できます。
次のプログラムは、int(整数値)という型の変数valueを宣言しています。

ソースコード
#include <stdio.h>

int main(void)
{
    int value; /* 変数宣言の部分 */
    return 0;
}

変数の宣言は、基本的に、関数の先頭でしか行うことができません。
たとえば、次のように変数を宣言することはできません。

ソースコード
#include <stdio.h>

int main(void)
{
    printf("Hello\n");
    int value; /* 変数宣言の部分 */
    return 0;
}

このプログラムは、動作させるとエラーになります。
変数宣言の部分を先頭に持ってくれば、動作するようになります。

コンパイラの機能
実は、このプログラムは多くのコンパイラでは動いてしまいます。
それは、C言語の拡張版である、C++(シープラプラ)では使えるからです。
また、近年決められたC言語の新規格であるC99でも使えます。
しかし、元々のC言語では使えないと覚えてください。

変数への値の代入
1度宣言した変数は、その範囲内では自由に使用できます。
今回はmain関数の中で宣言しているので、main関数の中では自由に使えます。
なお、当分はmain関数しか使わないので、あまり関係ありません。

変数の使い方は2種類あります。その内の1つが、代入です。
代入とは、変数に数値を記憶させることを意味しています。

キーワード
【代入】

変数に数値を記憶させること。


変数に数値を代入するには、次のような書き方を使います。

変数に数値を代入
変数名 = 数値;

絶対に勘違いしないでください。この = は、数学の等号とは、まったく別の意味の記号です。
ここでの = は、右側の数値を、左側の変数に記憶させる、ということを意味しています。
つまり、この = は ← の記号の代わりだと考えてください。

これだけのことがわかれば、変数に数値を代入する(記憶する)ことができます。
次のプログラムは、int(整数値)型の変数 value に 10 を代入します。

ソースコード
#include <stdio.h>

int main(void)
{
    int value;  /* 変数宣言の部分 */
    value = 10; /* 代入の部分 */
    return 0;
}

変数を数値の代わりに使う
変数もう1つの使い方は、数値の代わりとして使うことです。
これに関しては、とくにこれといった書き方があるわけではありません。
数式の中に変数名を書くと、その変数の記憶している数値に置き換わります。
数値の表示や計算など、今まで数式を使ってきたすべての場面で応用可能です。
次のプログラムは、変数に記憶された値を表示する例です。

ソースコード
#include <stdio.h>

int main(void)
{
    int value;             /* 変数宣言の部分 */
    value = 10;            /* 代入の部分 */
    printf("%d\n", value); /* 表示の部分 */
    return 0;
}

このプログラムの実行結果は、次のようになります。

実行結果
10

この変数を使えば、この章の先頭で取り上げた問題が解決します。
つまり、10 や 3 と言う数値を変数に記憶させてしまい、その変数で計算すれば、
数値を変更したくなったとしても、書き換える場所は1か所で済むのです。
次のプログラムは、変数を使って、四則演算の計算を行う例です。

ソースコード
#include <stdio.h>

int main(void)
{
    int left;
    int right;
    left = 10;
    right = 3;
    printf("%d\n", left + right);
    printf("%d\n", left - right);
    printf("%d\n", left * right);
    printf("%d\n", left / right);
    printf("%d\n", left % right);
    return 0;
}

このプログラムの実行結果は、次のようになります。

実行結果
13
7
30
3
1

このプログラムの良い所は、変数に代入する数値を書き換えるだけで、
後の計算の数値もすべて置き換わるので、変更が1回で済むと言う点にあります。
実際に、left,right に代入する数値を変えてみてください。
代入と演算を同時に
変数には、数式の計算結果を直接代入することが可能です。
次のプログラムでは、value には、10+30 の結果が代入されます。

ソースコード
#include <stdio.h>

int main(void)
{
    int value;
    value = 10 + 30;
    printf("%d\n", value);
    return 0;
}

このプログラムの実行結果は、次の通りになります。

実行結果
40

さらに、すでに変数が覚えている値に直接計算することも可能です。
次のプログラムは、変数valueに記憶されている数値に30を加える例です。

ソースコード
#include <stdio.h>

int main(void)
{
    int value;
    value = 10;
    value += 30;
    printf("%d\n", value);
    return 0;
}

このプログラムの実行結果は、次の通りになります。

実行結果
40

このプログラムのポイントは、+=演算子にあります。
この演算子は、左側の変数の値を、右側の数だけ増加させるという機能があります。
先ほどは、すでに代入されていた 10 に 30 を加えた値が代入されたのです。

この演算子の部分は、次のように書き換えることも可能です。

別例
value = value + 30;

この書き方は、プログラムに慣れていない人にとってはかなり奇妙な表現です。
だって、value と value+30 が等しいと書かれているのですから。
しかし、C言語では、= は←の意味であることを思い出せば解決します。
この式は、value に 30 を足した数値を value に代入するという意味なのです。

この書き方で変数の値の増加が実現できるなら、+=演算子などは不要にも思えますが、
+=演算子を使えば、変数を書くのは1つだけで良いので、記述が楽という利点があります。
同じような機能を持つ演算子は他の計算にも用意されています。

演算子 機能
+= 変数の値との加算を変数に代入
-= 変数の値との減算を変数に代入
*= 変数の値との乗算を変数に代入
/= 変数の値との除算を変数に代入
%= 変数の値との余算を変数に代入

さらに、変数の値を1増やす、あるいは1減らす、1増減専用の演算子があります。
変数の値を1増やす演算子は++演算子で、インクリメントと呼ばれます。
逆に1減らす演算子は--演算子で、デクリメントと呼ばれます。
次のプログラムは、インクリメント、デクリメントを使った例です。

ソースコード
#include <stdio.h>

int main(void)
{
    int value;
    value = 10;
    printf("%d\n", value);
    value++;
    printf("%d\n", value);
    value--;
    printf("%d\n", value);
    return 0;
}

このプログラムの実行結果は、次の通りになります。

実行結果
10
11
10

プログラミングでは、変数の値を1増やすことは非常に多いため、この演算子はよく使用されます。


本サイトについて

苦しんで覚えるC言語(苦C)は
C言語入門サイトの決定版です。
C言語の基本機能を体系立てて解説しており、
市販書籍と同等以上の完成度です。

第0部:プログラム概要編
  1. プログラムとは何か?
2章:プログラムの書き方
  1. 書き方のルール
  2. 書き方の慣習
  3. 練習問題2
3章:画面への表示
  1. 文字列の表示
  2. 改行文字
  3. 練習問題3
6章:キーボードからの入力
  1. 入力用の関数
  2. 入力の恐怖
  3. 練習問題6
9章:回数が決まっている繰り返し
  1. 繰り返しを行う文
  2. ループ動作の仕組み
  3. 練習問題9
10章:回数がわからない繰り返し
  1. 回数不明ループ
  2. 入力チェック
  3. 練習問題10
13章:複数の変数を一括して扱う
  1. 複数の変数をまとめて扱う
  2. 配列の使い方
  3. 練習問題13
20章:複数のソースファイル
  1. 最小限の分割
  2. 分割の定石
  3. 練習問題20

コメント
COMMENT

💬 コメント投稿欄を開く