【问题标题】:How could I print the max and min values in a 2D array?如何打印二维数组中的最大值和最小值?
【发布时间】:2014-12-27 18:32:18
【问题描述】:

这是我的代码,它正在工作,但它只打印最小值并将其打印为负数。这段代码有什么问题?

#include <stdio.h>

int main(void) {

    double x[5][5],Max, Min;
    int i, j;

    for (i = 0; i<5; i++)
    {
        for (j = 0; j<5; j++)
            scanf("%lf", &x[i][j]);
    }
    Max = x[0][0];
    Min = x[0][0];

        if (x[i][j] > x[0][0])
            printf("Max= %f\n", x[i][j]);

    else if (x[i][j] < x[0][0])
        printf("Min = %f\n", x[i][j]);

    return 0;
}

【问题讨论】:

  • 这不是你找到最大值的方式。您需要将当前版本与最大值进行比较,如果更大,则将最大值设置为新值,然后在循环结束时显示最大值。最低限度类似。你写的代码有大问题,比如if在循环外。

标签: c max min


【解决方案1】:

在收到输入后,您永远不会遍历您的数组,因为您在 for 循环之外。你可以这样做:

Max = x[0][0];
Min = x[0][0];

for(i = 0; i < 5; ++i)
{
    for(j = 0; j < 5; ++j)
    {
        if (x[i][j] < Min)   // Is current element smaller than Min?
            Min = x[i][j];        // If so, update Min
        if (x[i][j] > Max)   // Is current element greater than Max?
            Max = x[i][j];        // If so, update Max
    }
}

printf("Max= %f\n", Max);
printf("Min= %f\n", Min);

【讨论】:

  • 没有什么特别的原因,那个解决方案可能会稍微快一点。
【解决方案2】:

您忘记将最小值和最大值的搜索包含在一个循环中。:)

试试下面的

for (i = 0; i<5; i++)
{
    for (j = 0; j<5; j++)
        scanf("%lf", &x[i][j]);
}
Max = x[0][0];
Min = x[0][0];

for (i = 0; i<5; i++)
{
    for (j = 0; j<5; j++)
    {
        if ( Max < x[i][j] )
        {
            Max = x[i][j];
        }
        else if ( x[i][j] < Min )
        {
            Min = x[i][j];
        }
    }
}

printf( "Max = %f\n", Max );
printf( "Min = %f\n", Min );

【讨论】:

  • 不错的收获 - 任何特定值都不能同时是最小值 最大值。除了[0][0],if所有元素都是一样的。但这无关紧要,因为我们已经将这两个值都设置为 [0][0] 包含的值。
【解决方案3】:

您需要遍历二维数组中的所有值以检查二维数组的所有值并相应地设置maxmin 变量:

    Max = x[0][0]; //set max as the first element
    Min = x[0][0];  //set min as the first element
    for (i = 0; i<5; i++) //loop through each row
    {
        for (j = 0; j<5; j++) //loop through each column
    {
            if (x[i][j] > Max) //if current value is more than max
            Max=x[i][j];
            if (x[i][j] < Min) //if current value is less than min
            Min=x[i][j];
        }
    }

    printf("Max= %f\n", Max);   
    printf("Min = %f\n", Min);

【讨论】:

    猜你喜欢
    • 2017-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 2017-09-28
    • 2015-02-20
    • 2019-03-31
    • 1970-01-01
    相关资源
    最近更新 更多