Найти тему

Введение в язык программирования Си.

Оглавление

Всем привет! В своей первой статье я хотел бы кратко описать язык программирования Си. Несмотря на то, что Си был придуман в 70-х годах XX века, сегодня Си является неотъемлемой частью программирования. Так, ядро операционной системы Linux практически полностью написано на Си. Более того, самая популярная сейчас операционная система Wndows тоже содержит в своем ядре Си (изначально она была написана на чистом Паскале, потом на Си, а сейчас большие куски написаны на С++)

Сейчас особенно моден такой язык программирования, как python. Однако несмотря на то, что Си и python очень сильно отличаются по синтаксису, одна из реализаций python-a - CPython - написана на Си.

Кусок парсера python-a, взятого из открытого источника
Кусок парсера python-a, взятого из открытого источника

Однако вернемся к самому Си. Си - алгоритмический язык программирования. Это значит, что программа на языке Си представляет из себя набор команд, которые выполняются последовательно, одна за другой. В язык дополнительно входят команды управления (команды ветвления и циклы), а также подпрограммы (в Си они называются функциями) и переменные. Функции нужны для сокращения кода программы за счет объединения законченного набора команд в нечто целое, при этом любая функция имеет имя и, возможно, параметры (об этом в других статьях).

Последовательные команды

Команды, записанные на языке Си последовательно, будут выполняться одна за другой в том порядке, в котором они были записаны. В языке программирования Си это записывается так:

{
<к1>
<к2>
}

Когда необходимо записать несколько последовательных команд внутри другой, такая конструкция записывается внутри фигурных скобок.

Hello, World!

И, конечно, изучение любого языка программирования начинается с написания простой программы. Я не буду отходить от традиций и тоже напишу для вас несложную программу на языке Си, которая выводит на экран текст "Hello, World!". Писать я буду в среде Visual Studio 2019, ее можно поставить на сайте microsoft.

Самая узнаваемая программа
Самая узнаваемая программа
Результат выполнения этой программы
Результат выполнения этой программы

Любая программа в языке Си начинается с функции main (есть исключения при работе с OS MS Windows, но, как правило, именно с main). На примере функция main вызывает функцию printf, после чего ставится точка с запятой как признак окончания команды.

Команда ветвления

Ее необходимость возникает, когда в программе нужно выполнять действия только при определенном условии. Сначала проверяется определенное условие, а затем, если оно истинно, выполняется одна команда (назовем ее К1), иначе выполняется другая команда (назовем ее К2). В языке Си существует возможность не указывать вторую команду и ограничиться лишь первой. Давайте дополним нашу программу и теперь будем не печатать строку на экран, а вводить какое-либо значение с клавиатуры. Для этого в стандартной библиотеке ввода и вывода (STandarD Input Output), есть функция scanf, получающая в качестве первого параметра информацию о том, что и как ей нужно ввести (в данном примере это %d (d - decimal - десятичное целое число), а вторым (или более) параметром - адрес переменной, в которую и заносится введенные данные (подробнее про это в следующих статьях). В нашем случае - &x. Запись &x означает номер ячейки памяти, в которой расположена переменная x.

Пример на 2 ветвления: с указанием второй команды и без нее
Пример на 2 ветвления: с указанием второй команды и без нее

В языке Си для команды ветвления используется такой синтаксис:

if (<условие>)
<к1>
else
<к2>

Или без указания второй команды:

if (<условие>)
<к1>

Циклы

Цикл используется для повторения команды (или нескольких команд) определенное количество раз. Для циклов задается условие его выполнения и тело цикла - последовательность команд. Различают два вида цикла - с предусловием и постусловием.

Разница циклов с предусловием и постусловием на картинках
Разница циклов с предусловием и постусловием на картинках

В языке Си цикл с предусловием записывается так:

while (<условие>)
<команда>

А цикл с постусловием так:

do
<команда>
while (<условие>);

Если в команде циклов или в команде ветвления нужно записать несколько команд, то они, как говорилось ранее, записываются в фигурных скобках.

Разница между циклом while и циклом do/while (так в Си кратко называют циклы с предусловием и постусловием соответственно) в том, что цикл do/while всегда будет выполнен хотя бы один раз, даже когда условие ложно. Для передачи разницы между циклами напишем следующую программу:

Программа для показа разницы между циклам
Программа для показа разницы между циклам
Результат выполнения программы
Результат выполнения программы

Переменные

Последнее, о чем мне хотелось бы сказать в этом кратком рассказе о языке Си, это переменные. Переменные - это именованные области памяти, которые необходимы для хранения определенных значений. Переменные являются самым удобным способом резервирования (выделения памяти) под данные программы на этапе ее перевода в машинный код. Переменные задаются именем (для того, чтобы отличить одну переменную от другой), и типом. О типах в языке Си будет подробнее сказано в следующей статье, сейчас я расскажу всего о двух типах. В программе каждая переменная имеет фиксированное место в памяти - так называемый адрес переменной (который необходим, например, функции scanf для занесения значения) и определенное значение, которое можно изменять (например, с помощью операции присваивания '=')

В языке Си переменные описываются в начале любой группы команд в фигурных скобках, при этом сначала указывается тип, а потом через запятую перечисляются имена переменных этого типа (в отличие от Паскаля, где сначала указывается имя переменной, а затем ее тип). Имена задаются последовательностью символов букв и цифр, причем первый символ - буква. Имена чувствительны к регистру, как и во многих других языках программирования. При описании можно в переменные присваивать начальные значения. Я приведу пример с двумя типами - int (integer - целочисленный тип) и float (от floating point - вещественные числа с плавающей точкой).

int x = 7, y, d, srfghj = 79;
float k, i, j = 0, a = 3;

На этом все, друзья. Подписывайтесь на канал - так вы не пропустите следующих статей! Следующая статья выйдет уже совсем скоро. Всем пока и успешного изучения такого непростого, но удобного языка, как Си!

Наука
7 млн интересуются