サイトマップ / C言語講座出入り口総目次目次:入出力(1)>浮動小数点数の入力

青い直線

浮動小数点数の入力

青い直線

[文字を入力して画面に表示]←このソース→[printf( )とscanf( )の戻り値]

/* 浮動小数点数の入力と表示 */

/* 今回は二つの浮動小数点数を入力し、その合計と平均を表示します。 */

/* ここからソースプログラム */

#include <stdio.h>

void main(void);

void main(void)
{
        double x1, x2, total;    /* double 型の浮動小数点数を宣言 */


        printf("浮動小数点数を入力して下さい。 ");
        scanf("%lf", &x1);

        printf("\n浮動小数点数を入力して下さい。 ");
        scanf("%lf", &x2);

        printf("\n\n");          /* 2行改行 */

        total = x1 + x2;         /* x1 と x2 の合計を total に代入 */
                                 /* 合計と平均を表示 */
        printf("合計 = %lf  平均 = %lf\n", total, total / 2.0);	
}

/* ここまでソースプログラム */

/* 浮動小数点数を宣言するには、下記のようにします。

    double x1, x2, total;    // double型の浮動小数点数を宣言

これで、三つのdouble型の局所変数が、メモリに割り当てられました。このように、一度に複数の変数を宣言することが可能です。このことは、既に学んだ、char型やint型の変数についても、勿論、当てはまります。

浮動小数点数にはdouble型以外に、float型もあります。float型はdouble型よりも、メモリを必要としません。多くのシステムで、float型は4バイト、double型は8バイトのメモリを必要とします。double型はメモリを多く必要としますが、その分、float型に比べて精度が高くなります。float型の計算では、double型に変換してから計算し、計算結果をfloat型に変換し直します。従って、その分、計算に時間がかかります。float型はメモリの貴重な時代には意味があったかも知れませんが、メモリが安くなった現代では、変換のため計算に余分な時間がかかるだけで無用の型です。本講座では、float型を実際に使うことはありません。

double型の変数に、キーボードから値を入力します。

    scanf("%lf", &x1);

"%lf"はキーボードから入力された値を、double型の浮動小数点数に変換せよという意味です。いずれ詳しく説明しますが、"%lf"の中の'lf'を書式指定子といいます。'%'は次に書式指定子がくることをコンパイラに教える合図のようなものです。'l'は'long'を略したもので、変数のサイズが大きいことをコンパイラに教えます。最後の'f'は'float'の略で浮動小数点数(float)に変換せよということです。

int型の整数入力の際と同様に、x1の頭に'&'が付いています。もう一度説明すると、x1はコンピュータのメモリのどこかに存在します。その場所を示すのがアドレスです。&x1はx1のアドレスを指しています。ここでは、x1の存在する場所に、キーボードから入力したdouble型の浮動小数点数をしまいます。

scanf( )の呼び出しで'&'を忘れると、他の変数等の使っているメモリにデータを書き込んで、データを破壊する可能性があります。最悪の場合、システムが破壊され暴走します。これは浮動小数点数に限らず、整数にも当てはまります。

重要:scanf( )で整数や浮動小数点数を入力する時には、変数の頭に'&'を付ける。

    printf("\n\n");    // 2行改行

ソースプログラム中に上記のコードがあります。" "の中には書式指定子はありませんが、改行コードが二つあります。これで、2行改行されます。

算術演算子

    total = x1 + x2;    // x1とx2の合計をtotalに代入

ソースプログラム中の上記のコードを良く見て下さい。'='と'+'という数学(算数)で使われる演算子が出て来ました。'+'は算術演算子で数学と同じ使い方をします。'='は数学では等号で、左辺と右辺が等しいことを示しますが、C言語では代入演算子です。右辺の値を左辺に代入します。数学と違う使い方をするので、注意して下さい。

例えば、nが整数だとして、下記のコードはnの値を1増加させることになります。

    n = n + 1;

重要:'='は代入演算子で、右辺の値を左辺に代入する。

これから、様々な演算子が出て来ますが、演算子の前後に一つずつスペースを入れると、ソースプログラムが見やすくなります。

浮動小数点数を画面に表示するには、下記のようにします。

    printf("%lf\n", x1);

scanf( )の時の"%lf"とよく似ています。しかし、意味が少し違います。x1を浮動小数点数に変換して画面に出力します。こちらは&は不要です。

main関数の{ }の中の最後の2行を下記に示します。

                 // 合計と平均を表示
    printf("合計 = %lf  平均 = %lf\n", total, total / 2.0);

今までの printf( )に比べて複雑な構造をしているので、少し説明を加えます。最初の引数である" "の中を見て下さい。合計やスペース等号などの文字はそのままコンソールに出力されます。" "の中には二つの書式指定子があります。このように複数の書式指定子を記述できます。その時は" "の中の書式指定子の数と、それに続く引数の数が一致しなければいけません。また書式指定子が指示する変換の型と、それに続く引数の型が完全に一致しなければいけません。上記のコードでは、二つのdouble型の変数をコンソールに表示させています。

printf( )の最後の引数を下記に示します。

    total / 2.0

'/'は算術演算子でdouble型の変数totalを'2.0'で割るということです。'/'は数学と同じ使い方をします。引数には変数だけでなく、このように演算を含めることも可能です。また、関数を引数にすることもできます。そのような例はいずれ出てきます。

'2.0'と記述しないで'2'としたらどうでしょう。ほとんどのコンパイラで問題なくコンパイルできるはずです。しかし、totalはdouble型の変数なので、double型の変数同志の計算だということを、明示的に示すこのような記述の仕方が推奨されています。

printf( )は頻繁に使われる標準ライブラリ関数ですが、今回見てきたように、可変個の引数を取ることができます。コンパイラにはその行をコンパイルするまで、幾つの引数を取るかわかりません。 */

[文字を入力して画面に表示]←このソース→[printf( )とscanf( )の戻り値]

青い直線

/* (C) 2000- YFプロ. All Rights Reserved. */    提供:C言語講座−それ自体コンパイルできる教材を使った講座です−

青い直線

サイトマップ / C言語講座出入り口総目次目次:入出力(1)>浮動小数点数の入力