尝试使用C查找数组中的最大项

时间:2014-12-02 07:48:52

标签: c arrays pointers

我正在尝试编写一个可以通过使用maxterm函数找到最大数组的程序。

基本上你告诉程序要在数组中放入多少个数字,放入每个数字,它会告诉你最大的数字。

程序适用于大小为4或更小的数组但是一旦数组长度超过4,返回的最大值就不正确:它总是一个很大的数字,甚至不是数组。

例如:

Please enter the number of data values: 4
enter value 1: 1
enter value 2: 3
enter value 3: 4
enter value 4: 1
the maximum term is 4

可是:

Please enter the number of data values: 5
enter value 1: 1
enter value 2: 3
enter value 3: 8
enter value 4: 4
enter value 5: 2
the maximum term is 32767

这是我的代码:

#include <stdio.h>

int maxterm(int *numbers, int *size)     {

int index = 0;
int max = numbers[0];



for (index = 0 ; index < *size ; index++)   {
    if (max < numbers[index+1])   {
        max = numbers[index+1];
    }
}
return max;

}

int main(int argc, const char * argv[]) {
int num, index;
printf(" Please enter the number of data values: ");
scanf("%d", &num); //user enters in the length of the number list
int array[num];
for (index = 0 ; index < num ; index++) {
    printf("Please enter in value %i: ", (index + 1));
    scanf("%i", &array[index]); //list is created number by number
}
int maxi = maxterm(array, &num); //the highest number in the list is then determined using the maxterm function.

printf("the maximum term is %i", maxi);

return 0;
}

我的错误在哪里?

3 个答案:

答案 0 :(得分:3)

你在这里超出界限:

for (index = 0 ; index < *size ; index++)   {
    if (max < numbers[index+1])   {
        max = numbers[index+1];
    } 
}

而是正常迭代,除了从第二个元素开始。

答案 1 :(得分:0)

您正在访问数组越界,所以您看到了这个问题。 传递值看起来很适合此API。

 int maxterm(int *numbers, int size)     {

    int index = 0;
    int max = numbers[0];



    for (index = 0 ; index < size ; index++)   {
        if (max < numbers[index])   {
            max = numbers[index];
        }
    }
    return max;

    }

电话应该是:

int maxi = maxterm(array, num);

答案 2 :(得分:0)

你的代码很完美。 只需在最大功能中用i + 1替换它