↓のプログラムについて質問です
#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: 直角三角形を表示するプログラム
i--は、評価されるときに1減らされる前のiの値になります。
詳しくはググってください。
[search=google]後置デクリメント C言語[/search]
あと、できればコードを投稿するときは
詳しくはググってください。
[search=google]後置デクリメント C言語[/search]
あと、できればコードを投稿するときは
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 直角三角形を表示するプログラム
処理の順番の問題です
仮に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段少なく表示されます。
仮に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段少なく表示されます。