0

当我试图找到数组的最大浮点数时,我在 C 中遇到问题,但我最大的 int 工作得很好。我想我可能会超过数组长度,但我不明白这是怎么可能的。

int largestInt(int array[], int length){
    int max = array[0];
    int i;

    for( i=1; i<length; i++){
         if(array[i] > max){
               max = array[i];
         }
    }

    return max;
}

上面的代码适用于整数,但是如果我将其更改为使用浮点数,如下所示,

float largestFloat(float array[], int length){
    float max = array[0];
    int i;

    for( i=1; i<length; i++){
         if(array[i] > max){
               max = array[i];
         }
    }

    return max;
} 

有时它会给我正确的答案,有时它会给我一个巨大的数字,甚至不在原始数组中。这让我相信我已经超过了数组的长度。

float f[15] = {9.5, 45.64, 313.11, 113.89, 81.56, 250.00, 11.9, 469.98, 313.11, 4.68, 34.33, 8013.55, -10.15, 11.5, 88.0} <-- filled with 15 values
largestFloat(f,15);

这就是我要运行的。

4

2 回答 2

2

没有看到一个完整的例子,我不得不说你是对的。数组大小可能是错误的。首先修复返回类型:

float largestFloat(float array[], int length){

接下来,您可能想要添加对空数组的保护,因为这将自动溢出获取数组 [0]:

if (length < 1) return 0;

maximumFloat() 的其余部分很好。

然后调用:

float f[15] = {2.3 ... 102} <-- filled with 15 values
size_t length = sizeof f / sizeof f[0];
float f_max = largestFloat(f, length);
printf("max=%g, length=%d\n", f_max, length);

这将计算(在编译时)数组 f 的实际大小。寻找长度不是您认为应该的长度的情况。如果您键入 . 而不是 , 在没有小数点的值之间。这是我所知道的从看似 15 的值中获得 14 个或更少值的唯一方法。

于 2013-09-21T01:46:13.640 回答
0

问题是你找到了最大的float然后返回int

int largestFloat(float array[], int length){     // return type is int
    float max = array[0];                        // max is float
    int i;

    for( i=1; i<length; i++){
         if(array[i] > max){
               max = array[i];
         }
    }

    return max;
} 
于 2013-09-21T01:28:27.060 回答