在比较数组最大最小值的时候,通常是把数组的第一个元素设为最大和最小值,然后再对其进行比较,代码如下
int arr[2];
int min = arr[0];
int max = arr[0];
if (arr[i] > max) {
max = arr[i];
}
if (arr[i] < min) {
min = arr[i];
}
但有一个问题是,在最开始定义数组的时候,未给初始值,则会导致max和min是一个随机值,这样就会有一种情况---------max可能比所有元素都大,而min则也可能会比所有元素都小;
刚开始我还在想,arr[0]在后面的输入中不是会变吗?但是,max和min存下的是arr[0]一开始的随机值,后面变化的是arr[0]本身,而max和min未被改变。
具体实例如下:
若最开始错误的思路来写代码
#define _CRT_SECURE_NO_WARNINGS//由于我用的是vs编译器,该定义是为了避免使用scanf()函数时报错定义的
#include <stdio.h>
#include <stdlib.h>
int main() {
int arr[2];
int min = arr[0];
int max = arr[0];
for (int i = 0; i < 2; i++) {
scanf("%d", &arr[i]);
if (arr[i] > max) {
max = arr[i];
}
if (arr[i] < min) {
min = arr[i];
}
}
printf("最小值为:%d\n", min);
printf("最大值为:%d", max);
return 0;
}
而结果则会是
可以看到最大值是的结果没有问题,但最小值原本应该为1,而此时则为一个负值
于是我通过调试检测到
min和max的初值为一个负值,所以在后续的比较当中,该负值均小于数组中的元素,最大值肯定可以比较出来,而最小值则比较不出来
解决这个问题,可以先在数组内放入元素,再定义最大最小值的变量并初始化,再用循环比较
代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main() {
int arr[2];
for (int i = 0; i < 2; i++) {
scanf("%d", &arr[i]);
}
int min = arr[0];
int max = arr[0];
for (int i = 0; i < 2; i++) {
if (arr[i] > max) {
max = arr[i];
}
if (arr[i] < min) {
min = arr[i];
}
}
printf("最小值为:%d\n", min);
printf("最大值为:%d", max);
return 0;
}
这样得出的结果就是正常的了