如何在C中查找数组的索引号

时间:2017-06-11 14:48:36

标签: c arrays indexing

我有这个代码示例。我需要从数组元素中获得最高值的数组中获取maxDay(在这种情况下为7.0)。所以我需要得到它的索引值(即24)。但我无法获得所需的输出。

这是输出我正在

  

最大使用月份的日期:12

     

单位最大使用量:7.00

     

最低使用月份的日期:4

     

单位最低使用量:0.00

     

本月平均使用量:1.80

     

本月总使用量:50.40

但是CORRECT输出应该是:

  

最大使用月份的日期:24

     

单位最大使用量:7.00

     

最低使用月份的日期:28

     

单位最低使用量:0.00

     

本月平均使用量:1.80

     

本月总使用量:50.40

我试过这段代码,但看起来不行。我找不到我出错的地方。你能帮我吗???

#include<stdio.h>
int main(){
    float maxUsage=0,minUsage=1000,avgUsage,totUsage=0;
    int maxDayI=0,maxDayJ=0,minDayI=0,minDayJ=0,count=0,i,j;
    float usage[4][7]={{1.2, 2.1, 0.8, 0.0, 1.0, 1.3, 4.0}, 
                       {1.5, 3.2, 1.0, 1.3, 4.0, 1.5, 3.2}, 
                       {2.3, 0.4, 1.2, 2.1, 0.8, 0.0, 2.6}, 
                       {2.1, 1.7, 7.0, 1.2, 2.1, 0.8, 0.0} };
    for(i=0;i<4;i++){
        for(j=0;j<7;j++){
            totUsage=totUsage+usage[i][j];
            if(usage[i][j]>maxUsage){
                maxDayI=i;
                maxDayJ=j;
                maxUsage=usage[i][j];
            }else if(usage[i][j]<minUsage){
                minDayI=i;
                minDayJ=j;
                minUsage=usage[i][j];
            }               
        }
    }
    printf("Day of the Month with Maximun Usage: %d\n",(maxDayI+1)*(maxDayJ+1));
    printf("Maximum Usage in Units: %.2f\n",maxUsage);
    printf("Day of the Month with Minimum Usage: %d\n",(minDayI+1)*(minDayJ+1));
    printf("Minimum Usage in Units: %.2f\n",minUsage);
    printf("Average Usage for the Month: %.2f\n",totUsage/28);
    printf("Total Usage for the Month: %.2f\n",totUsage);
return 0;
}

2 个答案:

答案 0 :(得分:1)

索引计算过程似乎是错误的。您可能需要的是(下面的说明)

 ((maxDayI)* ELEM ) + maxDayJ + 1;
    ^^        ^^        ^^     ^^
     |         |         |       |
saved value    |        offset    Handle 0-based indexing
 of i        No. of element

其中ELEM是每个1-D数组的元素编号,即7。

同样适用于最小元素。

注意事项:如果您有多天的最大/最小值,只会出现第一个;被考虑。如果您希望选择多个值中的特定记录,则需要为其添加逻辑。

答案 1 :(得分:0)

这是答案:

#include<stdio.h>
int main(){
    float maxUsage=0,minUsage=100,avgUsage,totUsage=0;
    int maxDayI=0,maxDayJ=0,minDayI=0,minDayJ=0,count=0,i,j;
    float usage[4][7]={{1.2, 2.1, 0.8, 0.0, 1.0, 1.3, 4.0}, 
                       {1.5, 3.2, 1.0, 1.3, 4.0, 1.5, 3.2}, 
                       {2.3, 0.4, 1.2, 2.1, 0.8, 0.0, 2.6}, 
                       {2.1, 1.7, 7.0, 1.2, 2.1, 0.8, 0.0} };
    for(i=0;i<4;i++){
        for(j=0;j<7;j++){
            totUsage=totUsage+usage[i][j];
            if(usage[i][j]>maxUsage){
                maxDayI=i;
                maxDayJ=j;
                maxUsage=usage[i][j];
            }else if(usage[i][j]<minUsage){
                minDayI=i;
                minDayJ=j;
                minUsage=usage[i][j];
            }

        }
    }
    printf("Day of the Month with Maximun Usage: %d\n",(maxDayI*7)+(maxDayJ+1));
    printf("Maximum Usage in Units: %.2f\n",maxUsage);
    printf("Day of the Month with Minimum Usage: %d\n",(minDayI*7)+(minDayJ+1));
    printf("Minimum Usage in Units: %.2f\n",minUsage);
    printf("Average Usage for the Month: %.2f\n",totUsage/28);
    printf("Total Usage for the Month: %.2f\n",totUsage);
return 0;
}