Основы языка 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"
Задачи на разные темы, цель которых проверить, актуализировать и закрепить изученные на протяжения курса знания, в том числе по массивам, строкам и указателям.