Лекция 1. Ввод, вывод, числа и условия
В этой лекции мы начнём писать программы на C++. Наша цель простая: научиться создавать маленькие программы, которые читают данные, считают ответ и выводят его на экран.
Так устроено большинство задач по программированию. Обычно программа получает на вход какие-то числа или строки, выполняет действия по условию задачи, а потом печатает ответ.
Code::Blocks
На курсе мы будем писать код в Code::Blocks. Это среда разработки: в ней можно редактировать программу, запускать её и смотреть ошибки.
Мы рекомендуем устанавливать версию со встроенным компилятором: codeblocks-25.03mingw-setup со страницы загрузки.
Если у тебя Windows, можно скачать установщик Code::Blocks с MinGW напрямую с нашего сайта.
Обычно ты будешь работать с файлом на C++, например main.cpp. Внутри этого файла находится текст программы. Более подробную информацию про установку и использование Code::Blocks можно найти в видеолекции.
Первая программа
Вот минимальная программа на C++:
#include <iostream>
using namespace std;
int main() {
cout << "Hello, world!";
return 0;
}
Если её запустить, она выведет:
Hello, world!
Разберём программу по частям.
#include <iostream>
Эта строка подключает библиотеку для ввода и вывода.
using namespace std;
Эта строка нужна, чтобы писать cout коротко. Без неё пришлось бы писать std::cout.
int main() {
...
}
main - главная функция программы. Именно с неё начинается выполнение.
Фигурные скобки { и } показывают, где начинается и где заканчивается тело функции.
cout << "Hello, world!";
cout выводит данные на экран. Текст нужно писать в двойных кавычках.
return 0;
Эта строка завершает программу - возвращает 0 из функции main. Значение 0 означает, что программа закончилась успешно.
Вывод нескольких строк
Чтобы вывести несколько строк, можно использовать \n.
#include <iostream>
using namespace std;
int main() {
cout << "First line\n";
cout << "Second line";
return 0;
}
Результат:
First line
Second line
\n переводит вывод на новую строку.
Значения можно “соединять” через <<. Например, вот код, эквивалентный коду выше:
#include <iostream>
using namespace std;
int main() {
cout << "First line\n" << "Second line";
return 0;
}
Переменные
Переменная - это ячейка, в которой программа хранит значение.
Например:
#include <iostream>
using namespace std;
int main() {
int x = 5;
cout << x;
return 0;
}
Здесь создаётся переменная x, в неё записывается число 5, а потом программа выводит значение x.
int x = 5;
int означает, что в переменной будет храниться целое число.
Значение переменной можно менять:
int x = 5;
x = 10;
cout << x;
Эта программа выведет:
10
Сначала в x было записано 5, потом мы заменили это значение на 10.
Ввод данных
Пока что числа были прямо внутри программы. Но в задачах обычно нужно читать данные: их вводит пользователь или проверяющая система.
Для ввода используется cin.
#include <iostream>
using namespace std;
int main() {
int x;
cin >> x;
cout << x;
return 0;
}
Что происходит:
int x;создаёт переменнуюx;cin >> x;читает число и записывает его вx;cout << x;выводит значениеx.
Если запустить программу и ввести:
17
программа выведет:
17
Можно читать несколько чисел:
#include <iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
cout << a + b;
return 0;
}
Если ввести:
3 8
программа выведет:
11
Числа можно вводить через пробел или с новой строки. Для cin это почти одно и то же.
Арифметика
В C++ можно выполнять обычные арифметические операции.
a + b
a - b
a * b
a / b
a % b
Значения операций:
+- сложение;-- вычитание;*- умножение;/- деление;%- остаток от деления.
Пример:
#include <iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
cout << a + b << "\n";
cout << a - b << "\n";
cout << a * b << "\n";
return 0;
}
Если ввести:
10 3
программа выведет:
13
7
30
Целочисленное деление
С делением целых чисел нужно быть внимательным.
cout << 7 / 2;
Этот код выведет:
3
Почему не 3.5? Потому что 7 и 2 - целые числа. При делении двух целых чисел C++ тоже получает целое число и отбрасывает дробную часть.
Остаток от деления
Операция % возвращает остаток от деления.
cout << 7 % 2;
Результат:
1
Потому что 7 делится на 2 с остатком 1.
Ещё примеры:
cout << 10 % 3 << "\n";
cout << 15 % 5 << "\n";
cout << 18 % 4 << "\n";
Результат:
1
0
2
Остаток от деления часто используют, чтобы проверить чётность числа. Если число делится на 2 без остатка, оно чётное.
Типы int и double
Тип переменной говорит компилятору C++, какие значения можно хранить.
Два важных типа:
int- целые числа:-10,0,7,123;double- дробные числа:3.5,0.25,-10.8.
Пример:
#include <iostream>
using namespace std;
int main() {
int a = 7;
double b = 2.5;
cout << a << "\n";
cout << b << "\n";
return 0;
}
Если задача работает только с целыми числами, обычно используют int. Если нужны дроби, используют double.
Логические выражения
Иногда программа должна сравнить два числа. Для этого используются операторы сравнения.
a == b
a != b
a < b
a > b
a <= b
a >= b
Что они означают:
==- равно;!=- не равно;<- меньше;>- больше;<=- меньше или равно;>=- больше или равно.
Важно: для проверки равенства используются два знака ==, а не один.
a == b
Один знак = используется для присваивания:
x = 5;
Пример:
#include <iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
cout << (a < b);
return 0;
}
Если ввести:
3 8
программа выведет:
1
Если ввести:
10 4
программа выведет:
0
В C++ значение 1 означает “правда”, а 0 означает “ложь”.
Условный оператор if
if позволяет выполнить часть программы только при выполнении условия.
#include <iostream>
using namespace std;
int main() {
int x;
cin >> x;
if (x > 0) {
cout << "positive";
}
return 0;
}
Если ввести положительное число, программа выведет:
positive
Если ввести 0 или отрицательное число, программа ничего не выведет.
Общий вид:
if (условие) {
// команды, которые выполняются, если условие истинно
}
Условие пишется в круглых скобках. Команды, которые зависят от условия, пишутся внутри фигурных скобок.
if-else
Если нужно выполнить какие-то команды при невыполнении условия, есть оператор else, то есть “иначе”. Он пишется после окончания блока оператора if и выполняется, когда условие в if ложно.
#include <iostream>
using namespace std;
int main() {
int x;
cin >> x;
if (x > 0) {
cout << "positive";
} else {
cout << "not positive";
}
return 0;
}
Если x > 0, выполнится первая ветка. Иначе выполнится вторая.
Примеры:
Ввод: 5
Вывод: positive
Ввод: -2
Вывод: not positive
Ввод: 0
Вывод: not positive
Несколько условий
Если вариантов больше двух, можно использовать else if.
#include <iostream>
using namespace std;
int main() {
int x;
cin >> x;
if (x > 0) {
cout << "positive";
} else if (x < 0) {
cout << "negative";
} else {
cout << "zero";
}
return 0;
}
Программа проверяет условия сверху вниз:
- Если
x > 0, выводитpositive. - Иначе, если
x < 0, выводитnegative. - Иначе выводит
zero.
Важно: выполняется только одна подходящая ветка.
Сложные условия
Иногда одного сравнения мало. Например, нужно проверить, что число находится в диапазоне от 10 до 20.
Для этого есть логические операции:
&&
||
!
Они означают:
&&- и;||- или;!- не.
Пример с &&:
#include <iostream>
using namespace std;
int main() {
int x;
cin >> x;
if (x >= 10 && x <= 20) {
cout << "inside";
} else {
cout << "outside";
}
return 0;
}
Здесь условие истинно только тогда, когда обе части верны:
x >= 10;x <= 20.
Важно: в отличие от Python, следующая запись в C++ не проверяет, что x находится между 10 и 20:
10 <= x <= 20
Пример с ||:
#include <iostream>
using namespace std;
int main() {
int x;
cin >> x;
if (x == 0 || x == 10) {
cout << "special";
} else {
cout << "ordinary";
}
return 0;
}
Здесь достаточно, чтобы была верна хотя бы одна часть: x == 0 или x == 10.
Проверка чётности
Число чётное, если оно делится на 2 без остатка.
В C++ это записывается так:
x % 2 == 0
Полная программа:
#include <iostream>
using namespace std;
int main() {
int x;
cin >> x;
if (x % 2 == 0) {
cout << "even";
} else {
cout << "odd";
}
return 0;
}
Примеры:
Ввод: 8
Вывод: even
Ввод: 9
Вывод: odd