• ベストアンサー

99表

以下99表のプログラムですが、 for文の所どういう、解読がされているか教えてください。 自分では、xとyが、一づつ増えているので、 1x1 2x2 3x3 4x4 . . . のような計算かとおもったのですが。 おねがいしましす。 #include <stdio.h> int main(void) { int x,y; for (x = 1;x <= 9;x++) { for (y = 1;y <= 9;y++) { printf(" %2d ", x * y); } printf("\n"); } return 0; }

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

  • ベストアンサー
  • shippo
  • ベストアンサー率38% (1216/3175)
回答No.2

for文が入れ子になっているので、xとyの値は同時には増えません。 xの内側にyのfor文ですので、x=1のときにyが1~9まで増えて行き、次にxが1つ増えyがまた1~9まで増える。。。 というを繰り返します。 羅列すると、、、 x=1,y=1 x=1,y=2 x=1,y=3 . . . x=1,y=9 x=2,y=1 x=2,y=2 x=2,y=3 . . . x=9,y=7 x=9,Y=8 x=9,y=9 といった感じになります。

startover
質問者

お礼

すばやい回答ありがとうございます。 xの内側にyのfor文ですので、x=1のときにyが1~9まで増えて行き、次にxが1つ増えyがまた1~9まで増える。。。 こんがらかって、for文という事をわすれてますした。 すごくよく解りました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • nerosuke
  • ベストアンサー率33% (39/115)
回答No.4

No3です。 補足です。 書き忘れましたが他の皆さんが回答してくれているみたいですね。 一応・・・ x=1×y=1 ... x=1×y=9 //これを9の段まで繰り返し 2×1 ... 2×9 3×1 ... 3×9 4×1 ... 4×9 5×1 ... 5×9 6×1 ... 6×9 7×1 ... 7×9 8×1 ... 8×9 9×1 ... 9×9

全文を見る
すると、全ての回答が全文表示されます。
  • nerosuke
  • ベストアンサー率33% (39/115)
回答No.3

