行列のサイズが分かっていなくても、 サイズが小さい場合は、可変長の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 $ |