C++求陣列中的最大值和最小值(帶原始碼)

2020-07-16 10:04:37
用於查詢陣列中最高值(其實就是最大值,但是為對應原始碼中的 highest,故仍稱為最高值)和最低值(其實就是最小值,但是為對應原始碼中的 lowest,故仍稱為最低值)的演算法非常相似。首先,來看一下在陣列中尋找最高值的程式碼。假設在程式中出現了以下語句。

const int SIZE = 10;
int numbers[SIZE] = {15, 6, 3, 11, 22, 4, 0, 1, 9, 12};

查詢陣列中最高值的程式碼如下所示:
int count;
int highest;
highest = numbers[0];

for (count = 1; count < SIZE; count++)
{
    if (numbers[count] > highest)
        highest = numbers[count];
}
首先,該語句將第一個陣列元素中的值複製到名為 highest 的變數中。然後,迴圈將從下標 1 開始的所有其餘陣列元素與儲存在 highest 中的值進行比較。每次當它發現陣列元素中的值大於 highest 中的值時,都會將其複製到 highest。迴圈完成後,highest 將包含陣列中最的值。

以下程式碼將找到陣列中的最低值。對比之後可以發現,它與查詢最高值的程式碼幾乎相同。
int count;
int lowest;
lowest = numbers[0];
for (count = 1; count < SIZE:count++)
{
    if (numbers[count] < lowest);
        lowest = numbers[count];
}
當迴圈完成後,lowest 將包含陣列中的最低值。

下面的程式將建立月度銷售報告,它演示了查詢陣列中總和、平均值、最高值和最低值的演算法。它將演算法結合起來,在一個迴圈中即可找到最高值和最低值。用於填充陣列的銷售資料是從 sales.dat 檔案中讀取的,該檔案包含以下值:

62458 81598 98745 53460 35678 86322
89920 78960 124569 43550 45679 98750

實現程式碼為:
#include <iostream>
#include <fstream> // Needed to use files
#include <iomanip>
using namespace std;

int main()
{
    const int NUM_OFFICES = 12;
    ifstream dataIn;
    int office; // Loop counter
    double sales[NUM_OFFICES], // Array to hold the sales data
        totalSales = 0.0, // Accumulator initialized to zero
        averageSales,
        highestSales,
        lowestSales;

    // Open the data file
    dataIn.open("sales.dat");
    if (!dataIn)
        cout << "Error opening data file.n";
    else
    {
        //Fill the array with data from the file
        for (office = 0; office < NUM_OFFICES; office++)
            dataIn >> sales[office];
        dataIn.close();
       
        // Sum all the array elements
        for (office = 0; office < NUM_OFFICES; office++)
            totalSales += sales[office];
        // Calculate average sales
        averageSales = totalSales / NUM_OFFICES;
       
        //Find highest and lowest sales amounts
        highestSales = lowestSales = sales[0];
        for (office = 1; office < NUM_OFFICES; office++)
        {
            if (sales[office] > highestSales)
                highestSales = sales[office];
            else if (sales[office] < lowestSales)
                lowestSales = sales[office];
        }
        // Display results
        cout << fixed << showpoint << setprecision(2);
        cout << "Total sales $" << setw (9) << totalSales << endl;
        cout << "Average sales $" << setw(9) << averageSales << endl;
        cout << "Highest sales $" << setw(9) << highestSales << endl;
        cout << "Lowest sales $" << setw (9) << lowestSales << endl;
    }
    return 0;
}
程式輸出結果為:

Total sales $899689.00
Average sales $ 74974.08
Highest sales $124569.00
Lowest sales $ 35678.00