Вывести максимальное значение в массиве в C - PullRequest
0 голосов
/ 09 марта 2019

Когда я запускаю это, ageProgMax получается как 29 вместо того, что я хочу, 60. Я сделал это для наименьшего количества кафе, которые пьют аналитики, и это сработало, но почему-то это не так.

int main()
{
    char poste[] ={'P', 'P', 'O', 'A', 'P', 'A', 'P', 'P'};
    int nbCafe[] ={5, 1, 3, 0, 5, 1, 0, 2};
    int age[] ={25, 19, 27, 22, 49, 24, 60, 29};
    int nbPers = sizeof(age) / sizeof(int);
    int i;
    int ageProgMax = 0;
    for (i = 0; i < nbPers; i++)
        if (poste[i] =='P' || age[i] > ageProgMax)
        {
      ageProgMax = age[i];
        }
    printf ("Max age of programmers : %d\n", ageProgMax);

    return 0;
}

Любая помощь?

Спасибо

Ответы [ 2 ]

1 голос
/ 09 марта 2019

Это из-за || в вашем состоянии.Посмотрите на условие, которое вы установили, т.е. if (poste[i] =='P' || (age[i] > ageProgMax)).В нем говорится о сохранении нового значения в ageProgMax, если значение (age[i] > ageProgMax) или poste[i] =='P' становится истинным.Таким образом, для последней записи, т.е. 29, даже если (age[i] > ageProgMax) равно false, poste[i] =='P' имеет значение true и вызывает перезапись ageProgMax 60 на 29.

Вы можете исправить свою программу следующим образом.

int main()
{
    char poste[] ={'P', 'P', 'O', 'A', 'P', 'A', 'P', 'P'};
    int nbCafe[] ={5, 1, 3, 0, 5, 1, 0, 2};
    int age[]    ={25, 19, 27, 22, 49, 24, 60, 29};
    int nbPers = sizeof(age) / sizeof(int);
    int i;
    int ageProgMax = 0;

    for (i = 0; i < nbPers; i++)
    {
        if (poste[i] =='P' &&  (age[i] > ageProgMax))
        {
            ageProgMax = age[i];
        }
    }

    printf ("Max age of programmers : %d\n", ageProgMax);

    return 0;
}
0 голосов
/ 09 марта 2019
#define MAX(a,b)    ((*(a)) > (*(b)) ? (a) : (b))

int *largest(int *arr, size_t size)
{
    int *result = NULL;
    if(arr && size)
    {
        if(size == 1)
        {
            retult = *arr;
        }
        else
        {
            result = MAX(arr, arr + 1)
            arr += 2;
            size -= 2;
            while(size--)
            {
                result = MAX(result, arr);
                arr++;
            }
        }

    }
    return result;
}

Возвращает NULL при ошибке или указатель на наибольшее целое число.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...