***すれ立てるまでもない質問はここで 第15刷***
■ このスレッドは過去ログ倉庫に格納されています
0254あいぼりい
NGNG187ページの11番です。
次のコードが無限ループになり得るか説明せよ。
( i および j の値がループの本体で変更されないと仮定する。)
printf("2つの整数を入力せよ: ");
scanf("%d%d",&i, &j);
while(i * j < 0 && ++i != 7 && j++ != 9) {
....../* 何らかの処理を行う */
}
---------------------------------------
わすは、以下のように考え、無限ループにならないとしました。
各条件は&&で結ばれているので、1つでも0(偽)となるとwhile外にでてしまう。
iとjがともに正の数になるとwhile外に出てしまう (i * j < 0)
だから、iとjは正負が逆でないといけない。
ijいずれかは、負数になるから、whileから抜ける条件値(iなら7,jなら9)
より小さい。
インクリメントされ続けると、やがてi == 7,j == 9となるため
条件が偽となりwhileから抜けざるを得ない。
よって無限ループになり得ない。
わすの思い違いで、実は無限ループになるんすかね?
■ このスレッドは過去ログ倉庫に格納されています