Основы языка C. Курс по программированию
Курс "Основы языка C" включает 23 урока и итоговую проверочную работу.
Предполагается, что вы знакомы с азами программирования. Как минимум у вас должно быть представление о том, что такое переменная, ветвление, цикл и функция.
В курсе среди прочего затрагиваются отличительные особенности программирования на языке C. Рассматриваются массивы, строки, указатели, структуры, в том числе динамические, работа с файлами, передача аргументов командной строки в программу, препроцессор языка, создание многофайловых программ и библиотек, работа со временем. В уроки добавлены задания в форме задач. В конце пособия приведены примеры их решения.
Первая версия учебного пособия "Особенности языка C" была опубликована на сайте https://younglinux.info в период с января по апрель 2012 года. Текущая версия (пятая) ‒ сентябрь 2025 г.
Содержание курса
Введение в язык программирования C
Обзор языка С: особенности, область применения, история, связь с Unix. Первая программа на Си, функцияmain(), компиляция с помощью gcc.Типы данных и их вывод
В Си есть несколько целочисленных и вещественных типов. Символьный тип относится к целым числам. Строки представлены как массивы символов. Функцияprintf()выводит данные согласно спецификациям:%s,%d,%fи др.Символьный тип данных. Управляющие символы
В Си типcharпринимает значения от -128 до 127, но только положительные кодируют символы. Вместо числа можно вывести соответствующий ему символ по таблице ASCII. Как и наоборот - вывести код символа. Управляющие символы в программном коде обозначаются двумя знаками, т.к. одним их обычно обозначить невозможно.Операторы ветвления: if-else, тернарный, switch
В Си кроме оператора ветвленияif-else, есть условное выражение и переключательswitch. Логическое выражение приifзаписывается в скобках, тело заключается в фигурные скобки. Логические И (&&) и ИЛИ (||) имеют меньший приоритет, чем операции сравнения.Циклы: while, do-while, for. Инкремент и декремент
В языке Си есть три цикла:while,do-while(цикл с постусловием, выполняется хотя бы один раз),for(цикл со счетчиком, заголовок состоит из трех частей), а также операторыbreak(прерывания цикла) иcontinue(прерывания итерации цикла).Битовые операции. Восьмеричное и шестнадцатеричное представление числа
В языке программирования Си существуют следующие поразрядные, или битовые, операции:&(И),|(ИЛИ),^(исключающее ИЛИ),<<(сдвиг влево),>>(сдвиг вправо),~(поразрядное дополнение до единицы). Перед восьмеричным числом пишется0, перед шестнадцатеричным0x. Форматы вывода%oи%x.Посимвольный ввод и вывод - функции
getcharиputchar
Посимвольный ввод и вывод выполняется функциямиgetchar()иputchar(). При этомputchar()выводит символы не на экран, а в буфер операционной системы, которая отображает данные на экране только после нажатия Enter.Переменные, адреса и указатели
В языке C есть такой тип данных как указатели. Переменные этого типа хранят адреса других переменных. Получение адреса переменной -&. Получение значения по адресу (разыменовывание указателя) -*.Объявление и определение функций. Передача аргументов по значению и по ссылке
Программы могут состоять из множества функций, однако язык Си не допускает вложенных. Обычно объявление и определение функций разносятся по разным частям исходного кода. В функцию кроме значений можно передавать указатели и адреса переменных.Форматированный ввод данных - функция
scanf
Функцияscanfосуществляет форматированный ввод данных. Вscanf()передается строка формата и адреса переменных. Существует ряд особенностейscanf(), которые делают ее использование не всегда удобным.Случайные числа. Функции
randиsrand. Диапазоны значений
Случайные целые числа генерируются функциейrand. С помощью srand задается "зерно". Для получения вещественных результатrand()делится наRAND_MAX. Формулы диапазонов значений.Массивы и указатели. Адресная арифметика
Имя массива является указателем на его первый элемент, т.е. содержит его адрес. Хотя к имени массива можно применять адресную арифметику также как к указателям, значение адреса начала массива изменять нельзя.Массивы и функции. Передача указателя на массив
В языке Си в функции передаются указатели на массивы, а не сами массивы. Таким образом, функции способны менять массивы, определенные в других функциях. Защитить массив от изменений можно, объявив аргумент-указатель как константу.Ввод и вывод строк. Строки и указатели. Передача строк в функцию
Неформатированный ввод и вывод строк осуществляется с помощью функцийfgets()иputs(). Если строка задана как литерал и присвоена указателю, то ее нельзя изменить. В функции строки передаются по указателю как массив символов.Строковые функции
В Си функции для работы со строками объявляются в заголовочном файлеstring.h, который подключается к исходному коду. Существует около двадцати функций для работы со строками. Среди них поиск символа в строке, функции сравнения, копирования строк и др.Структурный тип данных. Указатели и структуры. Массив структур
Структура - это объединение данных разных типов (в отличие от массивов) в одном объекте. В языке C сначала определяется структура как новый тип данных, потом объявляются переменные этого типа. Структуры передаются в функцию по значению, однако можно передавать указатель. Это важно при работе с массивами структур.Динамические структуры данных. Стек
Динамические структуры данных позволяют выделять память в процессе выполнения программы. Для их создания в структурном типе данных объявляется поле указателя на эту же структуру. В уроке рассматривается организация стека на языке C.Работа с файлами. Ввод данных из файла и вывод в файл
Особенности чтения данных из файла и записи в файл. Функцииfopen,fclose,fscanf,fgets,fgetc,fprintf,fputs,fputc. Работа с двоичными файлами -freadиfwrite.Передача аргументов в программу. Параметры функции
main
Для того чтобы получить аргументы командной строки, надо в функциюmain()добавить два параметра -argcиargv. Первый имеет целый тип и описывает количество аргументов командной строки. Второй - указатель на массив строк - содержимое командной строки.Препроцессор. Директивы и макросы
В компилятор языка программирования C входит препроцессор, который осуществляет подготовку программы к компиляции. Он включает содержимое одних файлов в другие, заменяет в тексте исходного кода имена констант на их значения, удаляет символы конца строки, выполняет условную компиляцию.Многофайловые программы. Объектный код и заголовочные файлы
При компиляции программы, состоящей из нескольких файлов исходного кода, сначала получают объектные файлы, после этого исполняемый. Объявления функций принято выносить в заголовочные файлы.Создание библиотеки. Сборка программы со статической и динамической библиотеками
Пример создания статической и динамической библиотек на языке C, их отличия. Компиляция программы с включением в нее своей библиотеки.Время и даты. Библиотека
time.h
Функции и типы данных для работы со временем и датами объявлены в файлеtime.h. Функцияtime()возвращает системное время в секундах,localtime()иgmtime()преобразуют его в структурированное время. Есть ряд функций для получения строкового представления времени и даты.Проверочная работа к курсу "Основы языка C"
Задачи на разные темы, цель которых проверить, актуализировать и закрепить изученные на протяжения курса знания, в том числе по массивам, строкам и указателям.