ヒント
1.必要になる変数と初期化
1)キーボードから受け取った値を入れる「入力値変数 x」 (整数型)
2)値を何回受け取ったかをかぞえる「カウンタ変数 count」 (整数型)
初期値は0でなければならない
3)合計を入れる「合計値用変数」 (整数型 sum)
初期値は0でなければならない
4)平均を入れる「平均値用変数」 (浮動小数点型 average)
2.素朴な考え方
この作業はつぎの3つから成り立っている
1)変数をクリアする
「カウンタ変数 count」と「合計値用変数 sum」を0にする
2)値をキーボードから複数受け取る作業(負の値が入力されたら終わる)
以下の4つの作業をループ
1: 値を1つキーボードから受け取り,「入力値用変数 x」に入れる
2:「入力値用変数」の値が正の値だったら次に進み,そうでなかったら,まとめ作業Aに移る
3:「カウンタ変数 count」の値を1増やす
4:「合計値用変数 sum」に「入力値用変数 x」を加える
ループ作業は無条件で継続するが,ループの途中で脱出口がある。
3)まとめ作業Aの内容
「合計値用変数 sum」の値と「カウンタ変数 count」の値から平均値を計算して,「平均値用変数 average」に入れる
「合計値用変数 sum」の値と「平均値用変数 average」を表示する
3.ループ作業は無条件で継続するが,ループの途中で脱出するプログラム
4.ループの途中で脱出するプログラム無条件ループは while(1){ ・・・ } のように書くことができる。
ループ中からの緊急抜け出しは if (xxxxx) break; と書くことができる。
これをプログラムとして構成すると次のようになる。
while (1) {
1: 値を1つキーボードから受け取り,「入力値用変数 x」に入れる
2: if (「入力値用変数 x」<= 0) break;
3:「カウンタ変数 count」の値を1増やす
4:「合計値用変数 sum」に「入力値用変数 x」を加える
}
このプログラムは,文法的には正しく。このままで通用する。
「カウンタ変数」を0に初期化
「合計値用変数」を0に初期化
while (1) {
1: 値を1つキーボードから受け取り,「入力値用変数 x」に入れる
2: if (「入力値用変数 x」<= 0) break;
3:「カウンタ変数 count」の値を1増やす
4:「合計値用変数 sum」に「入力値用変数 x」を加える
}「合計値用変数」の値と「カウンタ変数」の値から平均値を計算して,「平均値用変数」に入れる
「合計値用変数」の値と「平均値用変数」を表示する
「3.」で考えたプログラムは,文法的には正しく。このままで通用する。
しかし,途中脱出のあるループは,大きなプログラムの場合,読みにくいとして嫌われることが多い。
ループからの脱出はループの最上部または最下部であるべきとする考え方である。「3.」で考えたプログラムは大枠として次の構成になっている。
ループ前作業
while (1) {
作業A
if (xxxx) break;
作業B
}
ループ後作業
このプログラムは次の形に変形できる。
さらに次の形に変形できる。
ループ前作業
作業A
while (1) {
if (xxxx) break;
作業B
作業A
}
ループ後作業
ループ前作業
作業A
while (yyyy) {
作業B
作業A
}
ループ後作業
こうすると,作業Aを2回記述することにはなるが,ループからの脱出をループの最上部にすることができる。
プログラムとして構成すると次のようになる。
「カウンタ変数」を0に初期化
「合計値用変数」を0に初期化
1: 値を1つキーボードから受け取り,「入力値用変数」に入れる
while(「入力値用変数」の値が正の値だったら){ ←ここが2:
3:「カウンタ変数」の値を1増やす
4:「合計値用変数」に「入力値用変数」を加える
1: 値を1つキーボードから受け取り,「入力値用変数」に入れる
(次の作業のために,値を1つキーボードから受け取る)
}「合計値用変数」の値と「カウンタ変数」の値から平均値を計算して,「平均値用変数」に入れる
「合計値用変数」の値と「平均値用変数」を表示する