1

このコードは、ユーザーにマトリックスへの入力を求めてから、void 関数を呼び出してそれらを追加します。私はwww.ideone.comを持って いますが、コードの多くを変更することもできません。これらすべての define ステートメントと void 関数が必要です。

#include <stdio.h>
#include <math.h>

#define NCOL1 2
#define NCOL2 2
#define NROW1 2
#define NROW2 2
#define NCOL3 2
#define NROW3 2

int main (void)
{
    //Initiate variables
    double a, b;
    int    i, j;
    void   addarray(double a, double b);
    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);
        }
    }
    return 0;
}

void addarray (double a, double b)
{
    int i,j;
    double arrsum[NCOL3][NROW3];
    for (i = 0; i < NCOL3; i++) {
        for (j = 0; j < NROW3; j++) {
            arrsum[i][j] = a + b;
        }
    }
}
4

2 に答える 2

1

あなたの質問は何ですか?コードを提供していただきありがとうございますが、正確に何をしようとしているのか、またはコードが現在何を間違って実行しているのかは明確ではありません. あなたが達成しようとしていることと、具体的に何を支援する必要があるかについての詳細を含めて、質問を更新してください。

一般的なアドバイス: 関数を使用して配列を操作する場合、関数は配列へのポインターをパラメーターとして受け取る必要があります。

また、関数は、その関数のスコープ内にあるaddarray()配列のみを変更しています。arrsumその関数はその要素を初期化した後に何もしないため、その関数arrsum全体は基本的にノーオペレーションです。

于 2012-04-25T21:20:15.213 に答える
0

編集:問題のより良い解決策は次のとおりです。

#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;
                }
        }
}
于 2012-04-25T21:20:51.540 に答える