解決済

複数の数値を読み込み、0を読み込むと、それまでに入力した最大の数を書き出して停止するプログラム。

コレが先生による回答例ですが、
#include <stdio.h>
int
main()
{ int n, max;
max = 0;
do { scanf("%d", &n);
if (max < n) max = n;
} while (n != 0);
printf("%d\n", max);
return 0;}

while以下はnが0でないときですよね。では、nが0になった時に最大値を出す作業はどれになりますか?

2007-11-15 12:26の質問
この質問と回答を読んで役に立った場合は「役に立つ質問」に投票してください。投票が多い質問は、役に立つ質問一覧に掲載され、より多くの人に見てもらうことができます。
Ads By Google

回答(1)

1.

2007-11-16 03:50:59ベスト
do {...} while();
の場合は、(最初の一回は無条件で実行し)条件が成り立つ間doブロックを実行します。
なので、nが0になった時にループを抜け出し、
while以下(より後の部分)の実行をします。
最大値は最初に仮に0にしておきループの度に更新の必要がある時には更新されています。
実質その部分で最大値を求めていることになります。
ループを抜けた時には最大値が既に求められているので後は表示するだけです。
「nが0になった時に最大値を出す作業はどれになりますか?」:printfの行
自信度 : 自信なし 回答レベル : 回答

ありがとうございます。 なぜ? ではなく、
do {...} while(); の書き方ですね。

Ads By Google

コメント(3)

#1.  きゅー
2007-11-15 17:03:18

この例解はwhile構文ではなくてdo-while構文を使ってるのです。

while(条件)を満たしている限りはdo{}の部分を繰り返し、while(条件)を満たさなかったらループを抜け、次の行を実行します。

詳しくは参考書などで調べてみるといいかもしれません。

#2.  1987
2007-11-19 01:54:58

while (n != 0);
printf("%d\n", max);
はdoがないときはnが0でない時maxを繰り返し出しますが、do while文では逆になるんですか?
通常の場合のようにnが0でない時maxを表示し続けるではないのですね。

#3.  BLUEPIXY
2007-11-24 03:18:30

>>#2 do while文では逆になるんですか?
do ... while( );
の時while の条件の後に文区切りであるセミコロンがあることに注意。
一般にループ(の構造)には、ループの最初でループを続けるかどうかのテストをする場合と、ループの最後にテストする場合があります(それ以外の場合もありますが・)。
while は、最初にテストするループであり、
do while は、(C言語の場合)最後にテストするループになります。
それぞれそのような別のループを表現しているのであって、
したがって通常とかそうでないとかでなく、別の構文であるということです。

トラックバック

トラックバックURL: