Глиф Учебники

C

Программирование · 10 уроков · 18 справок · итоговый тест

Язык C с нуля для школьников и студентов: компилятор gcc, переменные, ввод и вывод, условия, циклы, массивы, функции, указатели, строки, структуры, память и файлы.

C (читается «си») — язык программирования, который создал Деннис Ритчи в Bell Labs в начале 1970-х годов для операционной системы Unix. С тех пор на C написаны ядра операционных систем (Linux, большие части Windows и macOS), базы данных (SQLite, PostgreSQL), интерпретаторы других языков (основная версия Python), прошивки микроконтроллеров, драйверы и программы для роутеров, принтеров и бытовой техники.

Программа на C переводится компилятором прямо в машинный код (команды, которые процессор выполняет сам), поэтому работает быстро и требует мало памяти. Зато язык почти ничего не делает за программиста: память выделяется и освобождается вручную, выход за границы массива никто не проверяет, строка — это просто массив символов. Именно поэтому C хорошо учит тому, как программа на самом деле работает с памятью, — его часто дают первым языком на первом курсе.

Стандарты языка

Язык описан международным стандартом, который время от времени обновляется: C89 (он же ANSI C), C99, C11, C17 (исправленный C11, его ещё называют C18) и C23. Курс написан на C17: его поддерживают все распространённые компиляторы, а почти всё из курса работает и в C99. Каждая программа с показанным результатом проверена сборкой gcc -std=c17 -Wall.

Что нужно для начала

Как всё поставить, рассказывает первый урок, а подробно про Windows — справка Как установить gcc в Windows.

Как пройти курс

Уроки идут по порядку: от первой программы до указателей, структур, динамической памяти и файлов. Каждый урок опирается на предыдущие, поэтому лучше не перескакивать. Набирайте примеры сами и собирайте их с ключом -Wall: предупреждения компилятора в C часто указывают на настоящую ошибку. После каждого урока — несколько вопросов для проверки, в конце — итоговый тест.

В справочнике — короткие ответы на частые вопросы: почему scanf пропускает ввод, чем %f отличается от %lf, что значит segmentation fault и implicit declaration of function, как сравнить строки и получить случайное число.

Язык C++ вырос из C и во многом на него похож; чем они отличаются, рассказывает справка Чем C отличается от C++, а сам C++ — в отдельной теме C++.

Курс с нуля

  1. 1.Установка компилятора и первая программаКак установить компилятор gcc в Linux, Windows и macOS, написать первую программу на C, собрать её командой gcc и запустить. Разбор каждой строки.
  2. 2.Переменные, типы, printf и scanfЧто такое переменная в C, какие бывают типы (int, long long, double, char), как считать, выводить числа через printf и читать их через scanf — с форматами %d, %f, %lf, %c.
  3. 3.Условия: if, else и switchКак в C выполнить действие по условию: if, else, else if, сравнения и логические операции, ошибка = вместо ==, оператор switch и тернарный оператор.
  4. 4.Циклы: for, while и do whileКак в C повторять действия: циклы while, for и do while, break и continue, вложенные циклы, чтение чисел до конца ввода и частые ошибки с границами и точкой с запятой.
  5. 5.МассивыМассивы в C: объявление и заполнение, индексы с нуля, чтение n чисел, сумма и максимум, переворот, двумерные массивы, sizeof и выход за границы массива.
  6. 6.ФункцииКак написать свою функцию в C: параметры и return, void, объявление до main (прототип), передача по значению, массив в параметре, рекурсия и функции из math.h.
  7. 7.УказателиЧто такое указатель в C: адрес переменной, взятие адреса и разыменование, функция swap, указатели и массивы, арифметика указателей, NULL и типичные ошибки.
  8. 8.СтрокиКак устроены строки в C: массив char с нулём на конце, ввод слова и строки с пробелами, перебор символов, функции strlen, strcpy, strcat, strcmp и русские буквы в UTF-8.
  9. 9.СтруктурыСтруктуры в C: как объединить данные в struct, typedef, массив структур, передача структуры в функцию по значению и по указателю, оператор стрелка ->.
  10. 10.Динамическая память и файлыКак в C выделить память нужного размера через malloc, calloc и realloc, освободить её free, и как записать и прочитать файл: fopen, fprintf, fscanf, fgets, fclose.

Начать с первого урока

Итоговый тест — 20 вопросов по всему курсу, ответы проверяются сразу.

Справочник

Официальная документация