#7

【C言語:連載(3)】演算処理への入り口~変数と基本的なデータ型~

こんにちは!Takuya.B(@TB_IQ)です。

今回は演算処理の入口と題して変数とデータ型について簡単に説明します。

それでは早速Let's GO!!

前回の復習

スポンサーリンク

変数とは何か?

まずはじめに、変数についてお話します。変数は具体的な数値や文字(文字列)のデータを格納することができ、これらの具体的なデータを持った変数を使って演算処理などを行います。

変数には更にグローバル変数ローカル変数に分けることができますが、本講座では当面の間、ローカル変数のみを扱って解説していきます。

そして、変数は“宣言”と呼ばれる行為をしてはじめて、プログラム上で変数として扱うことができます。宣言していない変数は使うことができません。

実際にソースコードを見て説明しましょう。下のサンプルコードを見て下さい。

//
//変数を宣言する
//

#include <stdio.h>

int main(void)
{
     int i = 3;     //変数i を int型で宣言
                        

    printf("%d\n", i);
        printf("%d\n", j);  //変数jは宣言していないので、ここでエラーが発生します!注意!
     return 0;
}

main関数に入ってすぐの所で int i = 3; の一文がありますが、これが宣言です。この場合は初期値として3という値を変数iに代入しています。初期値を代入しない場合は以下のように宣言することもできます。

//
// 一般的な宣言の仕方(こっちのほうがよく使うよ!)
//

int i;

実際にはプログラムを実行した際に、scanf()関数を使って変数に値を持たせることが多いので、こちらの宣言の方がスタンダードのように思えます。

さて、ここまでで演算処理をするためには変数を使うということはご理解頂けたかと思います。しかし、上のサンプルコードの中には意味不明な文字がありますよね?

そうです!intやら%dです。これらはデータ型やそれに伴う変換指定子(出力フォーマット指定子)と呼ばれるものですが、次にこれらについて説明します。

データ型とは

データ型とは変数に与えられる役割のようなものです。

変数には具体的な数値や文字列をもたせることができますが、自由に何でも値を持たせられるわけではありません。あらかじめ変数にはデータ型という役割が与えられるからです

たとえば、char型で宣言した変数には文字(文字列)だけ、int型で宣言した変数は整数だけ、float型で宣言した変数は実数だけ、という感じです。

※↑の説明は厳密には異なります。例えば、char型には数値を文字列として格納することが可能です。整数型の変数に実数の値を持たせることも可能です。正しくは、格納することができないのではなく、たとえ格納させたとしても、『思ったような結果を得ることができない』という説明が適切です。詳しくは次回以降の回で説明いたします。

出力指定子(変換指定子)とは

変数をprintf()関数で出力させる際には出力指定子(変換指定子)を使う必要があります。

例えば以下のコードを見てください。

//
// 出力指定子の有無による結果の違い
//

#include <stdio.h>

int main(void)
{
     int i = 3;

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

     return 0;
}

変数iに3という値を持たせて宣言しています。printf()関数で出力して欲しいのは、もちろん『3』という値です。このプログラムを実行すると結果は以下のようになります。

blogooo

このように出力指定子(今の場合だと%d)を使わないと、前回の記事のように単なる文字出力(『Hello,World!』の出力)になってしまいます。変数の値を出力する場合には必ず出力指定子(変換指定子)を使うと覚えて下さい。

※インターネット上を見ているとこの指定子のことを『出力指定子』や『変換指定子』、『出力フォーマット指定子』と読んでいますが、本講座ではしばらくの間『出力指定子』と呼ぶことにします。

ちなみにこの出力指定子はデータ型によって異なります。上記の例ではint型変数を用いたので%dを使いましたが、文字列型や浮動小数点型では異なります。

どのデータ型でどの出力指定子を使うかは以下でお話します。

基本的なデータ型

それでは、データ型について説明しますが、今回は込み入った話(メモリとか、unsignedとかlongとか…)は省きます。私自身、完全に理解しているわけではありませんし、最初からそういうメモリとかの概念は必要ありません。

今回は基本的なデータ型として、文字型(char型)、整数型(int型)、浮動小数点型(float型のみ)をご紹介します。C言語入門者はこれだけ覚えておくだけで十分です。

