C言語の新しい規格である C99 では、 可変長配列 (variable length array) が導入されたので、次のようなプログラムが書ける。
(でも、この機能は C11 ではオプションになったらしく、 C++14では外されたらしい。 それと可変長配列はスタックに確保されるので、 あまり大きなサイズは使えない (手元の Mac でやったら 8 MB くらいが上限だった)。 大きな行列の実現に使うのは良くないだろう。 個人的にはこの機能を使うコードは書かないことにする。)
/* * prog11-C99.c --- 可変長配列と任意位置での変数宣言 * コンパイルするには、たとえば gcc -o prog11-C99 prog11-C99.c */ #include <stdio.h> /* n 次元のベクトル x, y の内積を計算する */ double inner_product(double *x, double *y, int n) { int i; double s; s = 0.0; for (i = 0; i < n; i++) s += x[i] * y[i]; return s; } int main(void) { int i, N; printf("二つのベクトルの内積を計算します。\n"); printf("次元を入力してください: "); scanf("%d", &N); double a[N], b[N]; printf("一つ目のベクトル a の入力\n"); for (i = 0; i < N; i++) { printf(" %d 番目の成分=", i + 1); scanf("%lf", &a[i]); } printf("二つ目のベクトル b の入力\n"); for (i = 0; i < N; i++) { printf(" %d 番目の成分=", i + 1); scanf("%lf", &b[i]); } printf("内積=%g\n", inner_product(a, b, N)); return 0; }