OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

多分インクリメントがよく解ってないのかも

  • 困ってます
  • 質問No.195280
  • 閲覧数26
  • ありがとう数4
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 58% (109/185)

#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
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2
レベル7

ベストアンサー率 44% (11/25)

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

お礼率 58% (109/185)

理解できました。ありがとうございました。
投稿日時 - 2002-01-10 21:16:36
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル14

ベストアンサー率 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++で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のとき。

# 分かり難かったら、わからない文書を指して補足願います
お礼コメント
yosiyosi

お礼率 58% (109/185)

理解できました。ありがとうございました。
投稿日時 - 2002-01-10 21:17:20


このQ&Aで解決しましたか?
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