Hello, world!

Итак, открываем Code::Blocks, создаём новый проект (File-New-Project, выбираем Empty project). После этого слева появится меню, в котором показан наш проект внутри группы Workspace. Если не появился, то жмём View-Manager. Теперь создаём новый файл (File-New-C/C++ Source) (например, hello.cpp), на вкладке, где нужно указать имя нужного файла, поставьте галочку на Debug. Теперь можно набрать следующий текст:

#include <iostream>

using namespace std;

int main()
{
    cout  << "Hello, world!" << endl;
    return 0;
}

Будьте внимательны: язык C++ является чувствительным к регистру букв, то есть заменить main на Main или MAIN нельзя. Весь текст (за исключением текстовой строки "Hello, world!") нужно набирать в нижнем регистре, то есть строчными буквами.

После этого вам нужно откомпилировать этот файл (создать из этого файла исполняемый машинный код). Для этого нужно нажать Build-Build and run, или просто F9. Если ваша программа написана правильно, то компилятор не выдаст никаких сообщений об ошибках и создаст исполняемый файл (a.out в системе Linux или exe-файл в системе Windows). Этот файл содержит исполняемый двоичный машинный код, который тут же будет запущен.

Рассмотрим подробней текст этой программы. В первой строчке мы подключаем к нашей программе файл с именем iostream, в котором содержится описание стандартной библиотеки ввода-вывода языка C++. Этот файл хранится в каталоге, имеющим имя вроде /usr/include/c++/4.4.1/. В этом файле находится, в частности, определение объектов cout и endl, который мы будем использовать позднее. Вторая строка указывает компилятору на то, что мы будем использовать все функции, входящие в пространство имен std, то есть все функции, относящиеся к стандартной библиотеке C++. Третья строка содержит объявление функции main, не принимающей никаких аргументов и возвращающей значение int. Эта функция должна быть в каждой программе, именно эта функция получает управление при запуске программы. Четвертая строка содержит открывающуюся фигурную скобку, что означает начало функции main. В пятой строке мы при помощи оператора << помещаем в объект cout строку "Hello, world!", а потом специальный объект endl, означающий символ перевода строки. Это приводит к печати на экране этой строки и последующему переводу каретки. В шестой строке мы даем инструкцию return, завершающую выполнение функции main и возвращающую нулевое значение. Седьмая строка содержит фигурную скобку, синтаксически закрывающую функцию main.

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

Упражнения

01: Hello, world!

Напишите программу, которая выводит одну строку "Hello, world!" и сдайте ее в тестирующую систему.

Арифметика целых чисел

Переменные

Программы оперируют с данными. Данные хранятся в переменных — специальных областях памяти, отведенных для хранения данных. Каждая переменная имеет свой тип и должна быть объявлена перед использованием. При использовании в программе ранее не объявленной переменной компилятор выдаст сообщение об ошибке вроде

     test.cpp: In function 'int main()':
     test.cpp:5: 'c' undeclared (first use this function)
     test.cpp:5: (Each undeclared identifier is reported only once
     for each function it appears in.)

В этом сообщении указывается имя файла и номер строки, в которой обнаружена ошибка (test.cpp:5), а также описание ошибки ('c' undeclared — объект с именем 'c' не объявлен).

Объявление переменной имеет следующий вид:

<тип переменой> <один или несколько идентификаторов переменных через запятую>;

Например, переменные n и m типа int можно объявить такой строкой:

    int n, m;

Переменную x типа double можно объявить такой строкой:

    double x;

Значения переменных сразу после объявления не определены и являются произвольными. Например, если написать следующую программу:

    int a;
    cout << a;

то на экран будет выведено произвольное целое число, например, -1208725516 (так называемый "мусор").

Идентификатор переменной — это ее имя, которое должно быть последовательностью букв латинского алфавита, символа подчеркивания и цифр, начинающейся с буквы. Примеры правильных идентификаторов: а, i, Year, school179. Имена переменных чувствительны к регистру букв, то есть Number, number, NUMBER и nUMbeR — это четыре разных переменных.

Арифметические операторы

Арифметическая инструкция — это некоторое выражение, состоящее из констант, идентификаторов переменных и арифметических операторов, которая завершается точкой с запятой. Самый главный арифметический оператор — это оператор присваивания ‘=’, который присваивает одной переменной, идентификатор которой указывается слева от оператора ‘=’ значение некоторого выражения, которое стоит справа. Например:

    a = 2;
    b = a + 1;

