欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言实现数组中查找最大值、最小值和第二大值

程序员文章站 2024-03-15 21:25:48
...
/*
 * 文件名:数组查找特定值.c
 * 功能描述:查找数组中的最大值,最小值,第二大值
 * 编辑人:王廷云
 * 编辑日期:2017-12-12
*/
#include <stdio.h>

#define    NR    10 // 数组元素个数

/*从主函数开始*/
int main(int argc, char **argv)
{
    int ar[NR];
    int i;

    fprintf(stdout, "请输入%d个整数:\n", NR);

    /* 获取并检查用户输入 */
    while (1)
    {
        /* 循环获取NR个数据 */
        for (i = 0; i < NR; i++)
    	{
    	    if (fscanf(stdin, "%d", &ar[i]) != 1)
    	    {
    	        fprintf(stdout, "输入错误!请重新输入:\n");
        		while (getchar() != '\n'); // 丢弃多余非法字符
        		break;                     // 打破内层for循环
    	    }
        }

        /* 检查是否获取到NR个数据 */
    	if (i != NR)
    	{
            continue;
    	}
    	else
    	{
    	    break;
    	}
    }

    /* 查找最大值和最小值 */
    int max, min;
    max = ar[0];            // 假定第一个数为最大值
    min = ar[0];            // 同时假定也第一个数为最大值

    /* 从第二个数开始比较查找最值 */
    for (i = 1; i < NR; i++)
    {
        if (ar[i] > max)    // 最大值
    	{
    	    max = ar[i];
    	}

    	if (ar[i] < min)   // 最小值,不能使用else if,否则会跳过比较
    	{
    	    min = ar[i];
    	}
    }
    fprintf(stdout, "最大值为:%d  最小值为:%d\n", max, min);

    /* 接下来:查找第二大值 */
    int second;

    /* 先获取前两个数的第一大和第二大值 */
    ar[0] > ar[1] ? (max = ar[0], second = ar[1]): \
	                   (max = ar[1], second = ar[0]);

    /* 从第2个数开始比较查找 */
    for (i = 2; i < NR; i++)
    {
    	if (ar[i] > max)           // 查找最大值:目的是为了比较第二大值
    	{
    	    second = max;          // 先把最大值保存给第二大值
    	    max = ar[i];
    	}
    	else if (second < ar[i])  // 比最大值小的数再看看是否大于第二大值
    	{
    	    second = ar[i];
    	}
    }
    fprintf(stdout, "第二大值为:%d\n", second);

    return 0;
}