ページ 11

直角三角形を表示するプログラム

Posted: 2010年12月18日(土) 15:39
by campus
↓のプログラムについて質問です

#include <stdio.h>

void put_stars(int no)
{
while (no-- > 0)
putchar('*');
}

int main(void)
{
int i,ln;

printf("何段ですか?:");
scanf("%d",&ln);

for(i=1; i<=ln; i++)
{
put_stars(i);
putchar('\n');
}

return 0;

}

これは任意の直角三角形を表示するプログラムです。
何段ですか?:5 と入力すると、
*
**
***
****
*****
しかし、これはfor文でi=1~5を用意してi=1から順にwhile文で処理していますよね。
i=1のとき、i-- >0は条件を満たさないのに、ここで処理が終了せず、ちゃんと5段まで表示できるのはなぜですか?
初歩的なことかもしれませんが解説していただけたらと思います。

Re: 直角三角形を表示するプログラム

Posted: 2010年12月18日(土) 16:15
by みけCAT
i--は、評価されるときに1減らされる前のiの値になります。
詳しくはググってください。
[search=google]後置デクリメント C言語[/search]
あと、できればコードを投稿するときは

コード:

タグを使ってください。

Re: 直角三角形を表示するプログラム

Posted: 2010年12月18日(土) 16:23
by motuna
処理の順番の問題です
仮にvoid put_stars(int no)
{
while (--no > 0)
putchar('*');
}
こうすると1段少なく表示されてしまいます。

これはno--がnoの値を減らしたあとno>0を調べるのではなくno>0をしてからno--で値を減らすためです。
よってno--の場合、no=1のときまずno(1)>0を調べるため条件を満たしwhileのなかの処理を実行します。

なお--noの場合はまずnoを1減らした後にno>0を調べるため、no=1で入ってくればnoは0になり、条件no>0を満たさないので1段少なく表示されます。

Re: 直角三角形を表示するプログラム

Posted: 2010年12月18日(土) 17:55
by campus
お二人とも回答ありがとうございましたm(_ _)m 理解できました