如何过滤C代码中的最大值和最小值

时间:2015-03-26 15:06:26

标签: c visual-studio

请参阅下面的C代码我不明白如何比较-32000来检测最大值,0到99之间的任何数字都可以大于-32000。类似地,最小值应该> = 0,为什么将其设置为32000. ???

    / MaxNumber.cpp : Defines the entry point for the console application.
//
/* Promotes user enter an integer untile it detects 0 */
/* Fills a array buffer , and then finds minimum and maximum within it */

#include "stdafx.h"

#define MAX 100

int array[MAX];

int count = -1 , minimum, maximum, num_entered, temp ;

int main(int argc, char* argv[])
{
    puts("Enter integer values one per line ");
    puts(" Enter 0 when finished ");
    // do while to check the condition 
    //
    do 
    {
        scanf("%d", &temp);
        array[++count] = temp;
    } while ( count < (MAX-1) && temp != 0);
    ////////////////////////////////////////
    num_entered = count;
    //
    /* Find maximum and minimum value*/ 
    /* Set maximum to a very small value */
    /* Set minimum to a very large value */
    maximum = -32000;
    minimum = 32000;

    for ( count = 0; count <= num_entered && array[count] != 0; count++)
    {
        if ( array[count] > maximum )
            maximum = array[count];
        //
        // Now minimum 
        if ( array[count] < minimum )
            minimum = array[count];
    }
    //
    // Printing the results 
    printf("\n Maximum value entered is %d \n", maximum );
    //
    printf("\n Minimum value entered is %d \n", minimum );

    ////
    return 0;
}

2 个答案:

答案 0 :(得分:0)

首先假设最大值是一个非常小的数字。它应该是尽可能小的数字,但他们选择-32000。它将此值存储在变量maximum

然后迭代存储在数组中的值。当它找到一个大于存储在最大值中的值时,它会将最大值存储的值替换为最大值。它一直持续到数组中的所有值都被检查。最后,maximum包含数组中的最大值,除非数组中的所有值都小于-32000。在这种情况下,此实现将失败。

更好的实现会使用数组的第一个值初始化maximumminimum,并检查数组的其余元素。

它也可以使用maximum的最小可能值初始化int。您必须包含limits.h并使用INT_MIN

maximum = INT_MIN;
minimum = INT_MAX;

答案 1 :(得分:0)

每当编写“找到最大数字”的算法时,您只需遍历数据中的所有数字并存储到目前为止找到的最大数字。例如

for(int i=0; i<N; i++)
{
  if(data[i] > largest)
  {
    largest = data[i];
  }
}

为了完成上述操作,您存储找到的最大变量的变量largest必须正确初始化为数据可能具有的最小值。

执行此操作的正确方法是#include <limits.h>然后设置

int largest = INT_MIN;

然而,编写代码的人太过于草率而无法这样做。相反,他们粗略地假设int总是16位(这不是真的),在这种情况下,最小的可能值将是-32767。但是因为他们懒惰/马虎,他们使用舍入值-32000代替,不要问我为什么。

这意味着对于小于-32000(或大于32000)的值,代码将无法正常工作。此外,代码是不可移植的。标准Windows / Linux /任何机器使用32位int

请不要将您的代码视为学习/如何编写正确程序的参考。它的写得非常糟糕。