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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
campus

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

#1

投稿記事 by campus » 9年前

↓のプログラムについて質問です

#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段まで表示できるのはなぜですか?
初歩的なことかもしれませんが解説していただけたらと思います。

アバター
みけCAT
記事: 6247
登録日時: 9年前
住所: 千葉県
連絡を取る:

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

#2

投稿記事 by みけCAT » 9年前

i--は、評価されるときに1減らされる前のiの値になります。
詳しくはググってください。
[search=google]後置デクリメント C言語[/search]
あと、できればコードを投稿するときは

コード:

タグを使ってください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

motuna

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

#3

投稿記事 by motuna » 9年前

処理の順番の問題です
仮に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段少なく表示されます。

campus

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

#4

投稿記事 by campus » 9年前

お二人とも回答ありがとうございましたm(_ _)m 理解できました

閉鎖

“C言語何でも質問掲示板” へ戻る