この穴埋め問題の疑問 – 固定ページ 2 – プログラミング – Home

通知
すべてクリア

この穴埋め問題の疑問

固定ページ 2 / 2

五
 五
(@五)
ゲスト
結合: 19年前
投稿: 7
Topic starter  

whileの中では、>0という条件でしたけど、その後の
a[i]の部分では、iに0まで入れることができると
考えていいんですかね?1までではなく。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>whileの中では、>0という条件でしたけど、その後の
>a[i]の部分では、iに0まで入れることができると
>考えていいんですかね?1までではなく。
イマイチ理解できてないぽいですが。。。

以下のソースをコンパイル実行してください。
# コンパイラがないならば
# http://www9.plala.or.jp/sgwr-t/detail/EnvSet.html
# を参考に手に入れてください。

#include <stdio.h>

#define MAX 5

int main( void )
{
int i;
int a[ MAX ];

i = 5;
while ( printf( whileの条件式中 i = %d\n, i ), i-- > 0 )
{
printf( whileの条件式後 i = %d\n, i );
a[ MAX - i - 1 ] = 9 - 2 * i;
printf( a[ %d ] = %d\n\n, MAX - i - 1, a[ MAX - i - 1 ] );
}
return 0;
}


返信引用
五
 五
(@五)
ゲスト
結合: 19年前
投稿: 7
Topic starter  

>whileの中では、>0という条件でしたけど、その後の
>a[i]の部分では、iに0まで入れることができると
>考えていいんですかね?1までではなく。
とりあえず、これがYESかNOかだけをお聞きしたいのです。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>とりあえず、これがYESかNOかだけをお聞きしたいのです。
私的には NO で。

そのような返信をする前に、ちゃんとレス読んでますか?

i = 1;

while ( i-- > 0 )
{
// ここの i の値は 0 ですよ!
}

# これ以上のレスはしないようにします。
# もっと説明のうまい方におねがいしてください。


返信引用
reshia
 reshia
(@reshia)
ゲスト
結合: 20年前
投稿: 117
 

# まとめ。
whileの条件式中では、iは5,4,3,2,1,0,-1の値をとります
whileに続く文の中、a[i]のiは、4,3,2,1,0の値をとります
whileを抜けた後のiは、-1

わからないというなら、
もっと自分でプログラムをつくることです・・・(ウダウダ)
習うより慣れろ・・・(ウダウダ)

# まとめへの疑問(自己)
whileの条件式中に-1になりますよね?
条件評価が終わった後に、whileを抜けるのか?
ディクリメントした後に、whileを抜けるのか?


返信引用
五
 五
(@五)
ゲスト
結合: 19年前
投稿: 7
Topic starter  

>whileの条件式中では、iは5,4,3,2,1,0,-1の値をとります
i>0という条件下で、なぜ0と-1が入るのでしょうか?


返信引用
reshia
 reshia
(@reshia)
ゲスト
結合: 20年前
投稿: 117
 

> i>0という条件下で、なぜ0と-1が入るのでしょうか?
0のときに条件が評価されて、whileを抜けるし、
whileを抜ける前に i-- されるから。


返信引用
reshia
 reshia
(@reshia)
ゲスト
結合: 20年前
投稿: 117
 

ちょっと違うか。
whileの条件式が評価されて、i--されてから
条件式が真か偽かでwhile続行か終了かに処理が流れる。

だから、0>0は偽でwhileは抜けるんだけど、while終了の前にi--されてiは-1。

Blueさんの書き込みのソース
>Blue 2005/06/14(火) 23:18:20
では、5から0まで。
whileを抜けた後のiの値も0。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

前置デクリメントと後置デクリメントが値を更新するタイミングを
考えれば、自ずと答えは出てきます。
この辺はしっかり理解した方がいいです。
パターンだけで覚えてしまうと応用が効きませんから。

ちゃんと理解して無いと

i = 5;
while(i-- > 0)
{
   :
   :
}

このループの後、iの値がいくつになっているか理解できない事になります。
このループの後にiの値を利用するような場面があった時に困る事になると思いますよ。


返信引用
超初心者
 超初心者
(@超初心者)
ゲスト
結合: 23年前
投稿: 139
 

> whileの中では、>0という条件でしたけど、その後の

> i>0という条件下で、なぜ0と-1が入るのでしょうか?
など
これら発言から考えて後置インクリメントを無視してますな。

while( i-- > 0 )
{
a[i] = 9 - 2 * i;
}
は、
while( i > 0 )
{
i = i - 1;
a[i] = 9 - 2 * i;
}
i = i - 1;

同じ結果だろ。


返信引用
固定ページ 2 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました