簡體   English   中英

如何在C中為矩陣使用相同的用戶定義函數?

[英]How can I use the same user defined function for matrix in C?

我需要在C中使用相同的用戶定義函數,以便在C中添加和減去矩陣。

這應該是我需要聲明的代碼

void matrixAddSub(int arrayone[10][10], int arraytwo[10][10], int rows, int colums);

現在我要聲明兩個功能

void matrixAdd(int arrayone[10][10], int arraytwo[10][10], int rows, int colums);
void matrixSub(int arrayone[10][10], int arraytwo[10][10], int rows, int colums);

當我調試代碼時,它可以工作,但是我需要減少輸入的代碼量。 這是我的代碼定義。

void matrixAdd(int arrayone[10][10], int arraytwo[10][10], int rows, int colums){
    int i, j;
    int sumM[10][10];

    for (i = 0; i < rows; i++){
        for (j = 0; j < colums; j++){
            sumM[i][j] = arrayone[i][j] + arraytwo[i][j];
            printf("\t%d", sumM[i][j]);
        }
        printf("\n");
    }
}

void matrixSub(int arrayone[10][10], int arraytwo[10][10], int rows, int colums){
    int i, j;
    int sumM[10][10];

    for (i = 0; i < rows; i++){
        for (j = 0; j < colums; j++){
            sumM[i][j] = arrayone[i][j] - arraytwo[i][j];
            printf("\t%d", sumM[i][j]);
        }
        printf("\n");
    }
}

UPDATE

dasblinkenlight以下是我對您的建議的最終看法:

在主函數中聲明int add = 1; int sub = -1;

//user defined functions declaration
void matrixAddSub(int arrayone[10][10], int arraytwo[10][10], int rows, int colums, int mul);
//user defined function definition
void matrixAddSub(int arrayone[10][10], int arraytwo[10][10], int rows, int colums, int mul){
    int i, j;
    int sumM[10][10];
    int scaM[10][10];
    for (i = 0; i < rows; i++){
        for (j = 0; j < colums; j++){
            scaM[i][j] = mul * arraytwo[i][j];
            }
        }


    for (i = 0; i < rows; i++){
        for (j = 0; j < colums; j++){
            sumM[i][j] = arrayone[i][j] + scaM[i][j];
            printf("\t%d", sumM[i][j]);
        }
        printf("\n");
    }
}

考慮:

  • 減法是加法逆的加法
  • 數字的加法逆是數字乘以-1

使用這兩個事實來統一加法和減法。 編寫以下函數:

static void matrixAddOrSubtract(
    int arrayone[10][10]
,   int arraytwo[10][10]
,   size_t rows
,   size_t columns
,   int mul); // Multiply arraytwo[i][j] by mul before adding to arrayone[i][j]

現在,您的兩個函數都可以重寫為matrixAddOrSubtract的單行調用:

void matrixAdd(int arrayone[10][10], int arraytwo[10][10], size_t rows, size_t columns) {
    matrixAddOrSubtract(arrayone, arraytwo, rows, columns, 1);
}
void matrixSub(int arrayone[10][10], int arraytwo[10][10], size_t rows, size_t columns) {
    matrixAddOrSubtract(arrayone, arraytwo, rows, columns, -1);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM