Написание функции C с именем CalculateOddEven, которая принимает указатель на целое число a и фактические целые числа b и c - PullRequest
0 голосов
/ 13 апреля 2019

Я сомневаюсь в своем назначении, которое я пытался сделать, но я не думаю, что код верен, так что если кто-нибудь может мне помочь с этим. Вопрос в том, что я должен написать C-функцию с именем CalculateOddEven, которая переводит pointer в целое число a и действительные целые числа b и c, функция должна вернуть и фактическое целое число Функция должна генерировать случайное число между b и c, а затем экспортируйте ближайшее четное число (либо само число, либо предыдущий номер), при этом возвращая ближайший положительный номер (либо сам номер или следующий номер).

Для полноты вы должны заполнить генератор случайных чисел в вашем функция.

The algorithm Must NOT use modulo, if statements, case statements, ternary operators, or any other form of selection control.

Hint : Use bitwise operators

int CalculateOddEven()
{
    int * a;
    int b, c;
    int count = 1;
    b = 5;
    c = 20;
    int n, num, e;
    int i;
    for (i = 0; i < count; i++) {
         num = (rand() %
                   (c - b + 1)) + b;
         }
        n = num & 1;

        while(n != 0){
            e = num - 1;
            n = e & 1;
        }
        printf("%d", e);

    return num;
}


int main()
{

    srand(time(0));

    printf(" %d", CalculateOddEven());

    return 0;
}

Я пробовал этот код, но мне нужно собрать все это в одну функцию и получить точные результаты, а результаты не постоянны.

1 Ответ

1 голос
/ 13 апреля 2019

Я думаю, что здесь есть некоторая путаница, потому что возвращение «ближайшего положительного числа» с использованием только побитовых операций не имеет никакого смысла - это невозможно.Я подозреваю, что ваша проблема на самом деле запрашивает «самые близкие четные и нечетные числа», и в этом случае алгоритм довольно прост.

// Closest even number, gives num - 1 if num is odd.  (assumes num is positive)
mask = ~1; // 1111 1111 1111 1110
even = num & mask;

// Closest odd number, gives num + 1 if num is even.  (assumes num is positive)
mask = 1; // 0000 0000 0000 0001
odd = num | mask;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...