アプリ版:「スタンプのみでお礼する」機能のリリースについて

#include <iostream>
using namespace std;

int main()
{
int s = 1;
for(int i=0; i<5; i++){
for(int k=0; k<s; k++){
cout << '*';
}
cout << '\n';
s++;
}

return 0;
}
をコンパイラすると、
*
**
***
****
*****
の様に出力されます。
この二つの**マークの所から、なぜ、そうなるのかが理解できません。
for(int k=0; k<s; k++){
の k<s;の所は最初、0<1;となって。*が一つ出力され、k++でkが1になり'\n'で改行され、
s++でsが2になり、1<2;となり出力の2行目に*が一つでます。でも1<2なので、\nになってしまいます。
しかし、この考え方は間違っているので、理解できないのです。

要点は**がどの様な手順で出力されているのかが解りません。
**が理解できれば***や、****も理解できると思います。

for(int k=0; k<s; k++){
cout << '*';
}
のk++のインクリメントは{ }のブロック内の最後の地点で、1プラスになるのですよね? 

A 回答 (2件)

こんにちは。


1番目のforループで5回ループするのはOKですよね。
2番目のforループでは毎回k=0の初期化が実行されるので、2回目のループの時にはk<2が真の間(成り立つ間)cout<<'*'が実行されて'*'が2つ出力されますます。
3回目も同様に、k<3が真の間繰り返されるので、'*'が3つ出力されます。
    • good
    • 0
この回答へのお礼

理解できました。ありがとうございました。

お礼日時:2002/01/10 21:16

> s++でsが2になり、1<2;となり出力の2行目に*が一つでます。



ここが違う。s が2になり、までは良いのだけれど、for(int k=0; k<s; k++) のところに来ると、
また k は0から始まります。だから

  0<2 となり * が出力され
  k++ されて 1<2 となり * が出力され
  k++ されて 2<2 となり、ループを抜ける

というのが s が2のとき。

# 分かり難かったら、わからない文書を指して補足願います
    • good
    • 0
この回答へのお礼

理解できました。ありがとうございました。

お礼日時:2002/01/10 21:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!