C 如何正确初始化“min”变量?
我的代码中有一个小问题,就是如何从一系列数字中找到最小值。当我初始化min=0时,最小值变成0。但是当我不初始化min时,答案是正确的 为什么会发生这种情况?Xcode告诉我应该初始化min变量C 如何正确初始化“min”变量?,c,gcc,initialization,C,Gcc,Initialization,我的代码中有一个小问题,就是如何从一系列数字中找到最小值。当我初始化min=0时,最小值变成0。但是当我不初始化min时,答案是正确的 为什么会发生这种情况?Xcode告诉我应该初始化min变量 int a[20] = {0}; int max = 0; int min ; int sum = 0; srand((unsigned)time(NULL)); for (int i = 1; i <= 20; i++) { a[i] = 100 + rand()%(200 - 10
int a[20] = {0};
int max = 0;
int min ;
int sum = 0;
srand((unsigned)time(NULL));
for (int i = 1; i <= 20; i++) {
a[i] = 100 + rand()%(200 - 100 + 1);
if (max < a[i]) {
max = a[i];
}
printf("%d,%d\n",a[i],i);
if (min > a[i]) {
min = a[i];
}
sum += a[i];
}
printf("最大值:%d\n",max);
printf("最小值:%d\n",min);
printf("平均值:%d\n",sum / 20);
必须用一个大的数字初始化min,否则0可能仍然是最小的数字
您可以将min初始化为
INT_MAX是INT必须为INT_MAX添加的INT所能容纳的最大值
如果不使用值初始化min,则它将具有不确定的值,可以是任何值,因此在使用局部变量的值之前始终初始化它们。如果不初始化局部变量,则其值是不确定的,使用该值将导致未定义的行为 您应该做的是将其初始化为一个大值,就像将max初始化为一个小值一样。使用头文件中的INT_MAX 此外,如果变量不能为负,则可能应该使用无符号int,并将min初始化为UINT_MAX 当我初始化min=0时,最小值变成0 因为在这种情况下,如果min>a[i]总是false。记住,a[i]大于等于100 但是当我不初始化min时,答案是正确的 如果不初始化局部变量,它的值是不确定的,并且包含一些垃圾值,可能是一个较大的值。看来,你的逻辑是正确的,你显然得到了正确的答案。但是,使用非斜体局部变量的值调用 解决方案:
使用头文件中存在的最大可能值INT_MAX初始化min。编译器警告是因为访问未初始化变量的值会产生未定义的行为 在数组中查找最小值的一种常见技术是将min初始化为数组中的第一个元素,然后迭代后续元素
min = a[0];
for (i = 1; i < 20; ++i) /* assume 20 elements */
if (a[i] < min) min = a[i];
这适用于所有可以使用min>a[i]进行比较的数值类型?只要从limits.h将min初始化为INT_MAX,一切都会正常工作。
min = a[0];
for (i = 1; i < 20; ++i) /* assume 20 elements */
if (a[i] < min) min = a[i];