请参阅下面的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;
}
答案 0 :(得分:0)
首先假设最大值是一个非常小的数字。它应该是尽可能小的数字,但他们选择-32000。它将此值存储在变量maximum
。
然后迭代存储在数组中的值。当它找到一个大于存储在最大值中的值时,它会将最大值存储的值替换为最大值。它一直持续到数组中的所有值都被检查。最后,maximum
包含数组中的最大值,除非数组中的所有值都小于-32000。在这种情况下,此实现将失败。
更好的实现会使用数组的第一个值初始化maximum
和minimum
,并检查数组的其余元素。
它也可以使用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
。
请不要将您的代码视为学习/如何编写正确程序的参考。它的写得非常糟糕。