• 締切済み

二次元配列についての質問です。

1~9の数字を9,8,7,6,5,4,3,2,1と出力するようなプログラムを作成しているのですが、解りません。一応ある程度(以下のプログラム)出来たのですが、何処をどう直せばいいか解りません。何処を直せばいいか教えて下さい。 #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("%3d",mt[i][i]); } printf("\n"); return(0); }

みんなの回答

  • 82ken
  • ベストアンサー率0% (0/2)
回答No.7

二次元を使いたいのであれば、カウンター変数は二つ用意する事が 一般だと思われます。 mtの宣言は、質問のままだとして、ロジック部分は、順次的に デクリメントし、以下になるかと思われます。 int i,j; for(i=2;0<=i;i--){ for(j=2;0<=j;j--){ printf("%d,",mt[i][j]); } }

全文を見る
すると、全ての回答が全文表示されます。
  • kakuritsu
  • ベストアンサー率23% (62/261)
回答No.6

>1~9の数字を9,8,7,6,5,4,3,2,1と出力するようなプログラム 言葉通りだったら、以下でよいのでは? #include <stdio.h> int main(void){ printf("9,8,7,6,5,4,3,2,1"); } 何で配列が必要なのか、さっぱりわかりません!

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

どうしても2次元配列を使いたいのであれば、 #include <stdio.h> int main(void) { int mt[3][3] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }, }; int i, j; for (i = sizeof(mt) / sizeof(mt[0]) - 1; i >= 0; --i) { for (j = sizeof(mt[0]) / sizeof(mt[0][0]) - 1; j >= 0; --j) { printf("%d%s", mt[i][j], (i != 0) || (j != 0) ? "," : ""); } } putchar('\n'); return 0; }

全文を見る
すると、全ての回答が全文表示されます。
noname#77845
noname#77845
回答No.4

#3さんへ 「これは、仕様に合っていないかもしれません。」 そうかもしれません。ただ質問者さんの記載した物を使っただけ(配列の部分を削除しただけ)ですから。(w 「数値どうしをカンマでつなぐことになっているようです。」 なるほど…。では、 #include <stdio.h> int main(void){ int i; for(i=9;i>1;i--){ printf("%d,",i); } printf("%d\n",i); return(0); } で、どうだろう…。

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

>#1さん >printf("%3d",i); これは、仕様に合っていないかもしれません。 >9,8,7,6,5,4,3,2,1 数値どうしをカンマでつなぐことになっているようです。

全文を見る
すると、全ての回答が全文表示されます。
  • kirinoma
  • ベストアンサー率53% (288/542)
回答No.2

確かに#1さんのおっしゃる様に意図がいまいちつかめませんね. 推測されるのは,以下でしょうか. ・二次元配列の要素の入替え(上下・左右反転,縦横置換など) ・一定規則による数字の置換(入力が1なら9を出力,入力が6なら4を出力.つまり入力がNなら(10-N)を出力) 現状で回答できるのはこの程度です.

全文を見る
すると、全ての回答が全文表示されます。
noname#77845
noname#77845
回答No.1

補足してください。 何をどうしたいの? 配列に入っている要素を、どのように表示したいのかが全くわかりません。 ただ9~1まで表示するなら配列はいらないでしょ? #include <stdio.h> int main(void){ int i; for(i=9;i>0;i--){ printf("%3d",i); } printf("\n"); return(0); } で十分。 具体的に、配列に対してどういう操作がしたいのかを補足してください。

ellark
質問者

補足

申し訳御座いません、遅れました。補足要求、という事で補足させて頂きます。 まず先に言っておかねばならないのが、あくまで二次元配列を使うという点。 確かに9から順に1までを出力するものは、配列を使わなくても可能です。ですが、プログラミングを勉強している身なので、色々といじくっている訳です。 お気付きかと思いですが私が示したものは、1,5,9を出力するものです。更に9,5,1を出力するものも出来たのですが、もう一歩踏み込んで、9,8,7,6,5,4,3,2,1の順で出力しよう、という事になりました。 つまり、私が示した配列(必須)をいじくり、9から順に1まで出力したいのです。 何も二次元配列じゃなくても、と言われる方がいらっしゃるかもしれませんが、あえてそこはつっこまないようお願い致します。

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

