Знакомство с C++
Прежде чем читать мою статью - реши для себя, зачем ты это делаешь. Даже если ты просто нормальный человек, лишним не будет.
Если вы настоящий профессионал программирования, то зачем вы тут сидите и читайте статью на пикабу? Если вы ради интереса зашли почитать, то претензий ноль, но если вы просто захотели задушить нового пользователя Пикабу минусами, то немедленно покиньте статью, вам однозначно интересно не будет.
Заранее благодарю за понимание.
Здравствуйте, мои маленькие любители программирования.
Итак, C++ — это язык, которому почти 40 лет. Да-да, он старше многих из вас! Но, как говорится, возраст — это просто число. C++ до сих пор остается актуальным и востребованным. Он был создан Бьярне Страуструпом (да благословит его каждый программист) как расширение языка C. Изначально он даже назывался "Си с классами". Но чтобы начать учить C++, совсем не обязательно знать C. Хотя, конечно, базовые знания программирования вам понадобятся. Например, можно быть знакомым с Python — этим милым, дружелюбным языком, который так любят в школах.
Но вот парадокс: C++ во многом полная противоположность Python. Если Python — это интерпретируемый язык, где вы пишете код и сразу видите результат, то C++ — компилируемый. Это значит, что перед запуском программы вам нужно скомпилировать ее. Звучит сложно? На самом деле нет. Просто представьте, что компилятор — это переводчик, который превращает ваш красивый код в язык, понятный процессору.
Кстати, о компиляторах. Есть несколько популярных вариантов: GCC, Clang, MSVC и другие. Мы будем использовать Clang 16-й версии. Почему? Потому что он удобный, быстрый и просто крутой. При проверке задач мы будем использовать такие ключи компиляции:
clang++ --std=c++20 -O3 -fsanitize=address,undefined -Wall -Wextra -Werror
Не пугайтесь этих строчек! Это просто настройки, которые помогают находить ошибки и делать ваш код лучше.
Теперь немного о стандартах. C++ развивается, и каждые несколько лет появляется новый стандарт языка. Мы будем ориентироваться на C++20. Это как последняя версия вашего любимого приложения — только для программистов.
Если вы думаете, что написание программ на C++ требует каких-то особенных инструментов, то вы ошибаетесь. Можно писать код даже в блокноте. Но, конечно, удобнее использовать среду разработки (IDE). Например, Visual Studio, Eclipse или Qt Creator. Мы же будем запускать компилятор прямо из консоли. Так вы почувствуете себя настоящими хакерами из фильмов.
А теперь давайте напишем нашу первую программу. Знаете, что это будет? Конечно же, "Hello, world!" — традиция, которую обязан соблюдать каждый программист. Вот она:
#include <iostream>
int main() {
std::cout << "Hello, world!\n";
}
Выглядит просто, правда? Но давайте разберем, что здесь происходит. #include <iostream> — это подключение библиотеки для работы с потоками ввода-вывода. std::cout — это поток вывода, который отправляет текст на экран. А \n — это символ перевода строки.
Чтобы скомпилировать эту программу, откройте терминал и введите:
clang++ hello.cpp -o hello
После этого запустите исполняемый файл:
./hello
И вот оно — магическое сообщение: "Hello, world!"
Но что, если вы хотите сделать программу чуть интереснее? Например, спросить имя пользователя и поприветствовать его персонально? Тогда вам понадобится поток ввода std::cin. Вот пример:
#include <iostream>
#include <string>
int main() {
std::string name;
std::cout << "What is your name?\n";
std::cin >> name;
std::cout << "Hello, " << name << "!\n";
}
Обратите внимание: если пользователь введет несколько слов через пробел, программа "увидит" только первое. Чтобы считать всю строку целиком, используйте функцию std::getline.
На этом этапе вы уже знаете, как писать простейшие программы на C++. Но давайте углубимся немного дальше и разберем несколько важных концепций, которые помогут вам лучше понять язык.
Переменные и типы данных
В программировании переменные — это контейнеры для хранения данных. В C++ каждая переменная имеет определенный тип, который указывает, сколько памяти она занимает и какие операции с ней можно выполнять. Вот несколько базовых типов:
int — целые числа (например, 42).
float и double — числа с плавающей точкой (дробные числа). float обычно занимает 4 байта, а double — 8.
char — символы (например, 'A').
bool — логический тип, принимающий значения true или false.
Пример объявления переменных:
int age = 25;
double pi = 3.14159;
char grade = 'A';
bool isProgrammer = true;
Обратите внимание: в C++ важно инициализировать переменные перед их использованием. Если этого не сделать, то при попытке чтения значения такой переменной может возникнуть неопределенное поведение (UB — undefined behavior).
Области видимости
В C++ существует понятие области видимости (scope) переменной. Это означает, что переменная доступна только внутри блока кода, в котором она была объявлена. Например:
#include <iostream>
int globalVariable = 1; // Глобальная переменная
int main() {
int localVariable = 2; // Локальная переменная
{
int innerVariable = 3; // Локальная переменная внутри блока
std::cout << globalVariable << " " << localVariable << " " << innerVariable << "\n";
}
// Здесь innerVariable недоступна
std::cout << globalVariable << " " << localVariable << "\n";
}
Как видите, переменная innerVariable недоступна за пределами своего блока. Это помогает избежать случайного использования переменных там, где они не нужны.
Арифметические операции
C++ поддерживает все стандартные арифметические операции: сложение (+), вычитание (-), умножение (*), деление (/) и взятие остатка от деления (%). Пример:
int a = 7, b = 3;
int sum = a + b; // 10
int difference = a - b; // 4
int product = a * b; // 21
int quotient = a / b; // 2 (целочисленное деление)
int remainder = a % b; // 1 (остаток от деления)
Если вам нужно работать с дробными числами, используйте тип double и явное приведение типов:
double exactQuotient = static_cast<double>(a) / b; // 2.333...
Условия и циклы
Одним из ключевых элементов программирования являются условия и циклы. Они позволяют управлять потоком выполнения программы. Вот пример использования условного оператора if:
int number = 10;
if (number > 0) {
std::cout << "Число положительное.\n";
} else if (number < 0) {
std::cout << "Число отрицательное.\n";
} else {
std::cout << "Число равно нулю.\n";
}
Циклы позволяют повторять выполнение блока кода несколько раз. Вот пример цикла for, который выводит числа от 1 до 5:
for (int i = 1; i <= 5; ++i) {
std::cout << i << "\n";
}
А вот пример цикла while, который выполняется, пока условие истинно:
int counter = 0;
while (counter < 5) {
std::cout << "Счетчик: " << counter << "\n";
++counter;
}
Задача 1: "Калькулятор"
Описание: Напишите программу, которая принимает два числа и операцию (сложение, вычитание, умножение или деление) от пользователя, а затем выводит результат.
Пример работы программы:
Введите первое число: 10
Введите второе число: 5
Выберите операцию (+, -, *, /): *
Результат: 50
Подсказка: Используйте std::cin для ввода данных и условный оператор if для выбора операции. Не забудьте обработать деление на ноль!
Задача 2: "Угадай число"
Описание: Напишите программу, которая загадывает случайное число от 1 до 100 и предлагает пользователю угадать его. После каждой попытки программа должна сообщать, было ли число больше или меньше загаданного.
Пример работы программы:
Я загадал число от 1 до 100. Попробуйте угадать!
Ваша догадка: 50
Мое число меньше.
Ваша догадка: 25
Мое число больше.
Ваша догадка: 30
Поздравляю! Вы угадали за 3 попытки!
Подсказка: Для генерации случайного числа используйте функцию rand() из заголовочного файла <cstdlib>. Чтобы сделать число действительно случайным, добавьте вызов srand(time(0)) из <ctime> в начале программы.
Задача 3: "Факториал"
Описание: Напишите программу, которая вычисляет факториал числа, введенного пользователем. Факториал числа n (обозначается как n!) — это произведение всех целых чисел от 1 до n. Например, 5!=5×4×3×2×1=120.
Пример работы программы:
Введите число: 5
Факториал числа 5 равен 120.
Подсказка: Используйте цикл for для вычисления произведения. Обратите внимание, что факториал определен только для неотрицательных целых чисел.
Задача 4: "Таблица умножения"
Описание: Напишите программу, которая выводит таблицу умножения для числа, введенного пользователем. Таблица должна содержать все произведения от 1 до 10.
Пример работы программы:
Введите число: 7
Таблица умножения для числа 7:
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
...
7 x 10 = 70
Подсказка: Используйте цикл for для перебора множителей от 1 до 10.
Задача 5: "Сумма цифр числа"
Описание: Напишите программу, которая принимает целое число и вычисляет сумму его цифр.
Пример работы программы:
Введите число: 1234
Сумма цифр числа 1234 равна 10.
Подсказка: Преобразуйте число в строку с помощью std::to_string, чтобы легко получить доступ к каждой цифре. Альтернативно, используйте операции деления и взятия остатка для работы с числами напрямую.
Задача 6: "Палиндром"
Описание: Напишите программу, которая проверяет, является ли введенная строка палиндромом. Палиндром — это слово или фраза, которые читаются одинаково слева направо и справа налево.
Пример работы программы:
Введите строку: радар
Строка "радар" является палиндромом.
Введите строку: hello
Строка "hello" не является палиндромом.
Подсказка: Используйте функцию std::reverse из заголовочного файла <algorithm> для создания перевернутой версии строки. Сравните исходную строку с перевернутой.
Задача 7: "Игра в кости"
Описание: Напишите программу, которая имитирует бросок двух игральных костей. Программа должна выводить результат каждого броска и подсчитывать общее количество очков.
Пример работы программы:
Бросаем кости...
Первая кость: 4
Вторая кость: 6
Общее количество очков: 10
Подсказка: Используйте функцию rand() для генерации случайных чисел от 1 до 6.