この章では足し算の練習プログラムを作成します。
問題を5問解いて、正解数をカウントします。
次は初めのfor文の中を説明します。 =>rand関数は乱数を返します(関数については「関数について知ろう」でします。)。
計算をするのに毎回違う数を使いたいのでrand関数を使います。
具体的には0から32767までの数字の中でランダムな数を返します(詳しくは「switch文で占いを判定しよう」で説明します)。
範囲を限定したい場合には例えばと書きますと1から6までの中でランダムな数を返すようになります。
この例であれば1から50までのランダムな数を返します(詳しくは「switch文で占いを判定しよう」で説明します)。
rand関数を使うためには文頭でと書かなくてはいけませんので注意してください。
では次の箇所の説明をします。 => number1とnumber2の足し算の文を表示します。
つまり、以下の赤枠の箇所です。 =>答えをinput変数に代入します。
answer[i]=input;
=> scanfで入力した値が入っているinputを配列であるanswerに入れます。
for文で5回繰り返しているので、その都度入力した値が配列に入ります。 result[i]=number1+number2;
=> number1とnumber2の結果(つまり正解値)をresult配列に代入します。
for文で5回繰り返しているので、その都度正解値が配列に入ります。
次の箇所の説明をします。 =>ここでは配列answerに入っている答えと配列resultに入っている答えを比べて、正解ならば変数rightanwerに1を足します。
for文で5回繰り返しているので、その都度答え合わせをして、正解ならば変数rightanwerに1を足します。
結果は以下の通りです。
実はこの計算プログラムは何回実行しても同じ計算式しか表示されません。
毎回違う計算式を表示させたいのならば、以下の赤枠の記述を付け加えます。
詳しくは「switch文で占いを判定しよう」で説明します。
タグ: for
この章ではcontinueの使い方について説明します。
continueは現在進行している周回を抜けたとしても、ループ自体は続けたい場合に使います。
主にfor文やwhile文などでよく使われます。
では例をみてみましょう。 実行結果は以下の通りです。
1つのリンゴ2つのリンゴ3つのリンゴ5つのリンゴ
if(i==g)の条件がTRUEの場合、下の行にあるを実行することなくforの先頭に戻ります。
例の場合はgが4なので「4つのリンゴ」と言う文を出力しません。
例ではiとgがイコールになったら、forの先頭に戻って条件判定をしてループを続けるかどうか決めますが、この例では先頭に戻ってもiは5ですのでTRUEとなり「5つのリンゴ」を出力します。
breakと違いループ自体を止めることはしません。
forとifとbreakを組み合わせて使おう
この章ではfor文の中でのbreakの使い方について説明します。
switch文の中でbreakを使用しましたが、これは一連の流れを強制的に中止したい時やブロックを抜けたい時に使いました。
このbreakはfor文の中でも使用することが出来ますので、例を見てみましょう。 例のようにfor文にif文を入れることもできます。
このif文の意味はbreakを使用しているので「もし、iが4になったらfor文を抜けますよ」と言う意味です。
ですので、「4つのリンゴ」「5つのリンゴ」を出力することなくループを終了します。
breakはこのように一連の流れ(ループ)を強制的に中止したい時に使用します。
次の例はforの入れ子の中でbreakを使用しています。 この例では上から2つ目のforの中でbreakを使っていますが、forの中でbreakを使った場合、breakで抜けることができるのはbreakのあるfor文(例の場合は上から2つ目)だけです。
つまり例の場合は上から2つ目のfor文の中のif文の条件部分が3を超えたら、(上から2つ目の)for文をbreakするのですが、breakした後はまた一番前のに戻ってループを繰り返します。
次の例をみてみましょう。 先ほどの例のように入れ子の中のfor文でbreakを使用した場合、抜けることが出来るのは内側のfor文だけですが、一気に外側のブロック(一番前のfor)を抜けたい場合の方法について説明します。
ある条件になったら繰り返しを止めたいと思う箇所にと記述してください。
次に抜けたい箇所にと言う形式で記述すると、そこまで実行位置を移すことができます。ラベル名は変数名と同じ規則で自由に付けることが出来ます。
この例では の箇所で「i*j」の結果が3より大きければが実行されて、のある場所まで実行位置を移すので二重ループそのものを抜けます。 for文以外でもgotoは使うことができます。
以下の例ではif文の中でgotoを使用しています。
for文で九九を作ろう
for文を入れ子にしよう
この章ではfor文の応用でfor文の入れ子について説明します。
つまりfor文の中にfor文が入っている形式です。
では例をみてみましょう。
for文のネストは複雑なので順を追って説明します。 ここがTRUEなので が3回実行されて
1掛ける1=1
1掛ける2=2
1掛ける3=3
が出力されます。
つまり、外側のfor文が1周するごとに内側のfor文は3周します。 上の3番でiは2になりましたが、まだTRUEですので、 が3回実行されて
2掛ける1=2
2掛ける2=4
2掛ける3=6
が出力されます。
上の5番でiは3になりましたが、まだTRUEですので、 が3回実行されて
3掛ける1=3
3掛ける2=6
3掛ける3=9
が出力されます。
まとめますと、この例では外側のfor文が1周するごとに中のfor文は3周しています。
これがfor文の入れ子です。
for文について知ろう
この章ではfor文について説明します。
while文は何回も同じ処理をする時に必要でしたが、for文もwhile文と同じ働きがあります。 forが最初に実行される時には初期値式から始まります。
初期値式とは条件式を判定するときの初めの変数です。
初期値式は下の例で言えばです。
次に初期値式を元に条件式を判定してTRUEであるならば、処理文が実行されることになります。
条件式は下の例で言えばです。
処理文が実行された後に増減式において、初期値を足したり引いたりする行為を行います。
増減式は下の例で言えばです。
プログラムの内容によっては減算子のという記述もできます。
では例をみてみましょう。 次の例をみてみましょう。
この例は2つfor文がありますが、上のfor文で配列にデータを入れて、下のfor文でそのデータを取り出しています。 この例は最初のforでtashizan配列にループでデータを入れて、次のforで配列の要素を出力しています。 次の例ではfor文で文字列を出力する方法について説明します。 「char s[100]=”cats”;」のように配列に文字列を入力する時には文字列の最後にが自動で付きますので、これを利用して配列の要素がではない限り配列の要素を出力します。
があったら、ループを終了します。
forとifとbreakを組み合わせて使おう
この例ではfor文とif文とbreak文を組み合わせて使う方法について説明します。
breakは、現在実行中の for, foreach, while, do-while, switchの実行を強制終了する機能を持っています。
switch の章でbreakを使用したのを覚えているでしょうか?breakは for文でも使うことが出来るのです。
では例をみてみましょう。 for文のブロックの中にif文が入っています。
このif文の意味はもし、$iが4になったらfor文を抜けますよと言う意味です。
breakはこのように一連の流れを強制的に中止してブロックを抜けるために使われます。
$iが4になったらfor文を抜けると言うことはは出力されないということです。
結果は以下の通りです。 次の例をみてみましょう。
for文の入れ子の中でbreakを使うとどうなるのかを説明します。 この例の中のforの中でbreakを使っていますが、このbreakで抜けることができるのは内側のfor文、つまり上から2つ目のforだけです。
内側のfor文の条件部分が5を超えたら、上から2つ目のforをbreakするのですが、breakした後はまた先頭のに戻って続きを繰り返します。 になりますが、
「2掛ける3=6」
「3掛ける2=6」
「3掛ける3=9」
「4掛ける2=8」
「4掛ける3=12」
が出力されていません。
理由はif文の中のbreakで内側のfor文を抜けているために、その下のprint文が出力されていないからです。
次の例をみてみましょう。
外側のfor文も含めてすべてのfor文を抜けたい場合どうしたらいいのかを説明します。 2つfor文がありますが、すべてのfor文を抜けたい場合には内側のfor文の中にと入力します。
これにより、すべてのfor文を抜けることが出来ます。
break の横の数字には入れ子になったforの構造で抜けたい階層の数を指定します。
例えばこの例のように2つのfor文を抜けたい場合には2を指定します。
「break 3; 」と書けばforの3重構造を抜けることが出来ます。
結果は以下の通りです。
1掛ける1=1
1掛ける2=2
1掛ける3=3
2掛ける1=2
2掛ける2=4
for文で配列の要素を取り出そう
この章ではfor文による配列の要素の取り出し方について説明します。
では例をみてみましょう。 for文を使って配列の要素をループさせて、1つずつ取り出すことが出来ます。
$data[$i]の$iには0から2までの数値が順番にセットされて、出力されます。 次の例をみてみましょう。 この例は配列の要素である整数の足し算を行っています。
はと同じ意味です。
配列の要素の数だけfor文で取り出すには以下の通り、条件式にのように配列の要素数を書きますが、配列の要素の数は直接数字で書く以外に便利な方法があります。 以下のように条件式にと、記述しますと配列に含まれる要素数を取得することが出来ます。
例えば以下のようにと、書きますと、配列の要素数である3を得ることが出来ます。
for文を入れ子にしよう
この章ではfor文の応用でfor文のネストについて説明します。
ネストとはfor文の中にfor文を入れると言うことです。
では例をみてみましょう。 for文のネストは複雑なので順を追って説明します。
①$iに1を代入します。
②「$i<=3」の条件式を判定しますがここがTRUEなので が3回実行されて
1掛ける1=1
1掛ける2=2
1掛ける3=3
と出力されます。
つまり、最初は$iには1が入っているので、print文の中の$iには1が入ります。
には1から3までが、順番に代入されます。
つまり、外側のfor文が1周するごとに、中のfor文は3周しています。 ③次に$i++の箇所で$iに1を足し、$iは2になります。
④そして条件式の判定に入りますが、2回目のループではまだ$iは2なのでTRUEということになり、 が3回実行されて
2掛ける1=2
2掛ける2=4
2掛ける3=6
と出力されます。
⑤次に$i++に戻り$iに1を足します。
そこで$iは3になります。
⑥そして条件式の判定に入りますが、3回目のループではまだ$iは3なので,TRUEということになり、 が3回実行されて
3掛ける1=3
3掛ける2=6
3掛ける3=9
と出力されます。
⑦次に$i++に戻り$iに1を足します。
そこで$iは4になります。
⑧そして条件式の判定に入りますが、$iは4で3以下ではないのでFALSEとなり、ここでループは終わりになります。