秋学期の授業のために、夏休み中に自主勉強としてやっているものです。
キーボードから次元 N を入力した後,N × N 行列 A と N 次元ベクトル x のデータを要素 ごとにキーボードから入力し,Ax を計算するプログラムを完成させよ.
上記のような問題で、下記のようにソースコードを書いたのですが、エラーが発生してしまいます。
わかる方いらっしゃいましたらご指摘していただけるとありがたいです。ポインタは秋学期の授業で勉強する内容ということもあり、これ以上はエラーの原因がわかりませんでした、、、。どうぞよろしくお願いいたします。
#include <stdio.h> #include <stdlib.h> void PrintVector(double *y, int n){/*ベクトルを表示する関数*/ int i; for(i=0;i<n;i++){ printf("%6.1f\n",*(y+i)); } printf("\n"); } void PrintMatrix(double *x, int n){/*行列を表示する関数*/ int i,j; double *ai; ai= x; for( i = 0 ; i < n ; i++){ for( j = 0 ; j < n ; j++){ printf("%6.1f", *(ai+j)); } ai+=n; printf("\n"); } printf("\n"); } int main(void) { int i, j, N; double *ai; /* 各行の先頭へのポインタを表すポインタを用意する*/ printf("N= "); scanf("%d",&N); double *A, *x, *y; /*計算結果を代入するための行列を用意 */ /*行列・ベクトルのメモリ確保*/ x= (double *) malloc(N*sizeof(double)); if(x==NULL){ printf("Can’t allocate memory. Y=n"); exit(1); } /*行列・ベクトルの入力*/ ai = A; for(i = 0 ; i < N ; i++ ){ for( j = 0 ; j < N ; j++ ){ printf("A[%d][%d] = ", i , j ); scanf("%lf", ai+j ); } ai+=N; } printf("\n"); for(i = 0 ; i < N ; i++ ){ printf("x[%d] = ", i ); scanf("%lf", x+i); } printf("\n"); printf("A = \n"); PrintMatrix(A,N); printf("x = \n"); PrintVector(x,N); /* y = Ax の計算 */ ai = A; for (i = 0; i < N; i++) { *(y+i) = 0; /* 初期化 */ for (j = 0; j < N; j++) { *(y+i) += *(ai+j) * *(x+j); } ai+=N; } printf("y = \n"); /* ベクトル y(=Ax) の表示 */ PrintVector(y,N); /*メモリの解放*/ free(x); return 0; }
回答1件
あなたの回答
tips
プレビュー