「C言語」のプログラムを書いて動かしてみよう!
今回は、C言語のプログラムを書いて実行しながら、C言語の仕組みについて学んでいきたいと思います。
プログラムの書き方を知識として身に付けるだけでは、プログラムを書けるようにはならないので、いろいろなコードを書いて、自分で作れるようになっていく必要があるな~と。
ただの「学習記録」ですが、「初心者がどうやってプログラムを学んでいるのか?」を、「ありのまま」書いていきたいと思います。
「変数」の仕組みと「変数」の出力方法
前回「Javascript」を学んで「シューティングゲーム」を作った時にも、たくさん「変数」が出てきましたが、C言語の変数は「データ型」を変数の宣言時に指定する必要があります。
「データ型」についてはなんとなくしか理解していないところがあるので、この機会に詳しく学んでいきたいと思います。
データ型
「データ」には、「数値(整数)」「数値(小数)」「文字(1つの文字)」「文字列(複数の文字)」など、さまざまな種類があります。
「変数」はデータを入れることができる「データの入れ物」を表していますが、「どのようなデータを入れることができるか?」を決めているのが「データ型」なのだそうです。
「Javascript」では、いろいろな値を入れ替えて使うことができましたが、C言語ではあらかじめ変数に入れるデータの種類を指定しないといけないみたいですね。
データ型の種類は、
- int
- 正・負の整数
- short
- 正・負の整数
- long
- 正・負の整数
- float
- 浮動小数(単精度)
- double
- 浮動小数(倍精度)
- char
- 文字
などがあり、変数を作る時にはこれらのデータ型を指定する必要があります。
変数を作る場合は、
データ型 変数名;
のように書くようです。
例えば、
#include <stdio.h> int main(void) { int i; // 変数を作る return 0; }
と書くことで、「整数」を入れることができる「i」という名前の変数を作ることができます。
変数に値を入れるには「=」の記号を使います。
「=」は、算数とかだと「等しい」という意味なんだけど、プログラムだと「=」の右辺の値を左辺に入れるという役割があります。
細かい部分がこれまでの考え方と異なると、覚えるのが思いのほか大変だったり(^_^;)
変数に値を入れるプログラムを入れるプログラムは、
#include <stdio.h> int main(void) { int i; // 変数を作る i = 5; // 変数に値を入れる return 0; }
のようになります。
「変数」の出力
変数の内容を画面に表示する場合は、「printf」関数を使うことができますが、記法がちょっと面倒くさい感じ・・・
例えば、「i」の変数の値を出力する場合は、
#include <stdio.h> int main(void) { int i; i = 5; printf("%d",i); return 0; }
と書くと、
5
と画面に出力されます。
第一引数には「変換指定子」という記号みたいなものを書くと、第二引数以降の値が順に割り当てられるという仕組みになっているみたいですね。
このあたりは、手順が多くて書くのが大変なんですが、慣れるしかなさそう。
日本語の出力と混ぜる場合は、
#include <stdio.h> int main(void) { int i; i = 5; printf("「i」の変数の値は「%d」です。",i); return 0; }
のように書くと、
「i」の変数の値は「5」です。
のように出力されます。
複数の変数の値を同時に出力をしたい場合は、
#include <stdio.h> int main(void) { int i; int j; i = 5; j = 8; printf("「i」の変数の値は「%d」で「j」の変数の値は「%d」です。",i,j); return 0; }
と書くと「i」「j」の2つの値を出力することができます。
文字列を変数に入れた場合は、
#include <stdio.h> int main(void) { char name[] = "hogehoge"; printf("あなたの名前は「%s」です。",name); return 0; }
「文字の集まり」の「文字列」は「char」型の配列で扱わないといけないみたい。
文字列の「変換指定子」は「s」なので、変数のデータ型によって「変換指定子」を変える必要があります。
「データ型」「変換指定子」と覚えること多い・・・
と言っても、インターネットで検索したらすぐに調べられるので、覚えるほどでも無いかな。
C言語を勉強したのは何年も前なので、もうほとんど忘れてるけど(^_^;)
今回勉強した「変換指定子」は、
- i
- 10進数の整数
- s
- 文字列
ですが、他にも
- f
- 単精度実数
- lf
- 倍精度実数
などもあります。
簡単な計算をしてみる
「C言語」で簡単な計算をして、計算結果を表示してみたいと思います。
#include <stdio.h> int main(void) { int i = 8; int j = 4; // 足し算 printf("%d + %d = %d\n",i, j, (i+j)); // 引き算 printf("%d - %d = %d\n",i, j, (i-j)); // 掛け算 printf("%d * %d = %d\n",i, j, (i*j)); //割り算 printf("%d / %d = %d\n",i, j, (i/j)); return 0; }
このプログラムを実行すると、
8 + 4 = 12 8 - 4 = 4 8 * 4 = 32 8 / 4 = 2
のように出力されます。
それぞれの計算をする記号の意味は下記のようになっています。
- +
- 足す
- -
- 引く
- *
- 掛ける
- /
- 割る
ただ、
#include <stdio.h> int main(void) { int i = 11; int j = 4; //割り算 printf("%d / %d = %d\n",i, j, (i/j)); return 0; }
のように「割り切れない計算」をすると誤った計算結果になってしまいます。
小数を含んだ正しい計算結果を得るためには、
#include <stdio.h> int main(void) { float i = 11; float j = 4; //割り算 printf("%f / %f = %f\n",i, j, (i/j)); return 0; }
のように、「変数のデータ型」を「int」から「float」に変更し、printf関数の「変換指定子」に「%d」から「%f」に変更する必要がありました。
ということは、小数を含む計算結果となる可能性がある場合は「float」「double」など、小数を表せるデータ型を選ぶ必要があるんですね。
このプログラムを実行すると、
11.000000 / 4.000000 = 2.750000
のように、無駄に右に「0」がくっついてはいますが、計算結果は「小数」を含んだ正しい値を得ることができました。
プログラミングは考え方や書き方を身に付けるまで時間がかかりますが、少しずつ毎日勉強していると、だんだん身についている感覚を実感することもできます。
次も何かC言語の新しい機能について学んでいきたいと思います!