MSBOOKS

プログラミングとか深層学習とか日常の出来事とか

【C言語入門】part2 : C言語のプログラムの構造,printf文,データの型(変数)

前回はC言語のプログラムの書き方から実行までの手順をやりました.
今回はC言語のプログラムの構造,printf文,データの型(変数)についてやっていきます.

C言語のプログラムの構造

まずはC言語のプログラム構造を理解していきましょう.
前回のプログラムを以下に再掲します.
・test1.c

#include <stdio.h>
int main(void){
   printf("ゲーム開始!\n");
   return 0;
}

最初の二行と最後の二行は今説明すると大変なのではじめのうちはおまじないで書いておけば大丈夫です.つまりこのプログラムの本質の部分は三行目だけということですね.これからしばらくはこの最初の二行と最後の二行の間に処理を書くっという解釈でOK.

#include <stdio.h>
int main(void){
   <<ここに処理を書く>>
   return 0;
}

int main(void){から始まる中カッコ{ }の中に書くプログラムは左側にスペースもしくはTABを入れて隙間をあけると見やすいのでよくこういう書き方をします.

prinf文

printf画面に指定された文字列を出力してくれる関数です.
(関数とは何かの入力を受け取って処理をして結果を返してくれるもの.今回の場合は文字列を受け取って画面に文字を表示してくれる結果を返すものですね)
・printf関数

printf("文字列");

・実行結果

文字列

C言語のプログラムの書き方として,関数へ渡すモノはカッコ( )で囲う必要があります.数学のf(x)みたいなものですね.今回は文字列をカッコで囲ってさらにダブルクォーテーション" "で囲っていますね.ダブルクォーテーションの中のモノは文字列であることを表します.
ちなみに\n (もしくは¥n)は改行の意味になり,ここで改行しますよの意味になる.試しにたくさん\nを書いてみればわかるかも.
あと忘れがちですが,C言語は関数などの最後にセミコロン;を付けます.これを忘れるとコンパイルエラーが出て翻訳できないので忘れずにつけましょう.

コメント文

プログラムを書くときに忘れそうなことはコメントを書くことができます.コメント文は以下のように書きます.
・コメント文

//一行コメントはこのように書く
//文字列を出力する部分
printf("文字列");
/*
複数行に
またがるコメント
*/

・実行結果

文字列

このように実行結果にはなんら影響がないので,なんでも書いてOKです.

データの型(変数)

それでは,変数という概念を導入します.ゲームの敵キャラクターに攻撃をしたのに永遠にHPが3だったらキレますよね.そんな敵キャラクターのHPを動かしたいときに変数を使います.
変数は"変わる数"と書きますね.以下の図のような箱のイメージを想像するのが良いですね.箱の中身を書き換えることができます
f:id:msteacher:20181229130231p:plain
この箱を定義するときに,中身がどんなもの(数値?文字列?)が入っているのか?についてあらかじめ指定する必要があります.これをデータのといいます.主なものとして以下が挙げられます.
・int:整数型
・float:浮動小数点数型(簡単に言えば小数型)
・double:倍精度浮動小数点数
・char:文字型
変数と型の定義は以下のように定義します.代入する値が後ろ,変数名(変数の名前)が前にきていることが特徴ですね.
変数の型 変数名 = 初期値;
敵キャラクターのHPの例だと以下のように書けます.ちなみに初期値はなくても大丈夫です.

//敵キャラクターHPの変数を整数型,初期値3で定義
int enemyHP = 3;
//敵キャラクターHPの変数を整数型,初期値なしで定義
int enemyHP;

f:id:msteacher:20181229134933p:plain
変数に値は入れられても画面に出力できなければわかりませんよね.変数の中身を表示するためには,書式文字を使います.書式文字は以下のようなものがあります.

・%d:整数
・%f:浮動小数点数(簡単に言えば小数)
・%lf:倍精度浮動小数点数
・%c:文字
・%s:文字列
変数の型と対応しているのはなんとなくわかりそうですが,なんだか難しそうです.一緒にプログラム作りながら考えてみましょう.まず前回同様TeraPadからtest2-1.cというC言語プログラムのファイルを作って,以下のプログラムを打ち込んでみましょう.
・test2-1.c

#include <stdio.h>
int main(void){
   //敵キャラクターHPの変数を整数型,初期値3で定義
   int enemyHP = 3;
   printf("敵のHP:%d\n",enemyHP);
   return 0;
}

このプログラムをコンパイルし,実行すると以下のような結果が得られると思います.(次からコンパイルは省略しますが,必ずコンパイルしてくださいね)
・実行結果

C:\Users\ユーザ名\Desktop>bcc32 test2-1.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
test2-1.c:
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland

C:\Users\ユーザ名\Desktop>test2-1.exe
敵のHP:3

これは以下の図のようなint型のenemyHPに入っている具体的な値を%dという書式文字に代入しているという意味になります.ここで注意してほしいのは,必ず変数の型に対応した書式文字を使うことです.
f:id:msteacher:20181229135806p:plain
このようにprintfのもう1つの使い方として変数を表示することができます.””の後のカンマ,を忘れずに!
・printf関数

printf("書式文字",変数名);
//後ろをカンマで区切ることで2つ以上表示することもできます
printf("%d%d",HP1,HP2);

それでは値の書き換えをやってみましょう.変数というくらいなので値を書き換えができるのが特徴です.以下のtest2-2.cを実行してみましょう.
・test2-2.c

#include <stdio.h>
int main(void){
   //敵キャラクターHPの変数を整数型,初期値3で定義
   int enemyHP = 3;
   printf("敵のHP:%d\n",enemyHP);
   printf("敵に攻撃をした!\n");
   enemyHP = 2;
   printf("敵のHP:%d\n",enemyHP);
   return 0;
}

・実行結果

C:\Users\ユーザ名\Desktop>test2-2.exe
敵のHP:3
敵に攻撃をした!
敵のHP:2

変数の値が変わってることがわかると思います.値の代入(書き換え)は以下の図のように,これも後ろの値を前に代入するという形をしています.
f:id:msteacher:20181229141742p:plain

今回は,C言語のプログラムの構造とprintf文の使い方,データの形(変数)の話をしました.
次回は四則演算についてやっていきたいと思います.最後に練習問題を載せるのでぜひチャレンジしてみてください.
お疲れさまでした.

練習問題

・問題1
 主人公のHPである整数型変数heroHPを初期値3で定義し,以下のような実行結果が得られるプログラム(test2-3.c)を書いてみよう.

C:\Users\ユーザ名\Desktop>test2-3.exe
主人公のHP:3
敵に一撃必殺の攻撃をされた!
主人公のHP:0
GAME OVER!

f:id:msteacher:20181229153055p:plain
・問題2
 浮動小数点数型の変数heightを定義し,あなたの身長(cm)を代入,表示するプログラム(test2-4.c)を書いてみよう.実行結果は以下のようなものが得られればよい.

C:\Users\ユーザ名\Desktop>test2-4.exe
私の身長は170.500000cmです

練習問題の解答例

・問題1
 ・test2-3.c

#include <stdio.h>
int main(void){
   //主人公HPの変数を整数型,初期値3で定義
   int heroHP = 3;
   printf("主人公のHP:%d\n",heroHP);
   printf("敵に一撃必殺の攻撃をされた!\n");
   heroHP = 0;
   printf("主人公のHP:%d\n",heroHP);
   printf("GAME OVER!\n");
   return 0;
}

・問題2
 ・test2-4.c

#include <stdio.h>
int main(void){
   //float型のheightを初期値170.5で定義
   float height = 170.5;
   printf("私の身長は%fcmです\n",height);
   return 0;
}

[補足]これだと小数点以下の数がですぎてしまうので%f%.2fとすることで小数点以下2桁のみ表示と制限することができます.