★処理★


さて、ここからが非常に重要になってくる部分です。

最初に書きましたが、コンピュータでは「入力」したデータを「処理」した結果を「出力」することで動いています。

この「処理」の部分で何をするかで、プログラム(ソフトウェア)が変わります。

同じ「30」とう数値を「入力」しても、それが「30人」を表すのか「30km」を表すのか「30番」を表すのか、「30点」を表すのかデータの意味によって「処理」が変わります。

世の中で動作しているソフトウェアすべての「処理」を書き出すことは不可能ですから、基本的なことについて説明をしていきます。(それでも膨大ですが・・・)


★計算処理1★


まずは、コンピュータの得意分野である、計算について説明します。

皆さんも良くご存知の四則演算のやり方から書いていきます。

C言語では、+、−、×、÷といった計算は当然できますが、数学で使う記号(演算子)と一部違いがあります。

数学での演算子 C言語での演算子
×
÷

「×」は「*(アスタリスク)」と書き、「÷」は「/(スラッシュ)」と書きます。

※キーボードを見ると「×」や「÷」は無いですよね(x「エックス」はありますが・・・)

また、整数での計算に「剰余(余り)」というものがあります。

「剰余」の演算子は「%(パーセント)」です。

「余り」って何に使うの?と思う方もいらっしゃるかも知れませんが、これが結構使うのです。

とりあえず、今回はやり方だけ。

最初は、入力せずに計算結果だけを表示します。


<sample program 004-01>

#include <stdio.h>

int main(void)
{
    printf("%d\n", 12 + 5);

    printf("%d\n", 12 - 5);

    printf("%d\n", 12 * 5);

    printf("%d\n", 12 / 5);

    printf("%d\n", 12 % 5);

    return 0;
}

<実行結果>

17
7
60
2
2
続行するには何かキーを押してください・・・

普通に数値と数値の間に演算子を入れるだけです。

実行結果を見て「あれ?」と思った方もいると思います。

除算の結果が「2.4」ではなく「2」になっています。

何度も書いていますが、「%d」とは10進整数のことですから、小数点以下は切り捨てられます。(四捨五入ではないです)

では、「%d」を「%f」に書き換えて見ましょう。


<sample program 004-02>

#include <stdio.h>

int main(void)
{
    printf("%d\n", 12 + 5);

    printf("%d\n", 12 - 5);

    printf("%d\n", 12 * 5);

    printf("%f\n", 12 / 5);

    printf("%d\n", 12 % 5);

    return 0;
}

<実行結果>

17
7
60
0.000000
2
続行するには何かキーを押してください・・・

今度は「0.000000」になりました・・・なぜでしょう。

これは、数値に原因があります。

「12」や「5」といった数値は「定数」といいます。「変数」が変化可能な数値に対して「定数」は変化しない(定まった)数値です。

この「定数」は整数であれば自動的に「int型」、小数であれば自動的に「double型」とみなされます。

つまり「12」と「5」は整数のため、除算もint型(整数)として行われます。

int型(整数)同士の除算は、小数点以下切捨てとなります。

たとえ「%f」で表示したとしても、double型ではないので、正しい結果は得られません。

では、さらに書き換えてみます。


<sample program 004-03>

#include <stdio.h>

int main(void)
{
    printf("%d\n", 12 + 5);

    printf("%d\n", 12 - 5);

    printf("%d\n", 12 * 5);

    printf("%f\n", 12.0 / 5.0);

    printf("%d\n", 12 % 5);

    return 0;
}

<実行結果>

17
7
60
2.400000
2
続行するには何かキーを押してください・・・

「定数」を小数(double型)にすることで、正しい結果が表示されました。

では、除算は常に小数(doubleやfloat型)で行うべきなのでしょうか?

C言語では、「整数の除算は小数点以下切捨て」というルールをうまく使ってプログラムすることもあります。

後々、そういったプログラムも登場しますので、覚えておいてください。


では、次に「変数」を使った計算をやってみます。

プログラムの前に代入演算子について説明しなければなりません。

代入演算子は、その名の通り、「変数」に「何かを」代入するための演算子です。

演算子は「=(イコール)」を使います。

数学などの世界では、「=」演算子は、

  12 + 5 = ?

といった具合に、答えの前に書いたり、

  x = 5

といった具合に、「等しい」という意味で使います。

しかし、C言語での「=」演算子は、代入するという意味しかありません


<sample program 004-04>

#include <stdio.h>

int main(void)
{
    int data = 34;

    printf("%d\n", data);

    return 0;
}

<実行結果>

34
続行するには何かキーを押してください・・・

「変数の宣言」のところで、「34」を代入しています。

これを使って、


<sample program 004-05>

#include <stdio.h>

int main(void)
{
    int data = 5;

    printf("%d\n", 12 + data);

    printf("%d\n", 12 - data);

    printf("%d\n", 12 * data);

    printf("%d\n", 12 / data);

    printf("%d\n", 12 % data);

    return 0;
}

<実行結果>

17
7
60
2
2
続行するには何かキーを押してください・・・

最初のプログラムと同じ結果が表示されるはずです。

変数だけを使って、


<sample program 004-06>

#include <stdio.h>

int main(void)
{
    int data1 = 12;
    int data2 = 5;

    printf("%d\n", data1 + data2);

    printf("%d\n", data1 - data2);

    printf("%d\n", data1 * data2);

    printf("%d\n", data1 / data2);

    printf("%d\n", data1 % data2);

    return 0;
}

<実行結果>

17
7
60
2
2
続行するには何かキーを押してください・・・

と書いても同じ結果が得られます。

ただ、このプログラムでは、「12」や「5」という数値を変更しなければ、常に同じ結果が表示されるだけです。

「入力」をうまく使って次のように書き換えます。


<sample program 004-07>

#include <stdio.h>

int main(void)
{
    int data1;
    int data2;

    scanf("%d", &data1);
    scanf("%d", &data2);

    printf("%d\n", data1 + data2);

    printf("%d\n", data1 - data2);

    printf("%d\n", data1 * data2);

    printf("%d\n", data1 / data2);

    printf("%d\n", data1 % data2);

    return 0;
}

<実行結果>

12
5
17
7
60
2
2
続行するには何かキーを押してください・・・

実行結果の「12」と「5」はキーボードから「入力」した数値(エコーバック)です。

何度か実行して、色々な値を打ち込んで見ましょう。

<sample program 004-06>で変数に代入を行いましたが、<sample program 004-07>では代入を行っていません。

最初に値を代入しなくても、scanfで入力されるので問題ありませんが、何も代入されず、入力もされない変数には最初何が入っているのでしょう?


<sample program 004-08>

#include <stdio.h>

int main(void)
{
    int data;

    printf("%d\n", data);

    return 0;
}

<実行結果>


Debug Error!


あらら、止まってしまいました。

Visual Studioでは、初期値が入っていない変数(何も代入されず、入力もされない変数)を使おうとしたり、表示しようとするとエラーになります。

※古いバージョンのVisual Studioでは、訳の分からない数値が表示されていました。

要するに、何も代入されず、入力もされない変数の中身は「不定(決まっていない)」のです。

他の言語では、0(ゼロ)が自動的に入るものもありますが、C言語では「不定」です。(一部そうでないものもありますが後々書きます)


次へ

戻る

目次へ