查詢最大值,最小值,以及第二大值
阿新 • • 發佈:2018-12-13
/*
- 檔名:陣列查詢特定值.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;
}