2013-04-16 83 views
0

我试图找到3个队伍中有哪些在我的程序中有超过95%的最大频率,但我遇到了几个问题。首先,我创建了一个函数以便找到每个团队的最大值。然后,我正在考虑将每个团队的最大值保存到一个数组中,然后调用该函数以便找到该数组中的最大值,但是我无法按照我的想法使其工作。从我的结果来看,我似乎有内存分配问题。有什么建议么?很遗憾的形成......我是新来的C.阵列的最大值

编辑 我已经是

如果我添加了数字{99 98 99 30 30 95 20 96 99}

输出

第一队

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

最大是从行3 {99 98 99}

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 teams.In这种特殊情况下的[3 1 2]这是会最大的最大的最大值是3。这就是为什么我决定将这些值存储在一个数组中:)但是我有一些问题,因为我无法正确存储它们,并且在调用该函数以查找Whole max。

#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); 
} 
+1

您应该正确缩进代码以获得答案。阅读非常混乱。 – jazzbassrob

+0

这根本不可读。 – 2013-04-16 18:29:37

回答

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); 
} 
+0

幸运的是,即使我输入值“0”我得到正确的频率:) – user2154323

0

您需要包括string.h中使用memset的,正确的getch到GETC。

+0

一切工作正常,找到频率:)问题是之后 – user2154323