2つの行列の乗算を伴う問題に取り組んでおり、ユーザーから要素を取得する必要があります。しかし、それらを印刷するときに要素を取得した後、第1の行列の最後の要素は第2の行列の最初の要素と等しくなります。その結果、私は正しい結果を得られません。誰かが手伝ってもらえれば私は義務づけられます。ありがとう。1つの配列の最後の要素が次の配列の最初の要素で上書きされます
#include<stdio.h>
int main(){
int i, j, k, n;
// get the size of the square matrices from user
scanf("%d", &n);
// allogate memory for the matrices
int * mul_1 = calloc(n, sizeof(int));
int * mul_2 = calloc(n, sizeof(int));
int * mul_3 = calloc(n, sizeof(int));
//get data from user
for(i=0; i<n; i++){
for(j=0; j<n; j++){
scanf("%d", mul_1+n*i+j);
}
}
for(i=0; i<n; i++){
for(j=0; j<n; j++){
scanf("%d", mul_2+n*i+j);
}
}
// display matrices
printf("Entered matrices are:\n =First=\n");
for(i=0; i<n; i++){
for(j=0; j<n; j++){
printf("%d\t", *(mul_1+n*i+j));
}
printf("\n");
}
printf("=Second=\n");
for(i=0; i<n; i++){
for(j=0; j<n; j++){
printf("%d\t", *(mul_2+n*i+j));
}
printf("\n");
}
//begin matrix multiplicaition
for(i=0; i<n; i++){
for(j=0; j<n; j++){
int sum = 0;
for(k=0; k<n; k++){
int a = *(mul_1 + n*i + k);
int b = *(mul_2 + n*k + j);
sum += a*b;
}
*(mul_3 + i*n + j) = sum;
}
}
//display results
printf("Result:\n");
for(i=0; i<n; i++){
for(j=0; j<n; j++){
printf("%d\t", *(mul_3+n*i+j));
}
printf("\n");
}
return 0;
}
mul_3にはnを割り当てますが、mul_3にはi * n + jでアクセスします。 – Holger
あなたは 'n'要素のための領域を割り当てて、それに' n * n'要素を格納しているからです? – immibis