• ベストアンサー

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

#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プラスになるのですよね? 

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

  • ベストアンサー
  • pikacchu
  • ベストアンサー率44% (11/25)
回答No.2

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

yosiyosi
質問者

お礼

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

その他の回答 (1)

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

> 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
質問者

お礼

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

関連するQ&A

  • 教えてください

    #include<iostream> using namespace std; int main() { int i; double a[5]; for(i = 0; i < 5; i++){ a[i] = 0.0; } for(i = 0; i < 5; i++) cout << "a[" << i << "] = " << a[i] << "\n"; return 0; } どこが違うんでしょうか? 出力を0.0にしたいんですけど ならないので教えてください。

  • アドバイスお願いします

    二つの顔文字を横移動しながら交互に変換したいんですけど 横移動しながら変換できるようにはなったんですけど 一番最初に顔文字が残ってしまい不自然なんですけどどうすれば消えるでしょか?アドバイスお願いします #include<iostream> using namespace std; int main() { int i,k,t; char str[] = "(~~)"; char str2[] = "(<>)"; for(i = 1; i < 10; i++){ cout << " "; for(k = 0; k < i; k++){ cout << " "; } for( t = 0; t < 2000; t++ ) if( i % 2 == 0 ){ cout << str; cout << '\r'; }else{ cout << str2; cout << '\r'; } } cout << "\n"; return 0; }

  • C++での、素数の表を作成するプログラムについての質問です。

    C++での、素数の表を作成するプログラムについての質問です。 配列を使用して、2~71までの素数を表に埋め込みたいのです。 プログラム本体はここまで出来ているのですが、 素数を求める計算の方法がイマイチわかりません。 #include<iostream> #include <iomanip> using namespace std; #define N 20 int main() { int arry[N]; /********************************* ここでforを用いた反復で計算を行う **********************************/ /********************* 配列変数の内容を出力 *********************/ for(int i=0;i<N;i++) cout << "+--" ; cout << "+\n" ; for(int i = 0; i < N; i++ ) cout << "|" << setw(2) << arry[i] ; cout << "|\n" ; for(int i = 0; i < N; i++ ) cout << "+--" ; cout << "+\n" ; return 0; } for文を使用した反復構造でarry[N]に2~71までの数字をいれていきたいです。 お願いします。 なお、 int arry[N]={2,3,5,7…} や arry[0]=2; arry[1]=3; arry[2]=5; …のように入力してはいけないのです。

  • 関数呼び出しについて

    今cygwin 上でC++の勉強をしているのですが 以下の2つのプログラムの違いがよくわかりません どなたかよろしくお願いします <プログラム1> #include<iostream> using namespace std; int a(); int main(){ cout << abs();  return 0;} int a(){ cout << "test\n";  return 1;} <プログラム2> #include<iostream> using namespace std; int a(int i); int main(){ cout << a(1);  return 0;} int a(int i){ cout << "test\n";  return i;} プログラム1では関数a()内の"test"が出力されるのですが プログラム2ではa(int i)内の"test"は出力されません。 この違いはどこにあるのでしょうか? 同じプログラムでint a() と int a(int i)を double a() と double a(double d)にすると この違いは生じません。なぜaの戻り値をint に設定したときだけ この違いが生じるのでしょうか?

  • 設定した値が意図せぬ値に

    POJ 3176の問題です。 http://poj.org/problem?id=3176 #include <iostream> #include <algorithm> #define MAX 100 using namespace std; int main() { int n; cin >> n; int line[n-1][MAX]; int num[n-1][MAX]; cin >> line[0][0]; if(n==0) { cout << 0 <<endl; return 0; } else if(n==1) { cout << line[0][0] << endl; return 0; } for (int i =1;i < n;i++) { for (int j=0;j < i+1;j++) { int x; cin >> x; line[i][j]= x; } } for (int k= 0 ; k<n;k++) { num[n-1][k]= line [n-1][k]; } for (int k= n-2; k > 0 ; k--) { for (int l=0 ; l<k+1; l++) { num[k][l] = max (num[k+1][l],num[k+1][l+1]) + line[k][l]; } } num[0][0] = max(num[1][0],num[1][1]) + line[0][0]; cout << line[0][0] <<" "<<num[0][0]<<endl; return 0; } 入力 4 3 1 3 1 2 3 1 3 4 5 出力 1 12 最後に出力でline[0][0]をするようにしているのはバグチェックのためです。 ここで僕がわからないのはどうしてline[0][0]が3で宣言し、ほかでいじっていないにも関わらず、最後に1になっているのかということです。 どなたかわかる方がいらっしゃったらよろしくお願いします。

  • C++で縦の棒グラフ

    #include<iostream> #include<ctime> using namespace std; int main() { int a[7]; int k; int j; srand(time(NULL)); for(k = 0; k < 7; k++) a[k] = rand() % 10 + 1; for(k = 0; k < 7; k++){ cout << "a[" << k << "] = "; for(j = 0; j < a[k]; j++) cout << "*"; cout << "\n"; } cout << "-------------\n"; cout << "0 1 2 3 4 5 6\n"; return 0; } グラフを作ってみようと挑戦したんですけど 横の棒グラフは作ることはできたんですけど 縦の棒グラフを作ろうして、下の部分はできたんですけど その上に*をランダムの数だけ表示さす方法がわかりません。 どうしてらよいでしょうか?

  • 単純挿入法を入れたいんですけど・・・

    #include <iostream> #include <iomanip> #include <cstdlib> //rand関数を使うので using namespace std; void Sort(int *s, int n); //プロトタイプ int main() { const int N = 100; int a[N], i, r, temp; for(i = 0; i < N; i++) a[i] = i; for(i = 0; i < N; i++){ r = rand() % N; temp = a[i]; a[i] = a[r]; a[r] = temp; } cout << "整列前\n----\n"; for(i = 0; i < N; i++) cout << setw(4) << a[i]; cout << '\n'; Sort(a, N); cout << "整列後\n----\n"; for(i = 0; i < N; i++) cout << setw(4) << a[i]; cout << '\n'; return 0; } void Sort(int *s, int n) { //この部分を補って完成させること }

  • コンパイルはできるのですが

    C++入門者です。C言語の範疇です。 コンパイルはできるのですが、実行すると ”問題が発生したため、*****.exe を終了します。 ご不便をおかけして申し訳ありません。” というウィンドウがででしまします。 どこで誤っているのかわからなくて困っています。 どなたかご教授願えないでしょうか。 どうかよろしくお願いいたします。 -----プログラム内容です。----- #include<iostream> using namespace std; int main() { char *s1 ,*s2; cin >> s1; for (int i=0;i <= strlen(s1)-1;i++) { *(s2+i) = *(s1 + strlen(s1) - 1 - i); } *(s2+strlen(s1)) = '\0'; cout << s1 << '\n'; cout << *(s2) << '\n'; return 0; } --------------------------------------

  • 配列のプログラムですが

    #include <iostream> using namespace std; int main() { int a[100],b=-9999; int i=0,j; do { cout << "整数値を入力してください\n"; cin >> a[i]; b += a[i]; i++; }while( a[i-1] != 9999); cout << b << '\n'; for(j=0;j<i-1;j=j+1) cout << a[j] * 3 << '\n'; return 0; } このプログラムってどんな計算をしてるんですか?誰か分かる人いますか 整数値を入れてくださいって出るだけなんですが

  • 素数

    Limit以下の素数をすべて表すプログラムなんですが実行した結果 ________________________________ Input Upper Limit:11 s[0]=3 s[1]=5 s[2]=5 s[3]=5 s[4]=7 s[5]=7 s[6]=7 s[7]=7 s[8]=7 s[9]=9 となるんですが s[0]=3 s[1]=5 s[2]=7 s[3]=9 にしたいですがどうすればいいのでしょうか? 教えてください。 ________________________________ #include<iostream> using namespace std; int main(void) { int Limit; int i,j,n; int s[256]; n=0; cout<<"Input Upper Limit:"; cin>>Limit; for(i=1;i<Limit;i++) { for(j=2;j<i;j++) { if(i%j==0) break; s[n]=i; cout<<"s["<<n<<"]="<<s[n]<<"\n"; n++; } } return 0; }