-1

私のアプリは、double 配列を取り、偶数列の要素の平均を見つけ、最大値を見つけ、平均を最大 / 2 と比較し、平均 > 最大 / 2 の場合は行列を 90 度回転させることになっています。

コードは次のとおりです。

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

int M = 4, N = 4;

int ** rotateArr(int arr[4][4]) {
    int D[4][4];
    int i, n;
    for(i=0; i <= 4; i++ ){
        for(n =0; n <= 4; n++){
            D[i][n] = arr[n][M - i + 1];
        }
    }
    return D;
}
int getAvg(int arr[4][4]) {
    int sum = 0, num = 0;
    int i, n;
    for(i=0; i <= 4; i += 2){
        for(n=0; n <= 4; n++){
            sum += arr[i][n];
            num += 1;
        }
    }
    return sum/num;
}

int ** getMax(int arr[4][4]) {
    int maxa = arr[0][0];
    int i, n;
    for(i=0; i <= 4; i++){
        for(n=0;  n <= 4; n++){
            if (maxa < arr[i][n]){
                maxa = arr[i][n];
            }
        }
    }
    return maxa;
}

int main()
{

    int S[4][4] = { { 1, 4, 10, 3 }, { 0, 6, 3, 8 }, { 7, 10 ,8, 5 },  { 9, 5, 11, 2}  };
    int maxa = 0;
    float avg = 0;

    avg = getAvg(S);
    maxa = getMax(S);
    int i , n;
    if (avg > maxa/2){
        S[4][4] = rotateArr(S);
        for(i=0; i <= 4; i+=2){
            for(n=0 ; n <= 4; n++){
                    printf("%d", S[i][n]);
            }
            printf("\n");
        }
    }

    getch();

    return 0;
}

アプリは何も出力せず、キーを押すだけで終了します

プロセスはステータス 0 (0 分 2 秒) で終了しました

4

2 に答える 2

1

プログラムを分析すると、それが見つかります。

  1. D(戻り値の型int (*)[4]がである型rotateArrの) を返していint **ます。また、getMax.

  2. n =4配列はarr[i][n]範囲外になります!

  3. sum/num 実際には平均値を計算していません(分子と分母の両方が計算されており、int常にint値が得られます (そうである可能性もあり0ます))。

于 2013-11-11T15:12:35.233 に答える