想要在printf中访问arr[n],但是给定的n在数组中的实际元素之上?[C]

mm9b1k5b  于 2022-12-17  发布在  其他
关注(0)|答案(3)|浏览(143)

我是一个CSS的学生,教授给了我一个练习,但是我不知道怎么解决这个问题,一个特定的n想要在printf中访问,但是数组中给定的元素低于要求的n。
这是我写的代码,但在这个特殊的测试中,它没有给我正确的解决方案。有什么提示吗?

#include <stdio.h>

int max(int arr[], int n) {

    int numMax = 0, indexMax = 0;

    for (int i = 0; i <= n; i++) {
        if (arr[i] >= numMax) {
            numMax = arr[i];
            indexMax = i;
        }
    }

    return indexMax;
}



int main () {

    int arr[5]={-88, -91, -45, -90, -13};
    printf("The index of the highest number is: %d\n", max(feld, 5));
    // solution: 5

    return 1;
}
idfiyjo8

idfiyjo81#

您的数组名为arr,而不是feld
在您的函数中,可以使用数组的第一个值初始化numMax,然后循环通过它来测试以下内容。

#include <stdio.h>

int max(int arr[], int n) 
{
    int numMax = arr[0], indexMax = 0;

    for (int i = 1; i < n; i++) 
    {
        if (arr[i] >= numMax) 
        {
            numMax = arr[i];
            indexMax = i;
        }
    }
    return indexMax;
}

int main(void)
{
    int arr[5] = {-88, -91, -45, -90, -13};
    printf("The index of the highest number is: %d\n", max(arr, 5));

    return 0;
}
1qczuiv0

1qczuiv02#

使用:for (int i = 0; i <= n; i++),OP程序会跳出数组的边界(从零开始的索引对于初学者来说很棘手)。
数组元素不会移动。
只需拾取最后一个元素,如果在向第0个元素扫描期间发现更高的值,则更新该拾取。

int maxVal( int arr[], int n ) {
    int maxInd = --n;

    while( --n >= 0 )
        if( arr[n] > arr[MaxInd] ) maxInd = n;

    return maxInd;
}

需要跟踪的变量越少总是一个优势。
函数返回索引,而不是值。

printf("The index of the highest number is: %d\n", max(arr, 5) );

编辑:

让我们访问main()来稍微改进一下。

int main( void ) { // more conventional

    // the compiler counts more accurately than most people:
    int arr[] = { -88, -91, -45, -90, -13 };
    size_t nElem = sizeof arr/sizeof arr[0];

    // Notice that maxVal() should return a 'size_t', too.
    // Use the appropriate format specifier
    // The name "maxVal()" is misleading. Fix that...
    printf("The index of the highest number is: %sz\n", maxValInd( arr, nElem ) );

    return 0; // 0 means all good, non-zero indicates an error occurred.
}

现在,由于它使用size_t(更适合于非负值,如数组中的元素数或文件中的字节数),我们也应该改进该函数:

size_t maxValInd( int arr[], size_t n ) {
    size_t maxInd = 0; // pick 0th as first pick...

    while( --n > 0 ) // test all values down to, but not, arr[0].
        if( arr[n] > arr[MaxInd] ) maxInd = n;

    return maxInd;
}

注意:size_t是一个unsigned数据类型,如果递减到零以下,它将是underflow。请小心处理,以避免无限循环。

n3ipq98p

n3ipq98p3#

int arr[6]并将5作为参数传递给max应该可以完成此工作。

相关问题