0
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void matrixRandomFill(int size, int size2, int matrix[size][size2]) {
    srand(time(NULL));

    for ( int i = 0; i < size; i++ ) {
        for ( int j = 0; j < size2; j++ ) {
            matrix[i][j] = rand() % 9;
        }
    }
}

void matrixSum(int size, int size2, int matrix1[size][size2], int matrix2[size]    [size2], int matrixSum[size][size2]) {
    for ( int i = 0; i < size; i++ ) {
        for ( int j = 0; j < size2; j++ ) {
            matrixSum[i][j] = matrix1[i][j] + matrix2[i][j];
        }
    }
}

void matrixSubstract(int size, int size2, int matrix1[size][size2], int matrix2[size]    [size2], int matrixSubstract[size][size2]) {
    for ( int i = 0; i < size; i++ ) {
        for ( int j = 0; j < size2; j++ ) {
            matrixSubstract[i][j] = matrix1[i][j] - matrix2[i][j];
        }
    }
}

void matrixMultiply(int size, int size2, int matrix1[size][size2], int matrix2[size]    [size2], int matrixMultiply[size][size2]) {
    for ( int i = 0; i < size; i++ ) {
        for ( int j = 0; j < size2; j++ ) {
            matrixMultiply[i][j] = matrix1[i][j] * matrix2[i][j];
        }
    }
}

void matrixPrint(int size, int size2, int matrix[size][size2]) {
    for ( int i = 0; i < size; i++ ) {
        for ( int j = 0; j < size2; j++ ) {
            printf("%2d ", matrix[i][j]);
        }
        printf("\n");
    }
}

int main() {
    int size;
    printf("Enter matrix size NxN: ");
    scanf("%d", &size);

    int matrix1[size][size];
    int matrix2[size][size];
    int matrixSum[size][size];
    int matrixSubstract[size][size];
    int matrixMultiply[size][size];

    matrixRandomFill(size, size, matrix1);
    matrixRandomFill(size, size, matrix2);

    printf("Printing first matrix:\n");
    matrixPrint(size, size, matrix1);
    printf("--------------------------------------\n");

    printf("Printing second matrix:\n");
    matrixPrint(size, size, matrix2);
    printf("--------------------------------------\n");

    printf("Printing matrix1 + matrix2:\n");
    matrixPrint(size, size, matrixSum);
    printf("--------------------------------------\n");

    printf("Printing matrix1 - matrix2:\n");
    matrixPrint(size, size, matrixSubstract);
    printf("--------------------------------------\n");

    printf("Printing matrix1 * matrix2:\n");
    matrixPrint(size, size, matrixMultiply);
    printf("--------------------------------------\n");

    return 0;
}

関数は正常に見えますが、私は次のようなものを取得し続けます:printing matrix1 + matrix2: 0 0 0 0 0 0 0 0 0

また

マトリックス 1 の印刷 - マトリックス 2: -1761243347 32767 -1761341440 32767 0 0 0 0 0

ある種のセグメンテーション違反のように見えますが、どこで間違いを犯したのかわかりません。

4

3 に答える 3

1

関数 matrixSum などが呼び出されることはありません。

于 2013-09-01T14:55:08.410 に答える
1

他の人が言ったように、あなたは実際にmatrixSumと残りを評価することはありません。また、関数と同じ名前のローカル(メインへの)変数が関数を隠しているため、それらの変数宣言を超えて使用できなくなります。

あなたの別の問題を見る方法は(例による):

int iwilldosomething(int a, int b) /*function iwilldosomething */

int main(void)
{
  int iwilldosomething;     /* local variable iwilldosomething */
  iwilldosomething(2, 3);    /* here you will get error, because main can see iwilldosomething and will tell that iwilldosomething is not a function */
.
.
.
于 2013-09-01T15:06:25.180 に答える