3.12.3 prog12a.c

行列のサイズが分かっていなくても、 サイズが小さい場合は、可変長の2次元配列で簡単に扱える。


/*
 * prog12a-new.c --- C99の可変長配列で行列を
 */

#include <stdio.h>

/* 行列を表示する --- 整合配列風の引数渡し */
void display(int m, int n, double A[m][n])
{
  int i, j;
  for (i = 0; i < m; i++) {
    for (j = 0; j < n; j++)
      printf("%7.2f ", A[i][j]);
    printf("\n");
  }
}

int main(void)
{
  int i, j, k, m, n;
  /* サイズを決定してから行列を記憶する変数を定義する */
  printf("m= "); scanf("%d", &m);
  n = m;
  double a[m][n], b[m][n], c[m][n]; // 注: m*n が大きいと異常終了する

  /* a の値の設定 */
  k = 0;
  for (i = 0; i < m; i++)
    for (j = 0; j < n; j++)
      a[i][j] = k++;

  /* bの入力 */
  for (i = 0; i < m; i++)
    for (j = 0; j < n; j++) {
      printf("b[%d][%d]=", i, j);
      scanf("%lf", &b[i][j]);
    }
  /* c:=a+b */
  for (i = 0; i < m; i++)
    for (j = 0; j < n; j++)
      c[i][j] = a[i][j] + b[i][j];

  /* a,b,c を表示 */
  printf("a=\n"); display(m, n, a);
  printf("b=\n"); display(m, n, b);
  printf("c=\n"); display(m, n, c);

  return 0;
}

$ ./prog12a-new
m= 2
b[0][0]=1
b[0][1]=2
b[1][0]=3
b[1][1]=4
a=
   0.00    1.00
   2.00    3.00
b=
   1.00    2.00
   3.00    4.00
c=
   1.00    3.00
   5.00    7.00
$



桂田 祐史