Составить рекурсивную функцию, которая выводит на экран двоичный код целого числа - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Задание 5. Составить рекурсивную функцию, которая выводит на экран двоичный код целого числа.

Решение задачи: «Составить рекурсивную функцию, которая выводит на экран двоичный код целого числа»

textual
Листинг программы
#include <stdio.h>
#include <limits.h>
 
_Bool print_bin_rec(unsigned v, unsigned n, _Bool has_digits)
{
    if (v == 0) {
        if (has_digits)
            printf("%0*d", (int) n, 0);
    }
    else if (n == 1) {
        printf("%d", 1);
        has_digits = 1;
    }
    else {
       unsigned 
           n_hi = n / 2,
           n_lo = n - n_hi,
           hi = v >> n_lo,
           lo = v - (hi << n_lo);
       has_digits = print_bin_rec(hi, n_hi, has_digits) || has_digits;
       has_digits = print_bin_rec(lo, n_lo, has_digits) || has_digits;
    }
    
    return has_digits;
}
 
void print_bin(unsigned v)
{
    if (!print_bin_rec(v, sizeof(unsigned) * CHAR_BIT, 0))
        printf("0");
    printf("\n");
}
 
int main(void) {
    print_bin(127);
    return 0;
}

Объяснение кода листинга программы

В данном коде реализована рекурсивная функция print_bin_rec, которая выводит на экран двоичный код целого числа. Список действий:

  1. Если значение переменной v равно 0, то выполняется блок кода, который выводит на экран двоичный ноль (0) с заданным количеством десятичных разрядов (n).
  2. Если значение переменной n равно 1, то выполняется блок кода, который выводит на экран число 1.
  3. Если ни одно из предыдущих условий не выполнено, то выполняется следующий блок кода: a. Значение переменной n делится на 2, результатом чего является значение переменной n_hi. b. Значение переменной n вычитается из значения переменной n_hi, результатом чего является значение переменной n_lo. c. Слово v сдвигается вправо на значение переменной n_lo (наиболее значимые разряды переходят в младшие), результатом чего является значение переменной hi. d. Слово v вычитается из значения переменной hi, умноженного на 2 в степени n_lo (наиболее значимые разряды переходят в младшие), результатом чего является значение переменной lo. e. Рекурсивная функция print_bin_rec вызывается для значения hi и n_hi с текущим значением has_digits. f. Рекурсивная функция print_bin_rec вызывается для значения lo и n_lo с текущим значением has_digits. g. Результат выполнения рекурсивных функций сравнивается с 0. Если хотя бы одна из функций вернула true, то значение переменной has_digits устанавливается в 1.
  4. В функции main() вызывается функция print_bin с аргументом 127.
  5. Если значение переменной has_digits в функции print_bin равно 0 после вызова print_bin_rec, то выводится двоичный ноль (0).
  6. Выводится символ новой строки (\n).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.846 из 5
Похожие ответы