変数を利用した表示
ここまでのプログラムでは、計算式を書いてただ表示するだけでしたが、ここからはより効率的な書き方を学びます。
変数を準備する
何度も同じ値を使う時や、複雑な計算をするときに一時的な値を入れておく箱をイメージしてください。これを用いることで無駄な部分が無くなります。値を記憶する箱のことを変数(variable)と言います。
C言語では、どのように利用するか以下のサンプルで確認しましょう。
#include <stdio.h>
int main(){
/*変数を用意*/
int total; //①
total = (10*8+15*5)*105/100; //②
/*10000でのお釣り表示*/
printf("10000: %d\n", 10000-total); //③
/*5000でのお釣り表示*/
printf("5000: %d\n", 5000-total);
/*1000でのお釣り表示*/
printf("1000: %d\n", 1000-total);
return(0);
}
①変数を宣言する
ここの部分は、変数宣言と呼ばれる部分で、値を記憶する箱である変数を記述する部分です。以下のように記述します。
■変数宣言の記述方法 [変数の種類] [変数の名前];
このプログラムでは、totalというのが「変数の名前」にあたり、作成者が名前をつけます。「変数の種類」は、入れたい値が整数なのか、小数なのか文字なのかを指定するものです。種類のことを型またはデータ型といいます。ここでは、整数値なので、intという整数の型を指定しています。他にも、実数を扱うfloatやdoubleといった型があります。
同じデータ型の変数を複数用意したいときには、それぞれ別の行に記述してもいいですが、カンマで区切って記述することもできます。
■同じデータ型の変数を複数用意する場合 [変数の種類] [変数の名前1], [変数の名前2], [‥‥‥];
このように変数に値を代入する前には変数宣言をしなくてはいけません。
②変数に値を代入
②の部分は、①で宣言した変数に値を入れて記憶させています。「変数名=数値」と書くことで、変数に値を記憶させることができます。これを、変数に値を代入するといいます。「=」は数学では、イコール記号と同じですが、プログラムでは、代入するという意味になります。例えば、以下のように書くとします。
a = 1000;
a = a + 1000;
この場合、最初のaには1000を代入しますが、2行目のaは、変数aに記憶されている1000に1000を足してそれを、左辺のaに代入しなおす形になります。「値に記憶している変数にさらに値を足す」という記述です。よく使われる記述なので、覚えておくと良いでしょう。
③変数を使って計算し、結果を表示する
③の部分は、printf()で、カンマ(,)のあとに「1000-変数名」と記述しています。変数totalには計算した整数値が入っています。変数に入っている値で計算が処理され、%dの位置に結果が表示されます。
データ型の種類と詳細
ここでは、C言語の型についてまとめています。また、printf()での変換仕様と共に表にしています。
型の名称と読み方 | 変数の取り得る値 | printf()での変換仕様 | 備考 |
int (イント) | 整数値 | %d | 最大(小)値はコンパイラによって異なる |
long int (ロングイント) | 整数値 | %ld | 最大(小)値はコンパイラによって異なる |
float (フロート) | 実数値 (小数を含む) | %f | |
double (ダブル) | 実数値 (小数を含む) | %lf | 値の精度はfloatの約2倍 |
char (キャラ) | 文字 | %c | 1文字を記憶できる |
short int (ショートイント) | 整数値 | %d | long int よりも小さい範囲の値を格納できる |
unsigned int (アンサインドイント) | 0以上の正の整数 | %d | 最大値は、intの約2倍 |
unsigned long int (アンサインドロングイント) | 0以上の正の整数 | %ld | 最大値は、long intの約2倍 |
printf()で数値を表示するときには、桁を揃えて表示することや、整数部何桁+小数部何桁といった表示する桁の調整も可能です。
整数の桁を揃える方法
整数の桁を揃えるときには、何桁を表示するのかあらかじめ決めれます。3桁表示するなら、以下のように記述します。
printf("%3d", 99);
%とdの間に数値が入っていますが、表示する桁数を表しています。3桁の表示をして、99のように2桁以下の数値を出力した場合、左に空白が入ります。指定の桁以上の表示をするときは、右に溢れて表示されるので、注意が必要です。
実数の桁の調整
小数部値を含んだ値ー実数を表示するときは、整数部何桁+小数部何桁と表示する場合があります。例えば、整数3桁+小数2桁と表示したいときは、全体の桁数を小数点を1と数え、1+3+2=6として記述します。
printf("%6.2lf", 32.456);
表示する数値が指定の桁数未満なら、左に空白が入ります。小数部分が指定の桁以上ある場合は、その下の数値は四捨五入して表示されます。桁数以上の表示では、右にあふれてしまいます。
プログラムを実行中に結果を得る
プログラムを実行しているときに、値を入力し、その入力された値を利用する場合があります。そのような処理について説明していきます。
プログラムで値の入力をする
プログラム実行中に値を入力できるようにするには、「変数に値を読み込む」という処理を行います。まずは、整数値を入力し、入力した値を表示するサンプルを実行しましょう。
#include <stdio.h>
int main(){
/*整数値の読み込み*/
int num;
scanf("%d", &num); //整数値を変数numに読み込む
printf("result[%d]\n", num); //numの値を表示する
return(0);
}
このプログラムを実行すると、入力待ち状態になり、そこで数値を入力、改行すると、実行結果のように値を表示してくれます。
入力を受ける関数scanf()の詳細
ここでは、scanf()の使い方について説明していきます。
■scanf()の使い方 scanf("%○", &変数名,‥‥‥, &変数名); ・%○にはprintf()で利用した変換仕様%dや%fなどをつけて記述する ・変数名を読み込むときは、変数名の先頭に&をつけて記述する
実際のコードを見ながら考えていきましょう。
int num1, num2; //int型の変数num1とnum2を用意
float num3; //float型の変数num3を用意
double num4; //double型の変数num4を用意
scanf("%d %d", &num1, &num2); //①
scanf("%d:%d", &num1, &num2); //②
scanf("%f %lf", &num3, &num4); //③
①の部分は、2つの整数値を読み込む場合の記述です。%dと%dの間に空きを入れて記述しなければなりません。[整数値][空き][整数値]のようにする必要があります。
②の部分も、2つの整数値を読み込む場合の記述です。この記述の場合は、%dと%dの空きを[整数値][:][整数値]としなければなりません。
③の部分は、2つの実数値を読み込む場合の記述です。実数値を扱う%fと%lfを使っており、他同様、間には空きを記述しています。
キャストの利用
色々な計算をする場合に、はじめは整数型で用意していた変数を、ここの計算のときだけ、小数を含んだ計算に利用したいということがあると思います。そんな時に「そのときだけこの値を小数とみなす」とする記述方法があります。以下のような場合です。
total = (int)((double)a * 110 / 100);
上の例では、「(double)a」とすると、変数aを一時的にdouble型で宣言されたものとして扱えます。これをさらに応用して「(int)(式)」という外側の囲みでは、式の計算結果の「値」を整数に変換しています。ただし、実数から整数に変換したときは小数以下は四捨五入されます。
このように「(変数の型)値」とする記述方法をキャスト(cast)といい、複雑な計算をするときに便利です。