• 締切済み

C言語をなるべく早く教えてください

C言語の問題集の回答がないので困っているので誰か教えてください。 私はまだ始めたばかりなので手におえません。 今私が理解しているif文、switch文、for文、while文、do-while文、配列、を 使用してでお願いします。 入力した行列を表示させるプログラムを作成しなさい。ただし、行列は任意に指定できるものにし、表示のさせ方にも気を付けること。 実行結果例1 N×M行列数を入力してください N=3 M=2 3×2行列を入力して下さい 1行1列を入力して下さい 1 1行2列を入力して下さい 2 2行1列を入力して下さい 3 2行2列を入力して下さい 4 3行1列を入力して下さい 5 3行2列を入力して下さい 6 入力した3×2行列は次のようなものです 1.00 2.00 3.00 4.00 5.00 6.00 <実行結果例2> N×M行列数を入力してください N=3 M=4 3×4行列を入力して下さい 1行1列を入力して下さい 1 1行2列を入力して下さい 2 1行3列を入力して下さい 3 1行4列を入力して下さい 4.23 2行1列を入力して下さい 5.1224 2行2列を入力して下さい 92.12 2行3列を入力して下さい 2.12 2行4列を入力して下さい 36.54 3行1列を入力して下さい 2.213 3行2列を入力して下さい 9.56 3行3列を入力して下さい 8 3行4列を入力して下さい 5.23153 入力した3×4行列は次のようなものです 1.00 2.00 3.00 4.23 5.12 92.12 2.12 36.54 2.21 9.56 8.00 5.23

みんなの回答

  • 1108435
  • ベストアンサー率43% (94/217)
回答No.2

最近scanfやpirntfは使わないからなぁ。 でも、フォーマット以外は間違いないと思うけど。 ついでにインクルードファイルぐらいは考えてね。 void main(void) { float d[2][3]:           /* 対象は浮動小数点 */ int n,m;              /* ループは整数 */ for (n = 0; n <3; n++) {      /* 最初の配列 */ for (m = 0; m < 2; m++) {     /* 次の配列 */ scanf("%f",d[n][m]);       /* 配列への入力 これが面倒くさい */ } } for (n = 0; n < 3; n++) {     /* ここから表示ルーチン */ for (m = 0; m < 2; m++) {     /* 次の配列 */ printf("%3.2f ", d[n][m]); /* 空白に注意して */ } printf('\n');           /* ここで改行 */ } }

すると、全ての回答が全文表示されます。
  • BLK314
  • ベストアンサー率55% (84/152)
回答No.1

// Matrix.cpp : コンソール アプリケーションのエントリ ポイントを定義します。 // #include <stdio.h> #include <stdlib.h> // 行数 static int RowCount; // 列数 static int ColCount; // 行列にデータを設定します static void SetMatrixData(double vector[], int r, int c, double data) { vector[r * ColCount + c] = data; } // 行列からデータを読み出します static double GetMatrixData(double vector[], int r, int c) { return vector[r * ColCount + c]; } int main(int argc, char* argv[]) { int i; printf("N×M行列数を入力してください\n"); printf("N="); scanf("%d", &RowCount); printf("M="); scanf("%d", &ColCount); printf("%d×%d行列数を入力してください\n", RowCount, ColCount); // 行列用のメモリを確保します // 行列自体はCでは2次元配列で表現できます。 // 本課題では、行数・列数とも可変でなければなりません // // 幾つか、実装案があります // A) 大きめの2次元配列を使う // 例えば100 x 100の2次元配列を確保しておき // 10 x 10 の場合は残りを無駄にする方法です // 101 x 100とかが指定されたらエラーとします // 単純で実装も易しいですが、勝手な上限を設けてよいのか // 疑問が残ります // // B) 動的に確保します // mallocで必要なメモリを動的に確保して使います // 基本的に1次元配列しか確保できないので // 2次元配列としては扱うのが、多少面倒です // メモリの許す範囲内で任意のサイズの行列を扱えます // // 今回は、多少複雑にはなりますが // より厳密に課題を解決できるBを採用します。 double* p = (double*)malloc(sizeof (double) * RowCount * ColCount); if (p == NULL) { printf("メモリ不足です"); return -1; } for (i = 0; i < RowCount; ++i) { int j; for (j = 0; j < ColCount; ++j) { double d; printf("%d行%d列を入力してください\n", i + 1, j + 1); scanf("%lf", &d); SetMatrixData(p, i, j, d); } } // 結果を表示します printf("入力した%d×%d行列は次のようなものです\n", RowCount, ColCount); for (i = 0; i < RowCount; ++i) { int j; for (j = 0; j < ColCount; ++j) { printf("%.2f ", GetMatrixData(p, i, j)); } printf("\n"); } // mallocで確保したメモリは必ずfreeしなければなりません free(p); return 0; }

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