関連するQ&A

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

    実行結果が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); }

  • 一次元配列についてです

    配列matを以下の様に宣言し、連続した3つの数の和を順に書き出すプログラムを作成しています。が、条件式とprintfの出力の仕方が全く解りません。この二つが解る方、教えて頂けませんか。 #include <stdio.h> int main(void) { int i,mat[10]={5,3,8,2,7,1,10,4,9,6}; for(i=0;i<10;i++) { } printf("\n"); return(0); }

  • 2次元配列

    大学の課題なのですが 10×10の2次元配列に、平面のビットパターンが入っているとする(0と1の整数が入っているとする)。左右反転して出力しなさい。 という問題で、自分は以下のプログラムを作ったのですが、うまくうごいてくれません。だれか間違いを指摘していただけないでしょうか。 よろしくお願いします。 #include<stdio.h> int main(void) { int i,j; int data[10][10]={0,1}; for(i=0;i<10;i++){ for(j=0;j<10;j++){ printf("%3d",data[10-i][10-j]); } printf("\n"); } return(0); }

  • 配列について

    初歩的な質問ですいませんが、質問よろしくお願いします。 ◎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]' に変換できません。」といったようなエラーが出てしまうか分かりません。 教えていただければ嬉しいです。

  • 二次元配列に関する質問です。

    一次元配列はわかるのですが二次元配列になると、わからない時があります。 <ソース> #include<stdio.h> int main() { int dat[2][5]={1,2,3,4,5,6,7,8,9,10}; int i; int j; for(i=0;i<2;i++){ for(j=0;j<5;j++){ printf("dat[%d][%d] %d\n",i,j,dat[i][j]); } } return 0; } このプログラムでわからないのは、 int dat[2][5]={1,2,3,4,5,6,7,8,9,10};の部分です。 普段は、int dat[2][5]={{1,2,3,4,5}, {6,7,8,9,10}, }; という使い方をしているのですが・・・。 どうちがうのでしょうか?

  • 一次元配列の添え字の出力について

    配列matを以下のように宣言し、要素の値が2の倍数、または3の倍数ならば、その添え字を書き出すプログラムを作成しています。が、どうにも上手くいかなくて困ってます。条件式に誤りがあるのだと思いますが、解る方、何処が間違っているのか教えてください。 すぐに回答が欲しいです。 #include <stdio.h> int main(void) { int i,mat[10]={5,3,8,2,7,1,10,4,9,6}; for(i=0;i<10;i++) { if(mat[i]/ 2==1 || mat[i]/ 3==1){ printf("%d",i); } } printf("\n"); return(0); }

  • 配列

    /*10個の数字を受け取り,その中に一致する2つの数字があるかどうかを報告するプログラム*/ #include<stdio.h> int main(void) { int i,j,k; int item[9]; printf("10個の数字を入力してください\n"); for(i=0;i<10;i++) scanf("%d",&item[i]); for(j=0;j<10;j++) { for(k=j+1;k<10;k++) { if(item[j]==item[k]) printf("%dが2つ存在します.\n",item[j]); } } return 0; } というプログラムでエラーが出てしまいました. エラー内容は Stack around the variable 'item' was corrupted というものです. 原因を知りたいです.よろしくお願いします.

  • 一次元配列についての質問です。

    配列matを以下の様に宣言し、要素の値が2の倍数、または3の倍数ならば、その添え字を書き出すプログラムを作成しています。が、下記にある様にエラーがあるらしく、コンパイル出来ません。色々といじくっているのですが、どこが悪いのか見当もつきません。解る方、教えて下さい。あと、このプログラム、此処が間違っているよ、というのがありましたら、教えて下さい。 宜しくお願いします。 #include <stdio.h> int main(void) { int i,mat[10]={5,3,8,2,7,1,10,4,9,6}; for(i=0;i<10;i++) { if(mat[i]% 2==0 || mat[i]% 3==0){  printf("%d",i); } } printf("\n"); return(0); } cmd.exe /C bcc32.EXE "3と2の倍数.c" ------ コンパイル開始 ------ Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland 3と2の倍数.c: エラー E2206 3と2の倍数.c 7: 不正な文字 ' ' (0x8140)(関数 main ) *** 1 errors in Compile *** ------ コンパイル終了 ------

  • 2次元配列を使ったC言語の九九表を作りたいんですが、方法がわかりません。

    C言語で、九九の表を作っているのですが2次配列を使わないでの方法なら出来るんですが、 2次配列を使うと出来なくなってします。 下記のように途中まで組んだのですが、どうしてもエラーがでてしまいます。 #include <stdio.h> int main(void) { int i,j,a[9][9]; printf(" "); for(i=1; i<=9; i++) printf("%3d", i); printf("\n"); for(i=0; i<9; i++){ for(j=0; j<9; j++) a[i][j]= {1,2,3,4,5,6,7,8,9},{2,4,6,8,10,12,14,16,18},{3,6,9,12,15,18,21,24,27},{4,8,12,16,20,24,28,32,36},{5,10,15,20,25,30,35,40,45,6,12,18,24,30,36,42,48,54,7,14,21,28,35,42,49,56,63},{8,16,24,32,40,48,56,64,72},{9,18,27,36,45,54,63,72,81} }; for(i=0; i<9; i++){ printf("%3d", i+1); for(j=0; j<9; j++) printf("%3d",a[9][9]); printf("\n"); } return 0; } とやったのですが…以下に書く部分が間違っているようで。 #include <stdio.h> int main(void) { int i,j,a[9][9]; printf(" "); for(i=1; i<=9; i++) printf("%3d", i); printf("\n"); for(i=0; i<9; i++){ for(j=0; j<9; j++) a[i][j]=□ } for(i=0; i<9; i++){ printf("%3d", i+1); for(j=0; j<9; j++) printf("%3d", □); printf("\n"); } return 0; } 色々調べたり、少しずつ変えながら試しているのですが、できません。 どなたかわかるかたいらっしゃいますか。間違いがわかりません… 配列を使用しなくても出来ることは、わかるのですが、配列を使うバージョンでもできるようになりたいんです。 私がしようとおもっているのは、81個分の値を先に計算し、9×9の2次元配列に格納し、次に81個の配列要素の値を出力したいのですが、 間違いと方法がわかる方いらっしゃいませんか。

  • プログラミング 配列 合計

    配列の要素に値を読み込んで表示させるプログラムは 1#include <stdio.h> 2 3int main(void) 4{ 5 6 int i; 7 int vc[5]; 8 9 for (i = 0; i < 5; i++) 10 vc[i] =i + 1; 11 12 for(i = 0; i < 5; i++) 13 printf("vc[%d] = %d\n", i, vc[i]); 14 15 return (0); }でこれを書きなおして配列の値を合計するプログラムはどういうプログラムになるか教えていただけませんか?