- ベストアンサー
多分インクリメントがよく解ってないのかも
#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プラスになるのですよね?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 1番目のforループで5回ループするのはOKですよね。 2番目のforループでは毎回k=0の初期化が実行されるので、2回目のループの時にはk<2が真の間(成り立つ間)cout<<'*'が実行されて'*'が2つ出力されますます。 3回目も同様に、k<3が真の間繰り返されるので、'*'が3つ出力されます。
その他の回答 (1)
- a-kuma
- ベストアンサー率50% (1122/2211)
> 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のとき。 # 分かり難かったら、わからない文書を指して補足願います
お礼
理解できました。ありがとうございました。
お礼
理解できました。ありがとうございました。