【问题标题】:How to find the Index number of the array in C [closed]如何在C中找到数组的索引号[关闭]
【发布时间】:2017-06-11 14:48:35
【问题描述】:

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

这是我得到的输出

最大使用天数:12

最大使用单位:7.00

每月最少使用天数:4

最小使用单位:0.00

当月平均使用量:1.80

当月总使用量:50.40

但正确的输出应该是:

最大使用天数: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;
}

【问题讨论】:

标签: c arrays indexing


【解决方案1】:

指数计算过程似乎有误。你可能需要的是(下面的解释)

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

其中ELEM 是每个一维数组的元素数,即 7。

最小元素也是如此。

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

【讨论】:

  • 也不会产生所需的输出。为此,我相信if需要使用 ">=" 和 "
  • 对不起,先生,我不明白。我到底哪里错了?
  • @Yunnosch 这应该在这里工作,但总的来说你是对的/
  • 将您的代码与建议的代码进行比较。还要遍历 2D 数组的每个元素并使用这两种方法计算索引。看看哪个是正确的。
  • @user7941771 您正试图过早地对索引进行 0 平衡......而usage 的第一个索引根本不需要平衡。
【解决方案2】:

这就是答案:

#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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-03
    • 2021-03-17
    • 2019-03-24
    • 1970-01-01
    • 2014-01-02
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多