scanf を使ったdo while練習 (変数を使う練習)

1 リットルで20Km 走る車があるとします。給油の入力をした後で、走行距離(Km) を入力する繰り返しを行います。 走行によって、燃料の残量が0 以上であれば繰り返し続けます。 最後に全走行距離と、燃料の残量を表示して終了させます。 (以下に実行例を示します。が入力です)

給油(初期燃料)入力>1
1回目の走行距離(km)入力>10
残り燃料は 0.50リットルです。 2回目の走行距離(km)入力>3
残り燃料は 0.35リットルです。 3回目の走行距離(km)入力>3
残り燃料は 0.20リットルです。 4回目の走行距離(km)入力>3
残り燃料は 0.05リットルです。 5回目の走行距離(km)入力>3
残り燃料は -0.10リットルです。
全走行距離は、 19.00km で、燃料の残量は、 0.05 リットルです。

いつもながら、1の処理だけをプログラミングしますが、同時に
どんな変数を必要とするか考えます。

給油(初期燃料)入力>1
1回目の走行距離(km)入力>10
残り燃料は 0.50リットルです。 2回目の走行距離(km)入力>3
残り燃料は 0.35リットルです。 3回目の走行距離(km)入力>3
残り燃料は 0.20リットルです。 4回目の走行距離(km)入力>3
残り燃料は 0.05リットルです。 5回目の走行距離(km)入力>3
残り燃料は -0.10リットルです。
全走行距離は、 19.00km で、燃料の残量は、 0.05 リットルです。

一見して違うように見えますが、     の部分は、 全く同じ処理で、これを繰り返しています。
必要な変数は、『回数』、『燃料入力と燃料残り』、『距離入力用』、『全走行距離』が挙げられます。 次のような一回分の処理になるでしょう。

#include <stdio.h>

main()
{
	int n = 0;		/* 回数 */
	double nenryou;		/* 燃料入力と燃料残り(リットル) */
	double kyori;		/* 距離入力用 */
	double soukyori = 0;	/* 全走行距離 */

	printf("給油(初期燃料)入力>");
	scanf("%lf",&nenryou);

	n = n + 1;
	printf(" %d回目の走行距離(km)入力>", n);
	scanf("%lf", &kyori);
	nenryou = nenryou - kyori / 20;	/* 使った燃料を減らす */
	printf("残り燃料は %6.2fリットルです。", nenryou);
	soukyori = soukyori + kyori;
}

正しく動いたら、do { と }while(条件);で囲み、 繰り返しになっていない最後の一行を追加すれば出来上がりです。

最後に追加した表示で、全走行距離が合いません。燃料がない場合でも走行距離を増やしているからです。 soukyoriの計算する行を繰り返しの先頭に移動します。そして、距離入力用の変数を0に初期化する修正をすることで直しましょう。
(このように繰り返しでは、順番を入れ替えた方がよい場合もあります。いろいろなケースを検討しましょう。)

←正しく修正してからクリックください。

←わからない場合は、クリック