1.文字(列)型 - char型 -(出力指定子 : %c , %s )

まずはじめに文字(列)型です。型の宣言には"char"という文字を用います。出力指定子は文字1つを出力させるなら%c文字列を出力させるなら%sを使うので注意して下さい。

文字型はその名の通り、変数に文字を格納することができます。試しに、『Hello,World!』という文字を変数を使って表示してみましょう。前回の回ではprintf関数の中に直接文字を入力しましたが、今回は違います。

//
// 文字型のサンプル
//

#include <stdio.h>

int main(void)
{
     char moji[20]="Hello,World!";

     printf("%s\n", moji);

     return 0;
}

出力結果

blogbbb

このとき注意しなければならないのが、変数に格納する分の配列を用意しなければならないということです。本講座ではまだ扱っていませんが、変数の後ろの[20]という箇所が配列の要素数です。今、表示させようとしている『Hello,World!』という文字列は要素数[13]で大丈夫ですが、あえて要素数を[20]用意しています。

配列については次回以降で詳しく説明します。

2.整数型 - int型 - (出力指定子:%d)

さて次に整数型です。実際に使う方の頻度でいえば、上述の文字型は少なく、この整数型と後述の浮動小数点型をよく使うことになるでしょう。

出力指定子は%dを使います。

整数型の変数には整数を格納します。小数点が付かない数と考えて頂ければ大丈夫です。

//
//  整数型のサンプル
// 

#include <stdio.h>

int main(void)
{
     int sei = 10;
     int fu  = -10;

     printf("%d\n%d\n", sei, fu);

     return 0;
}

出力結果

blogccc

3.浮動小数点型 - float型 -(出力指定子:%f)

最後に浮動小数点型です。出力指定子は%fを使います。

「浮動小数点って何ぞ!!??」という声が聞こえてきそうですが、簡単にいえば実数のことで、3.14とか8.5と小数点が出てくる数を扱うときに、この浮動小数点型を使います。

浮動小数点型はfloat型とdouble型という2つの型に大きく分けることができますが、これらの違いは精度の違いで今回はfloat型にのみ焦点を合わせてお話していきます。

//
//浮動小数点型(float型)のサンプル
//

#include <stdio.h>

int main(void)
{
     float pai = 3.14;
     float neipia = 2.718;
     

     printf("%f\n%f\n", pai, neipia);

     return 0;
}

出力結果

blogddd

%fで出力すると小数点以下6位までがデフォルトで表示されます。そこで%fの箇所を以下の様に変えてみましょう。

//
// 小数点以下をスッキリ表示させる方法
//

printf("%.2f\n%.3f\n", pai, neipia);

こうすると出力結果は以下のようになります。

出力結果

blogeee

このように小数点以下を何ケタまで表示させるのか自由に決めて表示させることができます。

スポンサーリンク

まとめと次回予告

今回は演算処理をするための入り口として変数とデータ型について説明しました。簡単にまとめると以下になります。

  • プログラムで演算処理をするためには変数が必要
  • 変数には具体的な値・文字列のデータを持たせることができる
  • 変数に持たせたデータを出力させるには出力指定子が必要
  • データ型は変数の役割のようなもの
  • データ型によって出力指定子は異なる
  • char型は文字・文字列
  • int型は整数
  • float型は実数

次回は今回の補足説明回になります。変数の宣言する箇所や小数点以下何桁まで表示させるかなどをざっくりお話する予定です。(←別の機会に回します)

次回は簡単な演算処理と題して、基本的な四則演算についてお話します!

詳しい話を知りたい方のためのサイトをご紹介

今回、お話しなかったメモリの話や、もう1つの浮動小数点型のdouble型、floatとdoubleの精度の違いについての話やn進数の話…。これらについては次回以降で話していきますが、『今すぐ知りたいんじゃぁ!!』という方はこちらのサイトにわかりやすく書かれているのでオススメです。

過去のC言語連載まとめ

【C言語:連載(1)】まずはここから! main関数とは!?

【C言語:連載(2)】文字を出力してみよう!~printf関数の使い方~