现在的位置: 首页 > 05 数组 > 正文

数组中的最大最小值(数组作为函数参数)

2013年11月25日 05 数组 ⁄ 共 1435字 ⁄ 字号 数组中的最大最小值(数组作为函数参数)已关闭评论

如何求出一组数中的最大最小值?

先来回忆一下如何求三个整数的最大值?

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
int main()
{
    int a, b, c, max;
    scanf("%d%d%d",&a,&b,&c);
    max = a;
    if (b>max) max = b;
    if (c>max) max = c;
    printf("%d\n", max);
    return 0;
}

如果使用数组来完成同样的功能,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
int main()
{
    int a[3], max;
    scanf("%d%d%d",a+0,a+1,a+2); 
    /*  scanf("%d%d%d",&a[0],&a[1],&a[2]); */
    max = a[0];
    if (a[1]>max) max = a[1];
    if (a[2]>max) max = a[2];
    printf("%d\n", max);
    return 0;
}

如果有更多的数,就需要使用循环了。

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
int main()
{
    int i, max, a[5]={3,4,15,6,-7};   
    max = a[0];
    for (i=1; i<5; i++)
      if (a[i]>max) max = a[i];
    printf("%d\n", max);
    return 0;
}

那么如何来求长度为n的数组 a 中的最大值呢? 这个功能经常用到,可以写成函数 find_max

1
2
3
4
int find_max(int a[], n)
{
 
}

下面的代码是求出最大值,直接返回。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
 
int find_max(int a[], int n)
{
    int i, max;
    max = a[0];  /* 假定 a[0] 最大 */
    for (i=1; i<n; i++)    /* 依次将a[1]..a[n-1]和当前选出的最大值比较 */
        if (a[i]>max) max = a[i];  /* 如果 a[i] 更大,则取而代之*/
    return max;
}
 
int main(int argc, char *argv[])
{
    int v[6] = { 2, 3, 9, 1, 0, 7};  /* 数组初始化 */
    printf("%d\n", find_max(v, 6));
    return 0;
}

其实更好的方法是求出最大值所在的位置,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
 
int find_max(int a[ ], int n)
{
    int i, pos;  /* pos是位置position的简写*/
    pos = 0;
    for (i=1; i<n; i++)
        if (a[i]>a[pos]) pos = i;
    return pos;
}
 
int main(int argc, char *argv[])
{
    int v[6] = { 2, 3, 9, 1, 0, 7};
    int pos;
    pos = find_max(v, 6);
    printf("%d\n", v[pos]);
    return 0;
}

下面使用另外的方式来实现同样的功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
 
void find_max(int a[], int n, int *pmax)
{
    int i, max;
    *pmax = a[0];  
    for (i=1; i<n; i++)   
        if (a[i]>*pmax) *pmax = a[i];  
}
 
int main(int argc, char *argv[])
{
    int v[6] = { 2, 3, 9, 1, 0, 7};  /* 数组初始化 */
    int max;
    find_max(v, 6, &max);
    printf("%d\n", max);
    return 0;
}

这种方式不再返回值(返回值类型为void),函数体中没有了 return语句。

这种方式有什么好处呢? 适合在一个函数中返回多个值。如下所示,在函数 find_maxmin_min 中求出了最大和最小值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
 
void find_max_min(int a[], int n, int *pmax, int *pmin)
{
    int i;
    *pmax = a[0];  
    for (i=1; i<n; i++)   
        if (a[i]>*pmax) *pmax = a[i];  
    *pmin = a[0];  
    for (i=1; i<n; i++)   
        if (a[i]<*pmin) *pmin = a[i];          
}
 
int main(int argc, char *argv[])
{
    int v[6] = { 2, 3, 9, 1, 0, 7};  /* 数组初始化 */
    int max, min;
    find_max_min(v, 6, &max, &min);
    printf("%d %d\n", max, min);
    return 0;
}

抱歉!评论已关闭.