1. 程式人生 > >查詢最大值,最小值,以及第二大值

查詢最大值,最小值,以及第二大值

/*

  • 檔名:陣列查詢特定值.c
  • 功能描述:查詢陣列中的最大值,最小值,第二大值 */ #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;

}