第1章 「やさしい入門」
1.3 For文

2020年11月7日

前回はwhileを使い繰り返し処理を記述する方法を学習しました。
今回はfor文を使った繰り返し記述を学びます。
実際プログラムをしているとwhileよりもforを使う機会が多いと思います。

プログラムの目的

前回と同じ、℃=(5/9)(F-32)の公式から華氏と摂氏の対応表を表示するプログラムです。

ソースコード

前回と同様にサンプルコードをvisual studioで作成してください。
作成したらビルドしてエラーが出ない事を確認します。
ビルドが終了したら実行して下さい。
前回と同様の結果になれば成功です。

解説

while文をfor文に置き換えたソースコードになります。

while文ではwhile (fahr <= 300) {のように判断のみを行っていました。
for文では初期値の設定、判断、変数の変更を1行で行います、効率的ですね。

①int fahr = 0;
華氏用の変数fahrに0を代入しています。

ワンポイント
fahrの後ろにある;を忘れないようにしましょう
忘れるとビルドエラーになります。
わざと;を入れずにエラーを出し、どのようなエラーが出るか確認しましょう。
このように、複数のエラーが出ます。
直接関係ないエラーも出ることがありますので、慌てないようにして下さい。

②fahr <= 300;
判断の記述です。
whileの時と同じですね。

③fahr += 20
意味はfahr = fhhr + 20と同じです。
for文専用の記述方式と言う訳ではありませんが、簡潔に書けるので以降はこの書式を使うことにします。

プログラムの流れ解説

前回は、言葉だけで説明しました。
今回はプログラムの動きを一緒に見ながら解説しますね
プログラムの動きを見る簡単な方法は「ステップイン」を使う方法です。
プログラマーは「ステップ送り」と呼ぶ事が多いです。

それは動作を確認しましょう。
まずはビルドが終了した状態にして下さい。

①メニューバーのデバッグ→ステップインを選択して下さい。(もしくはF11キーを押しても良いです)
するとこのような画面になると思います。
ポイントはmain()の次の行に矢印があること。

②変数fahrの値を見てみましょう
左下のウインドウのタブでウォッチ1を選択します。
「項目をウォッチに追加する」をマウスでクリックすると入力出来るようになりますのでそこにfahrと入力して下さい。
おそらく「識別子"fahrが定義されていません"」となるはずです。
先ほどステップインして矢印が止まっている位置がfahrの宣言前の為です。

 

③F11キーもしくはデバッグ→ステップインで矢印をfor文の位置まで進めて下さい。
おそらくfahrには不明の数字が入っていると思います。
ステップインで行に入った際はまだその行を実行していないためです。

 

④さらにステップインします
for文を通過しましたのでfahrが0になっていることがわかると思います。
この時forではfahr = 0;の実行のみを行います。

⑤int celsius = 5 * (fahr-32) / 9;
ステップインをして実行する前にこの行を少しご説明します。
前回はプログラミング言語Cの本に則りmainの直後に宣言していました。
int fahr; // 華氏の値を格納する変数
int celsius; // 摂氏の値を格納する変数
これはプログラミング言語CがANSI-Cに準拠しているため、ブロックの先頭に宣言が必要なためです。

ANSI-Cの後継規格であるC-99以降は変数宣言の位置を任意の位置に置けるようになりました。
実際、この方がプログラムの可読性が向上するので本サンプルも宣言の位置を移動しています。

それではステップインを行って下さい。
celsiusに代入された値を見てみましょう。
fahrと同様にウォッチ1にselsiusを入れて下さい。
-17が入っていれば正解です。

⑥printf (“%d %d\n", fahr, celsius);
次にステップインするとこの行が実行されます。
ステップインを実行する前にfarhとcelsiusの値を確認しましょう。
0と-17ですね。

それではステップインしてみましょう。
矢印は次の行に進みました。
ウォッチ1の中身はどうでしょうか?
何も変わっていません。

それでは先ほどの実行結果はどこで確認するのでしょうか?
タスクバーを見るとコマンドプロンプトの画面があると思います
これを開くとprintf文の結果が表示されているはずです。

⑦確認出来たらさらにステップインを行います
forの行に戻りました

⑧さらもステップインして下さい
今回、fahrは20になっています。
for文では最初の一回目だけ初期化(int fahr=0)を行い、次からはfahr += 20が実行されます。

⑨どんどんステップインさせてfahrが300になるまで進めて下さい。
300が画面出力されたのを確認してステップインでforの位置まで進めて下さい。

⑩判定
実はfor文では毎回fahr <= 300の判定を行っています。
現在fahrは300ですのでfahr += 20を行うとfahrは320になってしまいます。
fahr <= 300の条件があるのでfor文から抜けるはずです。

それでは確認してみましょう。
forの中に入らずに抜けましたね。

さらにステップインをすすめるとプログラムが終了します。

お疲れ様でした。
今回はここで終了です。

 

※本プログラム教室はK&Rの「プログラミング言語C」をベースに進めています。