C言語はUNIX(ユニックス)と呼ばれるコンピュータの基本ソフトウェア(OS:オペレーティング・システム)を記述する言語である。C言語第2段として、繰り返し処理、関数、配列、ポインタについて解説する。
(1) for文
for文中の条件式が成立している間、処理を繰返し実行する。
for (式1 ; 式2 ; 式3)
{
処理 ;
}
式1:ループ処理の前に実行される処理
式2:ループの条件式
式3:ループ処理の後に実行される処理
(2) while文
while文の条件式が成立している間、ループ処理を繰返し実行する。
while (条件式)
{
処理 ;
}
(3) do 〜 while文
do 〜 while文もwhile文と同じようにwhile文の条件式が成立している間、ループ処理を繰返し実行する。do 〜 while文はループ処理の実行後に条件式を判定する。
do
{
処理 ;
} while (条件式) ;
(4) 繰返し処理の強制終了
breakまたはcontinueを用いることで、ループ処理を強制的に打ち切ることができる。
breakはループから抜け出る命令であり、continueはそれ以降の処理を打ち切ってループの最初から処理を行う命令である。
(a) main関数
main関数はC言語で必要な関数で最初に処理される。ほかの関数はすべてmain関数の中に含まれる。
main()
{
main関数の中身
}
(b) 関数の書式
関数はその受け渡す変数の型が分かるように型宣言をする必要がある。
型指定子 関数名(型指定子1,型指定子2,…)
{
関数内部で使う変数の型宣言 ;
・
処理 ;
・
return(戻り値) ;
}
同じ型のデータを一連のデータの並びとして取り扱ことができる変数列である。
(a) 一次元配列
配列名と0から始まる正の整数で表される添え字によって表すデータの並びである。一次元配列の宣言は次のようにする。
配列変数の型(要素の型) 配列名[配列要素数];
次の宣言を実行すると記憶装置には第1図に示すようにデータが保存される。
int denryoku[5] = { 10, 20, 50 } ;
(b) 文字配列
文字を要素として配列にしたものを文字配列という。scanf関数で取り込まれた文字はこの文字配列に格納される。
文字配列の宣言は次のようにする。
char 配列名 [文字列数];
scanf関数によって文字列の入力が行われると、第2図に示すように文字配列に格納される。文字配列の最後の「\0」が文字配列の最後であることを示す特殊文字でありヌル文字(ナル文字)と呼ばれる。このヌル文字はscanf関数によって自動的に挿入される。
(a) ポインタとは
ポインタはBASICやFORTRANにはなく、C言語独自のものである。ポインタは記憶装置上で変数の格納されている番地を示すアドレスを用いてデータの入出力を行うものである。
例えば、int型(1バイト)の変数int denkiが宣言された場合、第3図に示すように変数の領域が確保される。記憶素子では1バイトごとにアドレスが割り付けられているので、変数denkiの先頭アドレスが1000番地であったとするとこの宣言によって1000〜1003番地までの領域が確保される。
(b) ポインタを用いたデータの受け渡し
複数の関数内で宣言したそれぞれの変数または配列変数は、たとえ変数名が同じ名称であってもメモリなどの記憶装置上では別々の変数領域が確保される。このため、一方の関数で演算された結果を他の関数へ変数名で引き渡すことができない。しかし、ポインタを使えば、メモリなどの記憶装置上の変数格納領域に対してデータの読み書きを行うことができる。
int A(void) /* 関数A */
{
int x ;
int y ;
y = x+5 ;
・
・
}
int B(void) /* 関数B */
{
int y ;
int z ;
z = y / 2 ;
・
・
}
ポインタ変数は次に示すように宣言する。
int *ポインタ変数名 ;
なお、第1表に示すようにポインタ変数にも一般の変数と同様に変数の型がある。
(c) ポインタの初期化
ポインタ変数を使う場合、その使用に先立って変数領域の開始アドレスをセットしなければならない。
int denki ; /*変数宣言*/
int *gijyutsu ; /*ポインタ変数の宣言*/
gijyutsu = &denki ; /*ポインタ変数の初期化*/