Основы программирования на C++

Этот курс предназначен для начинающих разработчиков, желающих освоить мощный и универсальный язык C++. Вы пройдете путь от базового синтаксиса и работы с памятью до принципов объектно-ориентированного программирования и использования стандартной библиотеки.

1. Введение в C++: структура программы, переменные и базовые типы данных

Введение в C++: структура программы, переменные и базовые типы данных

Добро пожаловать в курс «Основы программирования на C++». Это первая статья, с которой начнется ваше погружение в один из самых мощных и востребованных языков программирования в мире. C++ используется везде: от создания операционных систем и драйверов до разработки высокопроизводительных игр и финансовых платформ.

В этой статье мы разберем анатомию простейшей программы, узнаем, как компьютер хранит данные, и напишем свой первый код.

Ваша первая программа

Традиционно изучение любого языка программирования начинается с программы «Hello, World!». Её единственная задача — вывести приветствие на экран. Давайте посмотрим, как это выглядит на C++.

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

Разбор структуры программы

  • #include <iostream>
  • Это директива препроцессора. Она говорит компьютеру: «Подключи библиотеку ввода-вывода». Без этой строчки мы не смогли бы ничего вывести на экран или считать с клавиатуры. iostream расшифровывается как Input Output Stream (поток ввода-вывода).

  • int main() { ... }
  • Это главная функция. Любая программа на C++ начинает свое выполнение именно отсюда. Всё, что находится внутри фигурных скобок { }, — это тело программы.

  • std::cout << "Hello, World!"
  • Эта команда выводит текст. std::cout — это стандартный поток вывода (обычно экран монитора). Символы << указывают направление данных: мы отправляем строку "Hello, World!" в поток вывода.

  • std::endl
  • Это манипулятор, который переводит курсор на новую строку (end line). Это аналог нажатия клавиши Enter в текстовом редакторе.

  • ; (Точка с запятой)
  • Обратите внимание: почти каждая команда в C++ заканчивается точкой с запятой. Это как точка в конце предложения в русском языке. Если её забыть, программа не запустится.

  • return 0;
  • Эта команда завершает работу функции main. Число 0 сообщает операционной системе, что программа выполнилась успешно, без ошибок.

    !Визуальная схема того, как программа начинает работу с функции main и завершается возвратом значения.

    Переменные: хранение данных

    Программы редко просто выводят текст. Обычно они работают с данными: числами, именами, состояниями. Для хранения этих данных используются переменные.

    Представьте, что переменная — это коробка, на которой написано имя. В эту коробку можно положить какое-то значение, а потом достать его или заменить на другое.

    Создание переменной

    Чтобы использовать переменную, её нужно объявить. Это значит, что мы сообщаем компьютеру: «Выдели память под коробку определенного размера и дай ей имя».

    Синтаксис объявления выглядит так: тип_данных имя_переменной;

    Пример:

    Можно сделать это в одну строку (это называется инициализация):

    !Абстрактное представление переменных как именованных ячеек памяти, хранящих значения.

    Правила именования переменных

    Имена переменных (идентификаторы) должны быть понятными. Существует несколько жестких правил и рекомендаций:

    * Имя может содержать латинские буквы (a-z, A-Z), цифры (0-9) и знак подчеркивания (_). * Имя не может начинаться с цифры. * Имя не должно совпадать с ключевыми словами языка (например, int, return, class). * C++ чувствителен к регистру: Age и age — это две разные переменные.

    Базовые типы данных

    В C++ каждая переменная должна иметь строгий тип. Вы не можете положить текст в коробку, предназначенную для целых чисел. Это помогает избежать множества ошибок.

    Рассмотрим основные типы данных:

    | Тип | Описание | Пример значения | Размер (обычно) | | :--- | :--- | :--- | :--- | | int | Целые числа (Integer) | 42, -10, 0 | 4 байта | | double | Дробные числа двойной точности | 3.14, -0.005 | 8 байт | | char | Одиночный символ (Character) | 'A', 'z', '!' | 1 байт | | bool | Логический тип (Boolean) | true, false | 1 байт | | std::string | Строка текста (требует #include <string>) | "Hello" | Зависит от длины |

    Немного о памяти и математике

    Почему важно знать тип данных? Потому что память компьютера ограничена, и разные типы занимают разное количество места. Компьютер хранит информацию в битах (0 или 1).

    Количество различных значений , которые может хранить переменная, зависит от количества бит , выделенных под неё. Эта зависимость выражается формулой:

    где — это общее количество уникальных комбинаций (значений), а — количество бит памяти.

    Например, тип char занимает 1 байт, что равно 8 битам. Подставим это в формулу:

    где — основание двоичной системы, — количество бит, а — количество различных символов, которые можно закодировать в одном байте (например, в таблице ASCII).

    Ввод и вывод данных

    Мы уже знакомы с std::cout для вывода. Для ввода данных с клавиатуры используется std::cin (Console Input).

    Обратите внимание на направление стрелок: * cout << (из программы наружу) * cin >> (снаружи в программу)

    Пример программы, которая знакомится с пользователем:

    > Важно: При использовании std::cin >> name считывание происходит только до первого пробела. Если вы введете «Иван Иванов», в переменную name попадет только «Иван». Для считывания целой строки используются другие методы, которые мы изучим позже.

    Комментарии в коде

    Хороший код должен быть понятен не только компьютеру, но и человеку. Для этого используются комментарии — текст, который игнорируется компилятором.

    * // — однострочный комментарий. Всё, что после этих символов до конца строки, не выполняется. / ... */ — многострочный комментарий. Позволяет писать пояснения на несколько строк.

    Заключение

    Сегодня вы сделали первый шаг в мир C++. Мы разобрали структуру минимальной программы, узнали, что такое переменные, и познакомились с базовыми типами данных int, double, char, bool. Также мы научились общаться с пользователем через консоль.

    В следующей статье мы углубимся в арифметические операции и научим нашу программу считать.

    2. Логика программы: условные операторы, циклы и написание функций

    Логика программы: условные операторы, циклы и написание функций

    В предыдущей статье мы научились создавать «коробки» для данных — переменные — и узнали, какими они бывают. Но пока наши программы умеют лишь последовательно выполнять команды: создали переменную, записали значение, вывели на экран. Это похоже на чтение книги страница за страницей.

    Однако реальная жизнь (и реальные программы) требует выбора. Если на улице дождь, мы берем зонт. Если магазин закрыт, мы идем в другой. Если нужно почистить 10 картофелин, мы повторяем одно и то же действие 10 раз.

    Сегодня мы вдохнем жизнь в наш код. Мы научим программу принимать решения, повторять действия и группировать команды в удобные блоки.

    Условные операторы: искусство выбора

    Основа любой логики — это условие. В C++ главным инструментом принятия решений является конструкция if (если).

    Оператор if

    Синтаксис прост: «Если условие истинно, сделай это».

    Условие — это любое выражение, которое возвращает true или false. Для сравнения значений используются специальные операторы:

    * == — равно (не путайте с =, которое присваивает значение!) * != — не равно * > — больше * < — меньше * >= — больше или равно * <= — меньше или равно

    Пример:

    !Схема работы условного оператора if.

    Конструкция if-else

    Часто нам нужно не просто выполнить действие при успехе, но и предусмотреть альтернативу. Для этого существует else (иначе).

    Цепочка else if

    Если вариантов больше двух, можно выстраивать цепочки проверок:

    Логические операции

    Иногда нужно проверить сразу несколько условий. Например, «Если сегодня суббота И хорошая погода, я пойду гулять».

    * && — Логическое И (AND). Истинно, только если оба условия верны. * || — Логическое ИЛИ (OR). Истинно, если хотя бы одно условие верно. * ! — Логическое НЕ (NOT). Инвертирует значение (true превращает в false и наоборот).

    Циклы: сила повторения

    Представьте, что вам нужно вывести фразу «Привет!» 100 раз. Копировать строку cout 100 раз — плохая идея. Для этого существуют циклы.

    Цикл while

    Это самый простой цикл. Он работает по принципу: «Пока условие истинно, выполняй».

    Если забыть увеличить counter, условие counter <= 5 всегда будет истинным, и программа зависнет в бесконечном цикле.

    Цикл for

    Это самый популярный цикл в C++. Он идеально подходит, когда мы знаем, сколько раз нужно повторить действие. В его заголовке сразу собраны три важные части: инициализация, условие и обновление.

    Синтаксис: for (инициализация; условие; обновление) { ... }

    Разберем по шагам:

  • int i = 0 — создается переменная-счетчик i (традиционное название от index).
  • i < 5 — перед каждым шагом проверяется это условие.
  • i++ — после каждого шага счетчик увеличивается на 1 (запись i++ аналогична i = i + 1).
  • !Циклический процесс выполнения программы.

    Математика и циклы

    Циклы часто используются для математических вычислений, например, для нахождения суммы чисел от 1 до . Попробуем посчитать сумму чисел от 1 до 100 с помощью цикла.

    Однако, в программировании важно знать математику, чтобы оптимизировать код. Тот же результат можно получить без цикла, используя формулу суммы арифметической прогрессии:

    где — сумма первых членов, — количество суммируемых чисел (в нашем случае 100), — первое число (1), а — последнее число (100).

    Подставим значения:

    где — искомая сумма. Использование формулы выполняется мгновенно, тогда как циклу потребуется 100 операций. Это простой пример того, как алгоритмическое мышление помогает писать быстрые программы.

    Функции: разделяй и властвуй

    По мере роста программы код внутри main становится огромным и запутанным. Чтобы этого избежать, код разбивают на функции — именованные блоки кода, которые выполняют одну конкретную задачу.

    Мы уже пользовались функцией main. Теперь научимся писать свои.

    Анатомия функции

  • Тип возврата: Какой тип данных функция вернет как результат (например, int, double). Если функция ничего не возвращает, используется тип void.
  • Имя: Понятное название действия (например, calculateSum, printHello).
  • Параметры: Данные, которые функция получает на вход (как переменные).
  • Пример функции сложения

    Давайте напишем функцию, которая принимает два числа и возвращает их сумму.

    Когда программа доходит до строчки add(x, y), она «прыгает» в функцию add, передает туда значения 5 и 10, вычисляет результат, возвращает его и продолжает работу main.

    Функция void

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

    Область видимости переменных

    Важно понимать: переменные, созданные внутри функции (или внутри цикла/условия), не видны снаружи. Это называется локальной областью видимости.

    Это позволяет использовать одинаковые имена переменных (например, i для счетчиков) в разных функциях, не боясь конфликтов.

    Заключение

    Теперь вы владеете тремя китами процедурного программирования:

  • Ветвление (if/else) позволяет программе быть гибкой.
  • Циклы (for, while) избавляют от рутины.
  • Функции помогают структурировать код и избегать повторений.
  • В следующей статье мы перейдем к более сложным структурам данных и узнаем, как хранить списки значений с помощью массивов.