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;
}