C语言求全班同学身高的最大值和最小值

编写程序,帮桐桐找出全班同学身高的最大值和最小值。

问题分析

输入:班级总人数;依次输入班上每位同学的身高值(float型)。

输出:最大身高值和最小身高值(float型)。

这是一个依次比较大小的问题,具体步骤为:

1) 准备两个位置 A 和 B,A 位置站立身高最高的,B 位置站立身高最矮的;
2) 第一位同学先站在 A 位置,第二位同学跟站在 A 位置的同学比身高,如果第二位同学高,则替换站在 A 位置的同学,否则,第二位同学站在 B 位置;
3) 接着第三位同学跟站在 A 位置的同学比身高,如果第三位同学高,则替换站在 A 位置的同学,否则,第三位同学再跟站在 B 位置的同学比身高,如果第三位同学矮,则替换站在 B 位置的同学;
4) 后面每一位同学都像第三位同学一样,依次跟站在 A 位置或 B 位置的同学比身高并替换站立,直至所有同学都参加过身高比较,最后 A 位置站立的就是身高最高的同学,而 B 位置站立的就是身高最矮的同学。

算法描述

图 1:N-S 图描述

代码清单 1:找出 n 位同学身高的最大值和最小值
#include <stdio.h>
#include <stdlib.h>
int main( )
{
    int n,i;
    float x,max_height,min_height;
    printf("输入全班同学人数(个):\n");
    scanf("%d",&n);
    printf("输入第1位同学的身高(cm):\n");  
    scanf("%f",&x);
    max_height = x;    //初始化最大身高值
    min_height = x;    //初始化最小身高值
    for(i=1;i<n;i++)
    {
        printf("输入第%d位同学的身高(cm):\n",i+1);
        scanf("%f",&x);
        if(x > max_height) max_height = x;
        else if(x < min_height) min_height = x;
    }
    printf("全班%d位同学身高最大值:%.2fcm\n",n,max_height);
    printf("全班%d位同学身高最小值:%.2fcm\n",n,min_height);
    system("pause");
    return 0;
}

运行结果为:

输入全班同学人数(个):
6
输入第1位同学的身高(cm):
181
输入第2位同学的身高(cm):
178
输入第3位同学的身高(cm):
178
输入第4位同学的身高(cm):
176
输入第5位同学的身高(cm):
156
输入第6位同学的身高(cm):
179
全班6位同学身高最大值:181.00cm
全班6位同学身高最小值:156.00cm


在程序中求多个数的最大值,在初始化最大值变量时,为了便于被后面出现的较大值替换,一般将其初始化为尽可能小的值(比如 0);同理,如果求最小值,在初始化最小值变量时,一般将其初始化为尽可能大的值(比如 32767)。

本例中,将最大值和最小值都初始化为第一个值,这样做的目的是为了提高程序的运行效率(减少了比较的次数)。