0

プログラムで 3 つのチームのどれが 95% を超えるパーセンテージで最大頻度を持っているかを見つけようとしていますが、いくつかの問題が発生します。まず、すべてのチームの最大値を見つけるために関数を作成しました。次に、すべてのチームの最大値を配列に保存し、その後、その配列の最大値を見つけるために関数をリコールすることを考えていますが、思い通りに機能させることはできません.結果から、メモリ割り当ての問題があるようです. 助言がありますか?そして、形成について申し訳ありません...私はCが初めてです。

編集私が持っている出力は

数字を追加すると{99 98 99 30 30 95 20 96 99}

第1チーム

   [0-9]        0
   ...
  [95-100]      **3**

最大値は行 {99 98 99} の 3 です。

2nd row   0-9         0
           ...
          30-35       2
           ...
          95-100      **1**
     the max is 1
                    from the row {30 30 95}
 3rd row  0-9          0
           ...
          20-25        1
           ...
          95-100       **2**
the max is 2                  from the row {20 96 99}

私がやりたいことは、最大 3 チームの最大を見つけることです。この特定のケースでは、[3 1 2] の最大は 3 になります。そのため、これらの値を配列に格納することにしました。 :)しかし、それらを正しく保存できず、最大全体を見つけるために関数をリコールした後、いくつかの問題があります。

#include <stdio.h>
#define   S1 3
#define   COUNTER   20
#define   S2 3

int max_array(int a[], int num_elements);
int main(){
float A[S1][S2];
int   i, j, k, l, low, high, max;
int   group[COUNTER] = {0};
int arr[S1] = {0};
for( i = 0 ; i < S1 ; i++ ){

    for(j=0; j<S2;j++){  

        scanf("%f", &A[i][j]);

    }                                 
}

for(i=0;i<S1;i++){

    memset(group, 0, sizeof(group));

    for(j=0;j<S2;j++){

        ++group[(int)(A[i][j] - 1 ) / 5] ;
    }
    printf("\n");
    printf(" GROUP||     RANGE||     FREQUENCY\n\n") ;
    for( k = 0 ; k < COUNTER ; k++  ){                                              
        low  = k * 5 ;
        high = low + 5 ;
        printf("  %2d||    %3d to %3d||       %d\n", k+1, low, high, group[k]);

        if(k==19){
           max = max_array(group,COUNTER);
           arr[i]=max;
         }
      }
    printf("The max is %d\n", arr[i]);
   }    
   for(l=0;l<S1;l++){
    printf("The max is %d\n", arr[i]);
  }
  getch();                   
 }


int max_array(int group[], int num_elements){
int i,j, max;
max=group[0];
for (i=1; i<num_elements; i++){
    if (group[i]>max && i==num_elements-1){
        max=group[i];
    }
  }
 return(max);
}
4

2 に答える 2

0

memset を使用するには string.h を含め、getch を getc に修正する必要があります。

于 2013-04-16T18:56:49.060 に答える
0
#include <stdio.h>
#define   S1 3
#define   COUNTER   20
#define   S2 3

int max_array(int a[], int num_elements);
int main(){
    float A[S1][S2];
    int   i, j, k, l, low, high, max;
    int   group[COUNTER] = {0};
    int arr[S1] = {0};
    for( i = 0 ; i < S1 ; i++ ){

        for(j=0; j<S2;j++){  

            scanf("%f", &A[i][j]);

        }                                 
    }

    for(i=0;i<S1;i++){

        memset(group, 0, sizeof(group));

        for(j=0;j<S2;j++){

            ++group[(int)(A[i][j] - 1 ) / 5] ;
        }
        printf("\n");
        printf(" GROUP||     RANGE||     FREQUENCY\n\n") ;
        for( k = 0 ; k < COUNTER ; k++  ){                                              
            low  = k * 5 ;
            high = low + 5 ;
            printf("  %2d||    %3d to %3d||       %d\n", k+1, low, high, group[k]);

            if(k==19){
               max = max_array(group,COUNTER);
               arr[i]=max;
            }
        }
        printf("The max is %d\n", arr[i]);
    }    
    for(l=0;l<S1;l++){
        printf("The max is %d\n", arr[i]);
    }
 return 0;                    
}


int max_array(int group[], int num_elements){
    int i,j, max;
    max=group[0];
    for (i=1; i<num_elements; i++){
        if (group[i]>max && i==num_elements-1){
            max=group[i];
        }
    }
    return(max);
}
于 2013-04-16T18:35:55.827 に答える