Контакты

Достижения

Все достижения (4)

Наибольший вклад в теги

Все теги (35)

Лучшие ответы пользователя

Все ответы (34)
  • С чего начять новичку в СИ?

    includedlibrary
    @includedlibrary
    Си можно начать изучать с книги "Язык программирования Си" Кернигана и Ритчи. Или с "Head First C" (я начинал с неё). Потом можно почитать про новые фичи стандарта c11.
    Если вы хотите низкоуровневым программированием заниматься, то для начала нужно прочитать "Архитектура Компьютера" Таненбаума. Ещё есть очень хорошая книга "Цифровая схемотехника и архитектура компьютера" от Сары и Дэвида Харрис.
    Потом читать спецификации на железки, под которые вы хотите писать код.
    Ответ написан
    1 комментарий
  • Почему strcat() останавливает работу программы?

    includedlibrary
    @includedlibrary
    Потому что в strcat нужно передать указатель на строку, вы передаёте переменную z с типом int. В результате z интерпретируется, как адрес, по которому лежит строка и происходит ошибка сегментирования.
    Ответ написан
    Комментировать
  • Как вывести сумму итераций цикла?

    includedlibrary
    @includedlibrary
    Небольшая рекомендация - указывайте типы аргументов в функциях и сами аргументы в прототипах:
    int start_int();
    int end_int(int start_int);
    int calculate(int start_int, int end_int);


    Решение - нужно переписать функцию calculate следующим образом:
    1. n++ нужно перенести в while, чтобы переменная n увеличивалась каждую итерацию.
    2. Установить начальное значение k в start_int, так как k - текущий размер популяции.
    3. Вместо start_int для обновления k использовать само значение k, по правилам обновления размера популяции
    4. Убрать printf, так как функция calculate должна находить количество итераций, его вывод лучше переместить в main.
    5. Убрать скобки вокруг return, оборачивать return в блок нет никакого смысла.
    6. Вернуть n вместо start_int.


    int calculate(int start_int, int end_int) {
        int k = start_int; //текущий размер популяции
        int n = 0; //счетчик
    
        do {
            k = k + (k / 3) - (k / 4);
            n++;           //инкремент счетчика
        } while (k < end_int);
    
        return n; //возврат количества итераций
    }
    Ответ написан
    7 комментариев
  • Как правильно использовать библиотеку stdarg.h на языке С и работает ли она с WSL?

    includedlibrary
    @includedlibrary
    С main это так не работает. Сигнатура main с аргументами командной строки выглядит так:
    int main(int argc, char **argv) {
    }

    Что ни есть эквивалент вашего кода. В main передаётся указатель на массив строк, ваш же код предполагает, что все аргументы будут переданы через стек. Из-за этого ничего и не работает
    Ответ написан
    1 комментарий
  • Как составить шестнадцатеричное число из байтов?

    includedlibrary
    @includedlibrary
    0xAA имеет тип int (как и все константы: 0xab, 0xcd, 0xef), принимает при сдвиге отрицательное значение. Нужно явно указать тип 0xAA
    #include <stdio.h>
    
    int main(void) {
      unsigned long int a = 0;
    
      a = a | ((0xAB) << 0);
      printf("%lX\n", a);
      a = a | ((0xCD) << 8);
      printf("%lX\n", a);
      a = a | ((0xEF) << 16);
      printf("%lX\n", a);
    
      a = a | ((unsigned long)0xAA << 24);
      printf("%lX\n", a);
    
      return 0;
    }
    Ответ написан
    1 комментарий

Лучшие вопросы пользователя

Все вопросы (20)