4

検討:

#include <iostream> // Include header file

using namespace std;

int main () //start of main function
{

    int values[20]; // Declares array and how many elements
    int small, big; // Declares integer
    big = small = values[0]; // Assigns element to be highest or lowest value

    for (int i = 0; i < 20; i++) // Counts to 20 and prompts the user for a value and stores it
    {
        cout << "Enter value " << i << ": ";
        cin >> values[i];
    }

    for (int i = 0; i < 20; i++) // Works out the biggest number
    {
        if(values[i] > big) // Compare biggest value with current element
        {
            big = values[i];
        }
    }

    for (int i = 0; i < 20; i++) // Works out the smallest number
    {
        if (values[i] < small) // Compares smallest value with current element
        {
            small = values[i];
        }
    }

    cout << "The biggest number is " << big << endl; // Prints outs the biggest number
    cout << "The smallest number is " << small << endl; // Prints out the smallest number
}

これはこれまでの私のコードです。私が抱えている問題は、配列の最大数を出力することです。最初の要素を最高値と最低値に割り当てることと関係があります。別々にやるとうまくいきます。助言がありますか?

4

5 に答える 5

11

独自のソリューションを本当に実装する必要がない限り、std::minmax_elementを使用できます。これは、イテレータのペアを返します。1 つは最小の要素、もう 1 つは最大の要素です。

#include <algorithm>

auto minmax = std::minmax_element(std::begin(values), std::end(values));

std::cout << "min element " << *(minmax.first) << "\n";
std::cout << "max element " << *(minmax.second) << "\n";
于 2013-04-30T11:38:34.723 に答える
6
big=small=values[0]; //assigns element to be highest or lowest value

AFTERループを埋める必要があります

//counts to 20 and prompts user for value and stores it
for ( int i = 0; i < 20; i++ )
{
    cout << "Enter value " << i << ": ";
    cin >> values[i];
}
big=small=values[0]; //assigns element to be highest or lowest value

配列を宣言するとき-それはunintialized(いくつかの未定義の値を格納する)であるため、割り当てた後も値を格納しbigます。smallundefined

もちろん、ループを記述する代わりに、、、std::min_elementまたはstd::max_elementfromstd::minmax_elementを使用できます。C++11

于 2013-04-30T11:37:32.670 に答える
1

配列が初期化される前に、big と small に代入します。つまり、big と small は、この時点でスタックにあるものの値を想定します。それらは単純な値の型であり、参照がないため、cin >> を介して values[0] が書き込まれると、新しい値を想定しません。

最初のループの後に割り当てを移動するだけで問題ありません。

于 2013-04-30T11:38:50.477 に答える
0

配列を埋めた後に初期化するか、次のように書くことができます。

 small =~ unsigned(0)/2; // Using the bit-wise complement to flip 0's bits and dividing by 2 because unsigned can hold twice the +ve value an

整数が保持できます。

 big =- 1*(small) - 1;

それ以外の:

big = small = values[0]

配列を埋める前にこの行を書くと、大きな値と小さな値がメモリからのランダムな残りの値(整数はPODであるため)に等しくなり、それらの数値が配列内の他の値よりも大きいか小さい場合、それらを出力として取得します。

于 2013-04-30T13:14:21.217 に答える