Описание курса:

Язык C всегда был крайне важным. Его понимание не является на данном этапе критичным, но если вам интересно и скучно или просто хочется попробовать что-то новое, тогда просмотрите этот курс.

Из нюансов хотелось бы добавить, что с развитием компиляторов скорость программ, написанных на языке C, начала приближаться к скорости программ, написанных на Ассемблере. Удачного чтения!

Вопросы для самопроверки:

Сомневаешься, будет ли тебе полезен материал курса, или хочешь убедиться, что усвоил материал курса? Проверь свои знания с помощью вопросов для самопроверки по материалам курса.

  1. Для каких типов приложений чаще всего используется язык программирования C?
  2. Какой компилятор используется в GNU/Linux для компиляции программ на C?
  3. Какие функции ввода-вывода должны быть подключены в C для работы с выводом текста?
  4. В какой части C программы начинается выполнение кода?
  5. Что произойдет, если закомментировать строку #include <stdio.h> в программе на C и попытаться скомпилировать ее?
  6. Какой формат спецификации используется для вывода строк с помощью функции printf()?
  7. Приведите пример использования функции printf() для вывода целого числа.
  8. Какие целочисленные типы данных предлагает язык C и чем они отличаются?
  9. Что произойдет, если значение переменной int превысит допустимый диапазон значений?
  10. Какие три типа вещественных чисел определены в языке C?
  11. Как объявляются массивы в языке C?
  12. Что делает функция sizeof() в языке C?
  13. Какой диапазон кодов ASCII используется для символов цифр?
  14. Объясните, как преобразовать символ цифры в соответствующее число, используя ASCII-коды.
  15. Какой максимальный диапазон значений может принимать тип char в языке программирования C?
  16. Какие коды ASCII используются для управляющих символов новой строки и табуляции?
  17. Какие управляющие символы используются для возврата каретки и удаления предыдущего символа?
  18. В каком диапазоне находятся коды символов расширенной таблицы ASCII, используемые для национальных алфавитов?
  19. Как оформляется условное ветвление if-else в языке программирования C?
  20. Является ли ветка else обязательной в конструкциях if-else в C?
  21. Какой формат многократного ветвления используется в C?
  22. Как оформляется ветвление в сокращенной форме? Каковы ограничения сокращенной формы?
  23. Что делают операторы && и || в языке программирования C?
  24. Как используется оператор switch в C, и в чем его отличие от конструкции if-else?
  25. Какие операции инкремента и декремента существуют в языке программирования C?
  26. В чем разница между префиксной и постфиксной формами оператора инкремента (++i и i++)?
  27. Каково назначение цикла while, и чем цикл do-while отличается от него?
  28. Для чего используется оператор break в циклах, и каков пример его применения?
  29. Приведите пример использования оператора continue в цикле и объясните его цель.
  30. Опишите синтаксис заголовка цикла for и объясните, из каких частей он состоит.
  31. Какие поразрядные операции доступны в языке программирования C?
  32. Как присвоить число в восьмеричной и шестнадцатеричной системах счисления в языке C?
  33. В чем заключается алгоритм определения "битовой маски" для массива, содержащего отрицательные и положительные числа?
  34. Как установить определённый бит в 1, используя битовую операцию ИЛИ?
  35. Как можно возвести число в степень на языке C?
  36. Какие функции для обработки символов выделяются в заголовочном файле stdio.h?
  37. Какой символ используется для завершения строки в C?
  38. Чем отличается работа функций putchar() и getchar()?
  39. Что происходит, если вызвать getchar() после ввода нескольких символов перед клавишей Enter?
  40. Как передать значение EOF функции getchar() в Linux?
  41. Как извлечь адрес переменной в языке C?
  42. Что произойдет при изменении значения обычной переменной с точки зрения памяти?
  43. Какие типы данных связаны с указателями и почему?
  44. Как объявить переменную-указатель?
  45. В чем заключается разница между обозначением указателя при его объявлении и в выражениях?
  46. Что происходит при присваивании NULL указателю?
  47. Почему использование неинициализированных указателей может привести к ошибкам?
  48. В чем отличие между глобальными и локальными переменными в языке программирования C?
  49. Почему важно объявление функции до ее вызова в программе на языке C?
  50. Какие особенности существуют для параметров при объявлении функции, в отличие от объявления переменных?
  51. Как используется ключевое слово static в C?
  52. Как статические переменные внутри функции отличаются от автоматических переменных?
  53. В чем заключается механизм передачи аргументов по ссылке в языке C?
  54. Каково основное предназначение `scanf()` в языке программирования C?
  55. Почему при использовании `scanf()` необходимо передавать адреса переменных, а не их значения?
  56. Перечислите спецификаторы формата, которые можно использовать с `scanf()` для считывания целых чисел и вещественных чисел.
  57. Как `scanf()` обрабатывает пробелы в строке формата?
  58. Что произойдет, если данные введены некорректно в `scanf()`, например, строка для переменной целого типа?
  59. Как использовать `scanf()` для игнорирования части вводимых данных?
  60. В чем заключается использование форматов […] и [^…] в `scanf()`?
  61. Что делает функция rand() в языке C?
  62. Какой тип возвращает функция rand() и в каком диапазоне?
  63. Для чего используется функция srand()?
  64. Как можно генерировать случайные отрицательные числа, например, в диапазоне от -35 до -1?
  65. Как получить случайное вещественное число в диапазоне от 0.51 до 1.00?
  66. Почему результаты программы с генерацией случайных чисел становятся одинаковыми, если не использовать srand()?
  67. Чем является имя массива в языке C?
  68. Чем запрещено присваивание имени массива?
  69. Как можно получить адреса элементов массива с помощью имени массива?
  70. Как ведет себя имя массива в контексте присваивания и арифметики?
  71. Какой недостаток имеет запись arr[i] в сравнении с использованием указателей в функциях?
  72. В чем заключается различие между представлением массивов с помощью нотации указателей и нотации индексации?
  73. Каково предназначение `\0` в строке на языке программирования C?
  74. Почему недопустимо использовать scanf("%s", strP) без выделения памяти для строки?
  75. Как в программе реализовать конкатенацию (объединение) двух строк?
  76. Опишите, как можно отсортировать строки по длине с использованием массива указателей.
  77. Как бы вы передали строку в функцию для изменения её символов?
  78. В каком заголовочном файле находятся функции для работы со строками в языке программирования C?
  79. Что делает функция strcpy() и какие параметры она принимает?
  80. Каковы характеристики работы функции strcmp() и какие значения она может возвращать?
  81. Опиши процесс, как функция strcat() используется для объединения строк.
  82. Как функция strchr() используется для поиска символа в строке, и что она возвращает, если символ не найден?
  83. Как работает функция strspn() и что она возвращает?
  84. Как объявляются переменные структур в языке программирования C?
  85. Для чего используется точка с запятой после объявления структур?
  86. Как передаются структуры в функции в языке C, и как с ними можно взаимодействовать внутри функции?
  87. Как выглядит синтаксис языка C при использовании указателей для доступа к полям структуры?
  88. Что такое динамическая структура данных и как она отличается от статической?
  89. Как связаны структуры в динамическом стеке?
  90. Что происходит при вызове функции `malloc()` в С?
  91. Почему важно освобождать память после использования динамических структур?
  92. В чем заключается основной плюс и минус использования динамических структур по сравнению с массивами?
  93. Какой тип используется для указателя на файл в языке C?
  94. Какие режимы открытия файла можно указать в функции fopen()?
  95. Что возвращает функция fopen() при успешном открытии файла, а что в случае ошибки?
  96. Для чего рекомендуется закрывать файл после завершения работы с ним?
  97. Какие библиотеки необходимо подключить для работы с функцией fopen() и типом FILE?
  98. Как обрабатываются символы новой строки при использовании функции fscanf() для чтения данных из файла?
  99. Что делает функция fgets() и каков ее синтаксис?
  100. Чем отличаются функции getc(), fgetc() и fputc(), putc()?
  101. Как можно открыть файл в бинарном режиме?
  102. Что такое аргументы командной строки и приведите пример их использования?
  103. Какой функции передаются аргументы командной строки в программе на языке C?
  104. Что произойдет, если программу запустить как ./a.out без дополнительных аргументов?
  105. Что возвращает функция main() по умолчанию, если тип возвращаемого значения не указан?
  106. Что произойдет, если файл не удастся открыть в программе, работающей с файлами?
  107. Какие задачи выполняет препроцессор в языке программирования C?
  108. Как можно задать действия препроцессора вручную в коде?
  109. Каковы различия в применении угловых скобок и кавычек в директиве #include?
  110. Зачем принято писать символические константы заглавными буквами?
  111. Какова структура макроса с аргументами? Приведи пример его использования
  112. Для чего используется условная компиляция и как она основывается на значении символических констант?
  113. Какую роль играют встроенные константы, такие как __DATE__ и __TIME__, в программе на языке C?
  114. Какой инструмент вызывает компилятор gcc для связывания объектных файлов в единый исполняемый файл?
  115. Какие флаги нужно использовать, чтобы скомпилировать файл в объектный файл и, затем, преобразовать его в исполняемый файл?
  116. Какую роль выполняют заголовочные файлы в программе с несколькими исходными файлами?
  117. Почему не рекомендуется переносить символическую константу в заголовочный файл?
  118. Какие проблемы могут возникнуть при использовании глобальных переменных и как их избежать?
  119. Какие два типа библиотек существуют в языке C и в чем их ключевое различие?
  120. Что содержится в заголовочном файле библиотеки и почему он важен?
  121. Какой утилитой создается статическая библиотека в C и какие шаги предшествуют этому?
  122. Опиши процесс создания динамической библиотеки. Какие дополнительные опции необходимы при компиляции?
  123. Каковы преимущества использования динамической библиотеки по сравнению со статической?

Программа курса:

  1. Описание курса
  2. Введение в язык программирования C
  3. Типы данных в C и форматированный вывод
  4. Символьные типы и управляющие символы в C
  5. Операторы ветвления и switch в C
  6. Циклы и операторы в языке C
  7. Битовые операции в языке C
  8. Посимвольный ввод и вывод в C - буферизация
  9. Переменные, адреса и указатели в C
  10. Передача аргументов по ссылке и значению в C
  11. Форматированный ввод данных с использованием scanf
  12. Генерация псевдослучайных чисел на C
  13. Адресная арифметика в массивах C
  14. Передача массивов в функции и указатели
  15. Строки в языке C - особенности и функции работы
  16. Функции работы со строками в C
  17. Работа со структурами в C - создание и применение
  18. Динамические структуры данных в C
  19. Ввод и вывод данных из файлов в языке C
  20. Передача аргументов в C и работа с файлами
  21. Препроцессор в языке C - директивы и макросы
  22. Создание и компиляция многофайловых программ в C
  23. Использование статических и динамических библиотек в C