先让最大值为数组首元素,然后用max和数组的每一个值进行比较,若小则交换,此时将max的旧值给次最大值submax。但如果数组中最大值在遍历前就已经找到,那么submax将不再更新,所以在max值不更新的时候,要将submax与最近遍历到的数组与元素进行更新,以保证submax得到数组中的次大值
代码如下:
#include<stdio.h>
#include<stdlib.h>
int main() {
int n;
printf("请输入数组个数:");
scanf("%d", &n);
printf("%d\n", n);
int arr[n];
printf("请输入数组元素:\n");
for(int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
for(int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
//最后再判断max和submax的大小
int Max = arr[0], Submax = arr[0];//保存最大值和次最大值
for(int i = 1; i < n; i++) {
if(Max < arr[i]) {
Submax = Max; //遍历的时候更新最大值,然后将最大值的旧值丢给次最大值
Max = arr[i];
}else{
if(Submax < arr[i]) {
Submax = arr[i]; //此时次最大值不更新,所以要用次最大值来和数组元素比较
}
}
}
printf("%d\t%d", Max, Submax);
}