
max=num【0】等号两边互换后运行错误
min=num【0】等号两边互换后运行错误
求原因

如果改为num[0]=max, num[0]=min,那数组第一个元素的值就被设置为max或min的值,这就会让求数组最大值和最小值出现错误,因为数组第一个元素的值改变了,有很大可能不是原来第一个元素的值,因为max和min都未赋初始化,其值就是内存位置的随机值,所以这就会出现错误;
而如果让max=num[0],和min=num[0],然后再拿这个max和min与数组其他元素的值比较,将较大的值赋值给max,较小的值赋值给min,循环结束,就可得出数组的最大值和最小值。
测试代码如下:
#include <stdio.h>
int main(void){
int num[100];
int i,a,min,max;
printf("输入数组长度:\n");
scanf("%d",&a);
printf("请输入数组中的元素:\n");
for(i=0;i<a;i++){
scanf("%d",&num[i]);
}
// 赋值前先备份数组第一个元素的值
int tnum0=num[0];
num[0]=min;
for(i=0;i<a;i++){
if(num[i]<min){
min=num[i];
}
}
num[0]=max;
for(i=0;i<a;i++){
if(num[i]>max){
max=num[i];
}
}
printf("\nnum[0]=max, num[0]=min,求得数组最大值最小值为:\n");
printf("max=%d,min=%d",max,min);
// 将数组第一个元素的值复原
num[0]=tnum0;
min=num[0];
for(i=0;i<a;i++){
if(num[i]<min){
min=num[i];
}
}
max=num[0];
for(i=0;i<a;i++){
if(num[i]>max){
max=num[i];
}
}
printf("\n\nmax=num[0], min=num[0],求得数组最大值最小值为:\n");
printf("max=%d,min=%d",max,min);
return 0;
}
