編集:問題のより良い解決策は次のとおりです。
#include<stdio.h>
#include<math.h>
#define NCOL1 2
#define NCOL2 2
#define NROW1 2
#define NROW2 2
#define NCOL3 2
#define NROW3 2
void addarray(double a[NROW1][NCOL1], double b[NROW1][NCOL1], double (*c)[NCOL1]);
int main(void)
{
//Initiate variables
double a,b;
int i,j;
double ans;
double arr1[NCOL1][NROW1], arr2[NCOL2][NROW1];
double arrsum[NCOL1][NROW1];
//Ask user to enter numbers for the first matrix
printf("Please enter numbers for Matrix 1 :\n ");
for(i=0;i<NCOL1;i++){
for(j=0;j<NROW1;j++){
scanf("%lf",&arr1[i][j]);
}
}
//Ask user to enter numbers for the second matrix
printf("Please enter numbers for Matrix 2 :\n ");
for(i=0;i<NCOL2;i++){
for(j=0;j<NROW2;j++){
scanf("%lf",&arr2[i][j]);
}
}
addarray( arr1, arr2, &arrsum[0] );
printf("Output of added arrays\n");
for(i=0;i<NCOL3;i++){
for(j=0;j<NROW3;j++){
printf("%lf ", arrsum[i][j]);
}
printf("\n");
}
return 0;
}
void addarray(double a[NROW1][NCOL1], double b[NROW1][NCOL1], double (*c)[NCOL1])
{
int i,j;
for(i=0;i<NCOL3;i++)
{
for(j=0;j<NROW3;j++)
{
c[i][j] = a[i][j] + b[i][j];
}
}
}
ただし、最小限の変更で、以下も機能します。
addarray() が結果を arrsum[][] というローカル マトリックスに入れているようです。このプログラムを機能させるには、arrsum[][] をプログラムの残りの部分で使用できるようにする必要があります (ただし、グローバル配列は良い考えではありません)。
コードをテストまたはコンパイルせずに、少なくとも次の変更を行う必要があります。
1-double arrsum[NCOL3][NROW3];
から削除addarray()
void addarray(double a,double b)
{
int i,j;
for(i=0;i<NCOL3;i++){
for(j=0;j<NROW3;j++){
arrsum[i][j]=a+b;
}
}
2-arrsum[][]
グローバルにする
#include<stdio.h>
#include<math.h>
#define NCOL1 2
#define NCOL2 2
#define NROW1 2
#define NROW2 2
#define NCOL3 2
#define NROW3 2
/**** add declaration of arrsum[][] here ****/
double arrsum[NCOL3][NROW3];
プログラムの一部を書き直し、コンパイルしてテストしました。新しいコードは以下です。
#include<stdio.h>
#include<math.h>
#define NCOL1 2
#define NCOL2 2
#define NROW1 2
#define NROW2 2
#define NCOL3 2
#define NROW3 2
void addarray(double a,double b);
double arrsum[NCOL3][NROW3];
int main(void)
{
//Initiate variables
double a,b;
int i,j;
double ans;
double arr1[NCOL1][NROW1], arr2[NCOL2][NROW1];
//Ask user to enter numbers for the first matrix
printf("Please enter numbers for Matrix 1 :\n ");
for(i=0;i<NCOL1;i++){
for(j=0;j<NROW1;j++){
scanf("%lf",&arr1[i][j]);
}
}
//Ask user to enter numbers for the second matrix
printf("Please enter numbers for Matrix 2 :\n ");
for(i=0;i<NCOL2;i++){
for(j=0;j<NROW2;j++){
scanf("%lf",&arr2[i][j]);
}
}
//Iterate through void function and print out result
for(i=0;i<NCOL3;i++){
for(j=0;j<NROW3;j++){
addarray(arr1[i][j],arr2[i][j]);
// printf("%lf",ans);
}
}
printf("Output of added arrays\n");
for(i=0;i<NCOL3;i++){
for(j=0;j<NROW3;j++){
printf("%lf ", arrsum[i][j]);
}
printf("\n");
}
return 0;
}
void addarray(double a,double b)
{
int i,j;
for(i=0;i<NCOL3;i++){
for(j=0;j<NROW3;j++){
arrsum[i][j]=a+b;
}
}
}