Мы начнем с рассмотрения только целочисленных величин. Для хранения в памяти целочисленных величин как правило используются переменные типа int. С переменными типа int можно делать следующие арифметические действия:

+Сложение
-Вычитание
*Умножение
/Деление (целочисленное)
%Остаток от деления

Особого внимания заслуживает операторы деления и остатка. Деление производится нацело, с отбрасыванием дробной части. Например, 10/3 это 3, 179/10 это 17, 2/5 это 0. Оператор % возвращает остаток от деления того, что записано справа на то, что записано слева. Например, 10%3 это 1, 179%10 это 9, 2%5 это 2.

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

Ввод-вывод

Для того, чтобы вывести на экран значение переменной или текстовой строки нужно использовать объект “cout” и оператор “<<”, который в данном случае следует называть "Поместить в". cout — объект, связанный со стандартным выводом программы, как правило, это терминал. Для того, чтобы перейти при печати на новую строку необходимо поместить в cout стандартный объект endl.

Текстовые строки при выводе на экран необходимо заключать в двойные кавычки. Если хочется вывести на экран несколько объектов (переменных, текстовых строк и т.д.), то их нужно разделять между собой оператором ‘<<’.

Для того, чтобы считать значение переменной нужно использовать объект “cin” и оператор ‘>>’, который надо называть "Извлечь из". При этом считывание данных будет производиться со стандартного ввода программы, как правило, являющегося клавиатурой. Если хочется за одну операцию считать несколько переменных, то их идентификаторы нужно разделять между собой оператором “>>”.

Более сложный пример

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

#include <iostream>

using namespace std;

int main()
{
    int a, b, s;
    cout << "Введите два числа: ";
    cin >> a >> b;
    s = a + b;
    cout << a << "+" << b << "=" << s << endl;
    return 0;
}

Упражнения

02: Следующее и предыдущее

Напишите программу, которая считывает целое число и выводит текст, аналогичный следующему:

The next number for the number 179 is 180.
The previous number for the number 179 is 178.

В данном случае было введено число 179.

03: a21

Дано целое число a. Вычислите a21 при помощи шести операций умножения.

Запустите эту программу и введите число 10. Почему получился такой странный ответ?.

04: Число десятков

Дано натуральное число. Найдите число десятков в его десятичной записи (то есть вторую справа цифру его десятичной записи).

05: Электронные часы - 2

Электронные часы показывают время в формате h:mm:ss, то есть сначала записывается количество часов, потом обязательно двузначное количество минут, затем обязательно двузначное количество секунд. Количество минут и секунд при необходимости дополняются до двузначного числа нулями.

С начала суток прошло n секунд. Выведите, что покажут часы.

Пример

Ввод Вывод
3602
1:00:02
129700
12:01:40

06: Разность времен

Даны значения двух моментов времени, принадлежачим одним и тем же суткам: часы, минуты и секунды для каждого из моментов времени. Известно, что второй момент времени наступил не раньше первого. Определите, сколько секунд прошло между двумя моментами времени. Программа на вход получает три целых числа — часы, минуты, секунды, задающие первый момент времени и три целых числа, задающих второй момент времени. Выведите число секунд между этими моментами времени.

Пример

Ввод Вывод
1 1 1
2 2 2
3661
1 2 30
1 3 20
50

07: Симметричное число

Дано четырехзначное число. Определите, является ли его десятичная запись симметричной. Если число симметричное, то выведите 1, иначе выведите любое другое целое число. Число может иметь меньше четырех знаков, тогда нужно считать, что его десятичная запись дополняется слева незначащими нулями.

Пример

Ввод Вывод
2002
1
2008
37

08*: Спираль - 1

Квадратную таблицу размером n×n заполнили натуральными числами от 1 до n2 по спирали по часовой стрелке, начиная с левой верхней угловой клетки. Вот пример заполнения для таблицы 4×4:

1 2 3 4
121314 5
111615 6
10 9 8 7

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

Программа получает на вход два числа: размер таблицы n и число, стоящее в искомой клетке (от 1 до n2). Программа должна вывести два числа: номер строки и номер столбца.

Пример

Ввод Вывод
5 1
1 1
4 16
3 2
100 2138
95 36

09*: Спираль - 2

Решите обратную к предыдущей задачу — по номеру строки и столбца определите число, записанное в клетке.

Программа получает на вход три числа: размер таблицы n, номер строки и номер столбца. Программа должна вывести число, записанное в указанной клетке.

Пример

Ввод Вывод
5 1 1
1
4 3 2
16
100 95 36
2138