プログラムの詳細
前回、実行環境を設定してプログラムを実行させました。ここからより詳細に説明していきます。
C言語の構成と記述規則
まずは、基本的なことから覚えましょう。以下が簡単な規則になります。
- 基本的には上から下に処理が順番に進む
- { と }は対応しており、囲まれた部分はひとつの処理のまとまりとなる
- 処理ひとつひとつは、;{セミコロン}によって区切られる
- 空白、改行、タブは、関数{命令}の間に好きなだけ入れられる
現段階では、上記を意識してプログラムを書いていきましょう。次にプログラムの内容の意味について考えていきます。
#include <stdio.h> //①
int main() //②
{
/*表示をする ③*/
printf(""); //④
printf("");
return(0); //⑤
}
①インクルード部
この部分はプログラムの中で使う関数がどのファイルに定義しているかを指定しています。このファイルをヘッダーファイルまたは、インクルードファイルといいます。#includeのあとに<>で囲んだファイル名を記述します。この部分をインクルード部といいます。
<>でファイル名を指定する時は、コンパイラで指定されている場所にあるファイルしか指定できません。ここで使っている「stdio.h」は、「standard input output(標準入出力)」の略で、キーボードからの入力、ディスプレイへの出力を行う関数の定義が書かれているファイルです。そのため、printf()を使って画面に表示させるには必ず必要になります。
②プログラムの処理の開始
main()は、C言語のプログラムに絶対に欠かせません。これは、main(メイン)関数といい、C言語では必ずひとつのmain関数が必要です。処理は関数(function)というまとまりで構成されていますが、main関数はここからプログラムの処理を開始することを表しています。
main()
{
//処理内容
}
ソースプログラムでmain()の位置は先頭とは限りませんが、実行されるときはここから実行されます。
③コメント部
C言語のプログラムは、/*と*/で囲まれた部分はプログラムの内容とは無関係な「解説の部分」となります。これはコメント部と呼ばれ、プログラムに不可欠な記述ではありません。しかし、あとで自分が見返す時や他人の書いた処理を見たときに分かりやすいように様々な部分の処理の説明に「コメント」を書いておきましょう。日本語で書くことができるので、分かりやすさを常に意識しましょう。
④プログラムの処理内容を記述
main()の中には、{}で囲んでプログラムの処理内容や手順を記述していきます。この例では、printf関数を使って画面へ結果を表示する処理を行っています。
⑤関数の終了
ここは関数の処理の終了をあらわす部分です。C言語では、main関数から他の関数を呼び出し、さらにそれが他の関数を呼び出し…というように処理を記述していきます。ここで、return(x);が出現したら、いまの処理を終了し、「x」という結果を持って、呼び出された関数に戻ります。main()の中にあった場合、プログラムの処理終了を意味し、この記述をreturn文といいます。
printf()の詳細
文字列を画面に表示させる処理には、printf()という関数で実現していました。ここでは、より詳しく把握していきましょう。
Printf()の使い方… printf(“XXXXX”);
- “XXXXX”には、画面に表示したい文字を記述する
- 改行をしたい場所に「\n」を記述する
- “XXXXX”の記述において、「%, \, “, {, }, ;」は特殊な役割がある。これらの文字を表示したいときは、その文字の前に「\」をつけて記述する。
特殊な役割を持つものは以下のように使われます。
- \ は改行を表す「\n」などで使われる
- ” は表示する文字列の範囲を表す
- { } はC言語の処理のまとまりをあらわす
- ; は処理の終わりをあらわす
これまで「%」については説明していませんでしたが、もう1つの使い方をサンプルを書いて理解しましょう。
以下のコードを書いてみてください。
#include <stdio.h>
int main()
{
/*2種類の方法で数値の表示をする*/
printf("1+2=3\n");
printf("1+2=%d\n", 1+2);
return(0);
}
このプログラムを実行すると以下のようになります。
プログラムでは、2種類の記述をしていますが、どちらも同じ実行結果になります。ここで「%d」という記述は、「カンマ(,)の後ろに記述した値が、文字列中の%dの位置に整数として入ります」ということを表しています。
補足…C言語では、足し算は「+」、引き算は「-」、掛け算は「*」、割り算は「/」で表せ、()を使い数学と同じように計算式が書けます。
次のサンプルプログラムでは、整数値や小数値を含む様々な結果を得る方法を紹介します。
#include <stdio.h>
int main(){
/*printfの様々な使いかた*/
printf("10/3=%d\n", 10/3);//①
printf("10/3=%f\n", 10.0/3.0);//②
printf("10/3=%lf\n", 10.0/3.0);//③
printf("7+1=%3d\n", 7+1);//④
printf("7*9=%3d\n", 7*9);//⑤
printf("7/3=%.3f\n", 7.0/3.0);//⑥
return(0);
}
①②③は、算数でいう割り算を実行し、その結果を求めています。しかし、①と②、③の値は異なっています。それは各記述に違いがあるからです。違いは以下のようになります。
- 文字列中の「%d」の位置に整数(10進数)として画面に表示させる
- 文字列中の「%f」の位置に実数として画面に表示させる
- 文字列中の「%lf」の位置に精度の高い実数として画面に表示させる
*C言語では、「1,2,3」としたら整数、実数とするなら、「1.0,2.0,3.0」と明示的に記述しなくてはなりません。また、「整数」と「実数」の計算では、「実数」となります。
④⑤⑥は、計算結果を成形して表示しています。「%3d」とした場合、3桁の整数が右揃えで表示されます。「%.3f」とすれば、小数点以下何桁まで表示するか指定できます。
このように%dや%fなどのように%ではじまる記述を変換仕様(convertion spesification)といいます。これ以外にもありますが、コードを各過程で覚えていきましょう。