第十四話 反復
立花先輩の話は続く。
「で、今度話すのは、Cの反復命令ね」
「反復?」
「そ。文字通りの意味よ。一定の範囲でくるくる回転させる命令。ま、コード見ればすぐわかるわ」
先輩はコードをカリカリと書いていった。
「よし、できた。見てみて」
俺と西原さんは出来たコードを見る。
/* 反復命令テスト! whiletest.c */
#include <stdio.h>
int main(void)
{
int count = 3; /* 変数countを宣言すると同時に3で初期化 */
printf("回転はじめます\n");
while(count > 0)
{
printf("現在、count値は、%dです! \n" , count );
count--; /* count = count - 1 と同じ */
}
printf("回転終了しました\n");
return 0;
}
「これだと、わかりやすいんじゃないかなー」
「while命令が、回転させていると?」
「うん。イツキくんも、わかってきたわね」
新しい命令をあてずっぽに言っただけだけど。
「while命令は、if命令と似ているわ。ここでも、カッコ内で判定式を入れて、結果がtrueだったら、次の中カッコ内の命令を実行する。falseだったら、中カッコの次の命令へと移動するって命令なの」
「つまり、trueである限り、中の命令が実行されるってことですか?」と西原さん。
「ちょっと付け加えがいるわ。中カッコのいろいろな命令が終了したら、またwhileの所に戻って、また判定するわけ。この繰り返しね」
「whileの判定か。count変数が 0以上だったら、だよな?」
「ぶー。ちがいまーす。0『より上』だったら、よ。0以上だったら、0も含めるから count >= 0にしないとダメなの」
「こ、細かい……」
「ぶーぶー。プログラムには、こういうちょっとしたミスがバグの元になるのが多いのよ。イツキくんも気をつけなさい」
うぬぬっ。
「で、countが0より上、なら、最初は3だから、正解ですよね。」西原さんが続けた。「そして中で表示して、countを……これは1引くんですよね?」
「そう。count--って書いたら、count = count - 1と同じわけ。ちなみに、足すときには、count++ね」
「掛け算とかは?」
「掛け算、割り算は無いから。あと、これは1しか足したり引いたりできないの。よくプログラミングだと、変数を1足したり引いたりする事が多いから、特別に命令があるのね。あとね、--countって書き方もあるのよ。これは、結果としてcountから1引くのは同じだけど、count--と少し違うところもある──ま、いずれ話す時があると思うわ」
西原さんが言った。
「じゃあ、話を戻しますと、countは2になって、またwhileの判定。この時も0より上だから、また中カッコの中の命令を実行。で、これを繰り替えして、countが0になったら、次のwhile文の判定で、falseになるんですよね?」
「そうそう。その時には、中カッコを飛び越して、printf("回転終了しました\n");の所へと移動するわけ」
「なるほどな。反復命令、理解したぜ」
「じゃ、理屈がわかったところで実践よ。コードを実行させるわ」
先輩はコードをコンパイルさせると、実行させた。
> whiletest
回転はじめます
現在、count値は、3です!
現在、count値は、2です!
現在、count値は、1です!
回転終了しました
>_
「ふむふむ。count1が表示されてからマイナスされて0になるから、もう表示されないんだな」
「他にも、似たような命令がいくつかあるから、教えるね。まず、for命令。これは、開始状態の変数の宣言と判定式、変数の変化を同時に一行で行えるの。このコードの場合、こんな感じね」
int count;
for (count = 3; count > 0 ; count--)
{
printf("現在、count値は、%dです! \n" , count );
}
「こっちの方が、わかりやすいな」
「それは、イツキくんが最初にwhile命令を理解したからよ。ま、慣れたらこっちの命令の方がよく使うかなー。あとね、do while命令ってのもあるの。これは、」
do {
printf("現在、count値は、%dです! \n" , count );
count--; /* count = count - 1 と同じ */
} while (count > 0);
「って感じ。最後に判定式を入れてるの。最初のwhileだと、初めての判定式でいきなりfalseが出たら、中カッコの中の命令は一度も実行されないけど、これだと最低1回は必ず実行されるのよ」
「ふむふむ」
「ちなみに、こっちだとwhileの最後にセミコロン;が要るから、忘れないでよ」
先輩はそう付け加えると、メモ帳に書いたコードを消し始めた。
「さてと、イツキくんもこれで基本的なCの命令はわかっただろうから、あとはこれを組み合わせれば、簡単なゲームは作れると思うわ」
俺は突然の先輩の前フリにぎょっとした。
「そ、そうかな? 俺は、まだ自信が……」
「大丈夫って。困ったときには、あたしに聞けばいいわ。とりあえず、今日はもうこれくらいにして、明日続きをしよ」
俺は壁時計を見た。確かに、もう下校する時間だ。
「そうですね、私もそろそろ帰ります」と西原さんも頷く。
「じゃあ西原さんもうちの部、入部する?」
「そうさせて頂きますわね。ふふっ」
「西原さんのような可愛い女の子がうちの部員だったら、俺も嬉しいなー」
俺はついにやけてしまう。
「……イツキくん、それって、あたしは可愛くないってこと?」
「い、いえっ。先輩もとても可愛いですです」
俺はたじたじになって答えた。付き合いにくい人だなぁ、もう。