算法的基本思想是先定义两个变量分别存放最大项和次大项,然后令这两个变量分别等于a[0]和a[1]中的较者和较小者,然后用后面的每个元素跟这两个元素进行比较,依次记录下最大项和次大项的值和元素下标。
程序代码如下:
-
#include <stdio.h>
-
-
#define N sizeof(a) / sizeof(a[0])
-
-
int main(int argc, const char *argv[])
-
{
-
int i = 0,j = 0;
-
int max = 0,min = 0;
-
int max_tag = 0, min_tag = 0;
-
-
int a[] = {12,7,3,9,10,20,32,100,54,66,77,88};
-
-
max = a[0] > a[1] ? a[0] : a[1];
-
min = a[0] < a[1] ? a[0] : a[1];
-
-
for(i = 2;i < N;i++)
-
{
-
if(a[i] > max)
-
{
-
max = a[i];
-
max_tag = i;
-
}
-
if(a[i] < min)
-
{
-
min = a[i];
-
min_tag = i;
-
}
-
}
-
-
printf("the largets number is a[%d] = %d\n",max_tag,max);
-
printf("the smallest number is a[%d] = %d\n",min_tag,min);
-
-
-
-
return 0;
-
}
结果如下:
-
litong@ltubuntu:~/studyc/c05$ gcc max_min_num_arr.c
-
litong@ltubuntu:~/studyc/c05$ ./a.out
-
the largets number is a[7] = 100
-
the smallest number is a[2] = 3
另外,还有一种方法就是使用一次冒泡排序或者选择排序算法对数组元素进行排序,便可以确定最大和次大元素以及最小和次小元素的值以及它的下标值,但是,从编程思想的角度来看,不建议使用排序的方法来实现。
阅读(586) | 评论(0) | 转发(0) |