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

/*
 * 文件名:数组查找特定值.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;
}

  • 13
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值