九九の表ですから、1の段から9の段まで表示しています。 1×1から9×9まで。 for (x = 1;x <= 9;x++) { //行を並べています 1×x ~ 9×x まで すなわち段です。(1の段 2の段・・・) for (y = 1;y <= 9;y++) { //列を並べています。 y×1 ~y×9 まで printf(" %2d ", x * y); } printf("\n"); // 改行してます。 } こんな感じです。 ちなみに普通は行にy 列にxを使いますから変数の使い方が逆です。 まあ間違いではないですが一般論です。

startover
質問者

お礼

ご回答ありがとうございます。 for (x = 1;x <= 9;x++) { //行を並べています  for (y = 1;y <= 9;y++) { //列を並べています。 なるほどそういう事だったんですね。 X,Yの使い方も教えて頂きありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • okg00
  • ベストアンサー率39% (1322/3338)
回答No.1

for (x = 1;x <= 9;x++) { の意味は xを9回だけ{}の中をくり返すということです。 この例では二重になっていますので、 x=1{ y=1, ・・・ y=9} x=2{ y=1, ・・・ y=9} とxを変えながら9回くり返します。 結局、プリント文は9x9の81回くり返されます。

startover
質問者

お礼

すばやい回答ありがとうございます。 for (x = 1;x <= 9;x++) { の意味は xを9回だけ{}の中をくり返すということです。 なるほど、そういことだったんですね。 すっきり解りました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Cの九九を表示するプログラムについて

    九九の表示を変えたいんですけど #include <stdio.h> int main(void) { int x,y; for (x = 1;x <= 9;x++) { for (y = 1;y <= 9;y++) { printf(" %2d ", x * y); } printf("\n"); } return 0; } これを実行すると 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 . . 9 . . . . . . . 81 となるのですが、これを 1 * 1 1 * 2 1 * 3 . . . 1 * 9 1 * 2 . . 1 * 9 . . . . . 9 * 9 と表示させたいのですがどなたか知恵を貸していただきませんでしょうか?

  • 計算が終わらないはずなのになぜか終わる?

    以下のプログラムをVisual stadio 6.0でコンパイルし プロジェクトの構成をWin32 releaseを選択し実行したら一瞬で計算が終わりました。約2^64の計算量であるので明らかに終わらないはずなのですがどうしてなんでしょうか? #include <stdlib.h> #include <stdio.h> void main() { unsigned int y; unsigned int x3; unsigned int out[16]={0}; for(y=0x1;y<=0xfffffffe;y=y+0x1){ for(x3=0x1;x3<=0xfffffffe;x3=x3+0x1){ x3 = x3 +1; y = y + 1; out[15] = y; } } //printf("%0x\n",out[15]); }

  • 配列について

    初歩的な質問ですいませんが、質問よろしくお願いします。 ◎1----------------------------- #include<stdio.h> int main(void) { char ss[10]="AB"; printf("ss=%s\n",ss); return 0; } ------------------------------------ ◎2-------------------------------- #include<stdio.h> int main(void) { char ss[10]; ss[0]='A'; ss[1]='B'; ss[2]=0; printf("ss=%s\n",ss); return 0; } ----------------------------------- ◎3------------------------------- #include<stdio.h> #include<string.h> int main(void) { char ss[10]; strcpy(ss,"AB"); printf("ss=%s\n",ss); return 0; } ----------------------------------- ◎4------------------------------- #include<stdio.h> int main(void) { char ss[10]; ss="AB"; printf("ss=%s\n",ss); return 0; } ---------------------------------- 以上4つのプログラムで、◎2と◎3は正常に動くと理解できたのですが、何故、◎1は正常に動き、◎4は「'const char [3]' から 'char [10]' に変換できません。」といったようなエラーが出てしまうか分かりません。 教えていただければ嬉しいです。

  • for文を使ったプログラムで困っています

    for文を使って、10000からある数xを何回引けるか?またその残りを求めるプログラム(例:10000から3000は3回引くことができ、残りは1000である。)を作りたいのですが、引く回数が1多くなってしまいます。どこがいけないかわからないので困っています。よろしくおねがいします。 #include<stdio.h> void main() { int x; int Sa = 10000; int y; printf("10000以下の数を入力してください:"); scanf("%d",&x); for(y = 1; y*x <= 10000 ; y++) { Sa = Sa - x; } printf("10000から%d回引くことができます。\n",y); printf("残りは%dです。",Sa); }

  • C言語の質問です。

    #include"stdio.h" int main(void){ int a, b, add; scanf_s("%d%d", &a, &b); add = a+b; printf("add=%d\n", add); return 0; } と、------------------------------------------------------------------------------ #include"stdio.h" int tasizan(int x, int y); int main(void){ int a, b, add; scanf_s("%d%d", &a, &b); add = tasizan(a, b); printf("add=%d\n", add); return 0; } int tasizan(int x, int y){ int aa; aa = x + y; return aa; } の違いを教えてください。

  • プログラムの練習問題をやっていたのですが、練習問題の答えのような実行結

    プログラムの練習問題をやっていたのですが、練習問題の答えのような実行結果にならないので教えていただけませんか? 下記に記したプログラムを実行すると x=9 y=-9 [ 9]*[-9]=[ -81],[ 9]*[-8]=[ -72],[ 9]*[-7]=[ -63],・・・・ ・・・・ [10]*[-9]=[ -90],[10]*[-8]=[-80],・・・・ ・・・・ のようになるのですが、 x=9 y=-9 [ 9]*[-9]=[ -81],[10]*[-9]=[-90],・・・ [ 9]*[-8]=[ -72],[10]*[-8]=[-80],・・・ [ 9]*[-7]=[ -63],・・・ ・・・・ のようにするためにはどうすればいいですか? #include <stdio.h> int main(void) { int x,y,m,n; printf("x="); scanf("%d",&x); printf("y="); scanf("%d",&y); for(m=x;m<=x+3;m++) { printf("\n"); for(n=y;n<=y+14;n++) { printf("[%2d]*[%2d]=[%4d],",m,n,m*n); } printf("\n"); } return(0); }

  • c言語 パスカルの三角形

    c言語でパスカルの三角形を出力するプログラムを作りたいのですが、上手くいきません。 何を直せばいいのか教えてください。 #include <stdio.h> #define N 10 int main(void){ int i, j = 1, x, y; int d[N][N]; /* 三角形を作成 */ for (i = 1 ; i < N ; i++){ d[i][0] = 1; while (j <= i - 1){ d[i][j] = d[i-1][j-1] + d[i-1][j]; j ++; } } /* 三角形の表示 */ for (y = 0; y < N; y++) { for (x = 0; x < N-y; x++) printf(" "); for (x = 0; x < y; x++) printf("%3d ", d[x][y]); printf("\n"); } return 0; } 実行結果 -2147417616 2665208 1629976532 1627572249 1629101723 1 1629982744 2665256 2665548 3407923 1629345053 1627571017 0 3538997 1629739051 10 1629345053 2665368 3670071 2665384 1629739040 1627927140 2665244 1628040295 57 1628810863 1629476960 1628602749 2665560 2665304 1629345053 0 1629739040 1629740576 1628992224 2 4411498 1628040588 -2147417600 0 1629476960 1629740664 1629739040 1 267574 0

  • 九九表について

    C言語で九九表を書いているのですが #include <stdio.h> #include <stdlib.h> int main(){ int i, j; int resultOf9x9[] = ???; for (i = 1; i <= 9; i++) { for (j = 1; j <= 9; j++){ printf("%d ", resultOf9x9[i*j]); } printf("¥n"); } exit(0); } 初期値の設定の???の部分をどう宣言していいかわかりません。 よろしくお願いします。

  • 配列要素内の数値

    #include <stdio.h> int main(void) { int arr[1]={123456789}; int *x[1]; *x = arr; printf("%d ",*(x[0])); /* 123456789 と表示*/ return 0;} 実行すると123456789と表示されるまでは分かるのですが、*(x[0])の部分を別の書き方にして、arr[0]に入ってある「123456789」という数値の千の値である6という数値のみを取り出して、表示することは可能なのでしょうか?(6000と取り出したいのではなく、6として取り出したい) 次のように数値を文字列の一つ一つを扱うかのように、扱いたいのです。*(x[0])の部分の変更だけで6を取り出せるような方法はありますか? #include <stdio.h> int main(void) { char *arr[]={"pen"}; printf("%c\n",*(arr[0]+0)); printf("%c\n",*(arr[0]+1)); printf("%c\n",*(arr[0]+2)); return 0;}

  • 二次元配列の対各成分を書き出すプログラムについて

    実行結果が3,5,7を書き出すプログラムを作成したいです。1,5,9を書き出す(以下のプログラム)を書き出すものは出来たのですが、3,5,7を書き出すプログラムが解りません。誰か解る方、教えて下さい。 #include<stdio.h> int main(void){ int i,mt[3][3]= {{1,2,3}, {4,5,6},     {7,8,9}}; for(i=0;i<3;i++){ printf("%d",mt[i][i]); } printf("\n"); return(0); }