知識、知恵のカタマリ

[PR]コレがGoogleの検索ストーリー

お蔵入り

clip!clip!
Ads By Google

while(n--)についてです。

 C言語を習いたてのものです。これは「整数を入力し、それを倍々し、10個書き出すプログラム」
なんですが、n--が初期値から1ずつ減らすだけでなく、(n--)自体に「nが0(以下)になったら(ここでは{}内を)実行しない」という意味もあるんですか?
int a, n = 10;
printf("aを入力 > ");
scanf("%d", &a);
while (n--) {
printf("%d ", a);
a *= 2;
}return 0;

2007-10-16 13:26の質問
この質問は、30日間解決しなかったために自動的に質問が一旦閉じられました。

回答(1)

1.

2007-10-16 14:28:20
C言語では0(ゼロ)は、条件として評価された場合、偽として評価されます。
マイナスの値は、偽ではありませんが、この場合マイナスになる前に0が評価されてループを抜けます。
自信度 : 自信あり 回答レベル : 回答
Ads By Google

コメント(4)

#1.  imq
2007-10-16 14:12:43

時間がないのでヒントだけ。

1. C言語では正の値を持つ条件式をTRUE(真)、0以下の値を持つとFALSE(偽)とします。

2. while文は条件式がTRUEでループし、FALSEになるとループから出ます。(←これは分かっていますよね)

3. 「n--」は変数nの1を引く演算ですが、式自体は引く前の値を持ちます。

そこを踏まえて、良回答が入るまでちょっと考えてみて下さいね。

2007-10-16 14:19:49

>>#1
falseは0だけで、それ以外はtrueかな。
どちらにしても、intをboolに読み替えている教育的にはよくないプログラムですね。

>1987さん
解決に至っていない過去のご質問を処理して下さい。

#3.  imq
2007-10-16 14:25:18

>>#2
失礼しました。

教育的にはよくないプログラムですね
効率優先の組み込み用プログラムみたいな^^

2007-10-17 12:01:35

n=10;while(0<n--){
 a=a<<1;printf("n=&d,a=%d\n",n,a);
} printf("(n=%d,a=%d)\n",n,a);

という風にnの値の動きも観察すれば理解が深まるかと。

トラックバック(2)

トラックバックURL: