找到数组的最低元素

finding the lowest element of an array

所以我尝试使用 if 和 else if 循环找到具有最低值的元素。

我输入了这个确切的东西来找到最高值。

就像我从字面上复制并粘贴相同的代码,只是更改了符号。

那个功能完美。

但是为了找到这段代码中的最低值,它只是返回 month1 = 0 并且值为 0。

我认真地逐行扫描,看看是否有问题。

但我真的搞不清楚哪里出了问题,这有点令人沮丧。

请帮忙。

最低的变量是双精度。

变量 month1 是一个整数。

    if(rainfall[0] < rainfall[1] & rainfall[0] < rainfall[2] & rainfall[0] < rainfall[3]
       & rainfall[0] < rainfall[4] & rainfall[0] < rainfall[5] & rainfall[0] < rainfall[6]
       & rainfall[0] < rainfall[7] & rainfall[0] < rainfall[8] & rainfall[0] < rainfall[9]
       & rainfall[0] < rainfall[10] & rainfall[0] < rainfall[11])
       {
           lowest = rainfall[0];
           month1 = 1;
       }
    else if(rainfall[1] < rainfall[0] & rainfall[1] < rainfall[2] & rainfall[1] < rainfall[3]
       & rainfall[1] < rainfall[4] & rainfall[1] < rainfall[5] & rainfall[1] < rainfall[6]
       & rainfall[1] < rainfall[7] & rainfall[1] < rainfall[8] & rainfall[1] < rainfall[9]
       & rainfall[1] < rainfall[10] & rainfall[1] < rainfall[11])
       {
           lowest = rainfall[1];
           month1 = 2;
       }
    else if(rainfall[2] < rainfall[0] & rainfall[2] < rainfall[1] & rainfall[2] < rainfall[3]
       & rainfall[2] < rainfall[4] & rainfall[2] < rainfall[5] & rainfall[2] < rainfall[6]
       & rainfall[2] < rainfall[7] & rainfall[2] < rainfall[8] & rainfall[2] < rainfall[9]
       & rainfall[2] < rainfall[10] & rainfall[2] < rainfall[11])
       {
           lowest = rainfall[2];
           month1 = 3;
       }
    else if(rainfall[3] < rainfall[0] & rainfall[3] < rainfall[1] & rainfall[3] < rainfall[2]
       & rainfall[3] < rainfall[4] & rainfall[3] < rainfall[5] & rainfall[3] < rainfall[6]
       & rainfall[3] < rainfall[7] & rainfall[3] < rainfall[8] & rainfall[3] < rainfall[9]
       & rainfall[3] < rainfall[10] & rainfall[3] < rainfall[11])
       {
           lowest = rainfall[3];
           month1 = 4;
       }
    else if(rainfall[4] < rainfall[1] & rainfall[4] < rainfall[2] & rainfall[4] < rainfall[3]
       & rainfall[4] < rainfall[0] & rainfall[4] < rainfall[5] & rainfall[4] < rainfall[6]
       & rainfall[4] < rainfall[7] & rainfall[4] < rainfall[8] & rainfall[4] < rainfall[9]
       & rainfall[4] < rainfall[10] & rainfall[4] < rainfall[11])
       {
           lowest = rainfall[4];
           month1 = 5;
       }
    else if(rainfall[5] < rainfall[1] & rainfall[5] < rainfall[2] & rainfall[5] < rainfall[3]
       & rainfall[5] < rainfall[4] & rainfall[5] < rainfall[0] & rainfall[5] < rainfall[6]
       & rainfall[5] < rainfall[7] & rainfall[5] < rainfall[8] & rainfall[5] < rainfall[9]
       & rainfall[5] < rainfall[10] & rainfall[5] < rainfall[11])
       {
           lowest = rainfall[5];
           month1 = 6;
       }
    else if(rainfall[6] < rainfall[0] & rainfall[6] < rainfall[1] & rainfall[6] < rainfall[2]
       & rainfall[6] < rainfall[3] & rainfall[6] < rainfall[4] & rainfall[6] < rainfall[5]
       & rainfall[6] < rainfall[7] & rainfall[6] < rainfall[8] & rainfall[6] < rainfall[9]
       & rainfall[6] < rainfall[10] & rainfall[6] < rainfall[11])
       {
           lowest = rainfall[6];
           month1 = 7;
       }
    else if(rainfall[7] < rainfall[1] & rainfall[7] < rainfall[2] & rainfall[7] < rainfall[3]
       & rainfall[7] < rainfall[4] & rainfall[7] < rainfall[5] & rainfall[7] < rainfall[6]
       & rainfall[7] < rainfall[0] & rainfall[7] < rainfall[8] & rainfall[7] < rainfall[9]
       & rainfall[7] < rainfall[10] & rainfall[7] < rainfall[11])
       {
           lowest = rainfall[7];
           month1 = 8;
       }
    else if(rainfall[8] < rainfall[1] & rainfall[8] < rainfall[2] & rainfall[8] < rainfall[3]
       & rainfall[8] < rainfall[4] & rainfall[8] < rainfall[5] & rainfall[8] < rainfall[6]
       & rainfall[8] < rainfall[7] & rainfall[8] < rainfall[0] & rainfall[8] < rainfall[9]
       & rainfall[8] < rainfall[10] & rainfall[8] < rainfall[11])
       {
           lowest = rainfall[8];
           month1 = 9;
       }
    else if(rainfall[9] < rainfall[1] & rainfall[9] < rainfall[2] & rainfall[9] < rainfall[3]
       & rainfall[9] < rainfall[4] & rainfall[9] < rainfall[5] & rainfall[9] < rainfall[6]
       & rainfall[9] < rainfall[7] & rainfall[9] < rainfall[8] & rainfall[9] < rainfall[0]
       & rainfall[9] < rainfall[10] & rainfall[9] < rainfall[11])
       {
           lowest = rainfall[9];
           month1 = 10;
       }
    else if(rainfall[10] < rainfall[1] & rainfall[10] < rainfall[2] & rainfall[10] < rainfall[3]
       & rainfall[10] < rainfall[4] & rainfall[10] < rainfall[5] & rainfall[10] < rainfall[6]
       & rainfall[10] < rainfall[7] & rainfall[10] < rainfall[8] & rainfall[10] < rainfall[9]
       & rainfall[10] < rainfall[0] & rainfall[10] < rainfall[11])
       {
           lowest = rainfall[10];
           month1 = 11;
       }
    else if(rainfall[11] < rainfall[1] & rainfall[11] < rainfall[2] & rainfall[11] < rainfall[3]
       & rainfall[11] < rainfall[4] & rainfall[11] < rainfall[5] & rainfall[11] < rainfall[6]
       & rainfall[11] < rainfall[7] & rainfall[11] < rainfall[8] & rainfall[11] < rainfall[9]
       & rainfall[11] < rainfall[10] & rainfall[11] < rainfall[0])
       {
           lowest = rainfall[11];
           month1 = 12;
       }

如评论中所述,您正在使用 & BITWISE AND 运算符,而您应该使用 && LOGICAL AND 运算符。

但即便如此,您提供的代码中没有循环,只有一大堆 if,效率很低,容易出错,而且难以维护。使用 actual 循环将大大简化代码并解决您的问题,例如:

double lowest = rainfall[0];
int month1 = 1;
for(int i = 1; i < 12 ++i) {
    if (rainfall[i] < lowest) {
        lowest = rainfall[i];
        month1 = i + 1;
    }
}

最高值也是如此:

double highest = rainfall[0];
int month1 = 1;
for(int i = 1; i < 12 ++i) {
    if (rainfall[i] > highest) {
        highest = rainfall[i];
        month1 = i + 1;
    }
}

也就是说,考虑改用标准 std::min_element() and std::max_element() 算法:

#include <algorithm>

auto iter = std::min_element(rainfall, rainfall + 12);
double lowest = *iter;
int lowest_month1 = std::distance(rainfall, iter) + 1;

iter = std::max_element(rainfall, rainfall + 12);
double highest = *iter;
int highest_month1 = std::distance(rainfall, iter) + 1;

或者,标准 std::minmax_element() 算法:

#include <algorithm>

auto iters = std::minmax_element(rainfall, rainfall + 12);

double lowest = *(iters.first);
double highest = *(iters.second);

int lowest_month1 = std::distance(rainfall, iters.first) + 1;
int highest_month1 = std::distance(rainfall, iters.second) + 1;