Занятие 1: Простейшая программа на C++

Простейшая программа на C++ выглядит примерно так:

#include <iostream>
int main(void) {
	std::cout << "Hello world";
	return 0;
}

Это её исходный код (source code) — текстовая запись программы, состоящая из символов и команд, понятных прежде всего программисту, знакомому с конкретным языком программирования (или обучающемуся такому языку).

Представленная программа выведет на экран фразу «Hello world», но только после того, как будет откомпилирована и запущена.

Принято исходный код программ на C++ сохранять с расширением .cpp после имени файла (происходит такая идея от названия «C Plus Plus» и от того, что во многих операционных системах знак плюс нельзя использовать в именах файлов и каталогов).

Давайте нашу первую программу сохраним в файле hello.cpp, тогда, чтобы откомпилировать данный файл в ОС GNU/Linux, достаточно, находясь в том же каталоге, где сохранён файл с исходным кодом, дать системе команду:

make hello

Команда make, кроме вызова компилятора, выполнит ряд рутинных операций, в результате которых в той же директории, где хранится hello.cpp и откуда мы запустили команду make, появится исполнимый файл hello (без расширения). Чтобы запустить нашу программу, мы должны запустить получившийся исполнимый файл. Из текущей директории это делается так:

./hello

Для C++ существует масса IDE (например, NetBeans). Внутри IDE (интегрированной среды разработки) процесс компиляции и запуска автоматизирован и, как правило, скрыт от разработчика. Но эти процессы всё равно, происходят каждый раз при попытке запустить программу, притом строго в рассмотренной нами последовательности, т.е. самое минимальное изменение в программном коде требует пересохранения файла с исходным кодом, перекомпиляции и перезапуска программы.

Перед тем, как создаётся исполняемый код, программа анализируется отладчиком, который ищет в исходном коде существующие и потенциальные ошибки. Если ошибок не найдено, то команда make ничего не выведет на экран в результате своей работы, иначе — будет представлена информация об ошибках с указанием строк, в которых они присутствуют. Пока ошибки не будут исправлены, исполнимый файл не будет создан (или не обновлён, если существовал ранее).

Инструкции простейшей программы

В первой строке программы с помощью директивы #include происходит подключение заголовочного файла iostream. Заголовочные файлы содержат описание функций и других готовых элементов, которые можно использовать в своих программах после того, как заголовочный файл подключён. iostream входит в стандартную библиотеку C++, но заголовочные файлы можно создавать и самостоятельно, помещая туда часто используемые функции, шаблоны и прочие заготовки.

Заголовочный файл iostream содержит набор готовых функций для потокового ввода и вывода. Мы будем использовать функцию вывода на консоль.

На второй строке программы мы объявляем функцию main. Перед именем функции — тип возвращаемого ею значения, в данном случае это int (целые числа). После имени в круглых скобках указывается набор параметров функции, в данном случае слово void указывает на отсутствие параметров. Вместо void круглые скобки можно было оставить пустыми.

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

Функция в C++, как и в большинстве языков программирования, понимается как некоторая подпрограмма, в момент вызова которой управление из основной программы передаётся в функцию, вместе с управлением может передаваться ряд аргументов (параметров). Когда функция завершит своё выполнение, то есть когда будут выполнены все инструкции перечисленные в теле функции, управление вернётся основной программе. Вместе с этим функция в программу вернёт некоторый результат.

При запуске программы на C++ происходит выполнение функции main. Если такой функции в программе не будет, то программа не сможет выполняться. Явно вызывать функцию main не требуется. По договорённости, функция main должна возвращать значение типа int, то есть она может возвращать любое целочисленное значение. По другой договорённости, это значение интерпретируется операционной системой, как код ошибки запущенной программы. Ноль означает отсутствие ошибки.

На четвёртой строке программы с помощью return ноль и возвращается, как результат функции. Для функции main, даже объявляя её как возвращающую целое число, и только для неё, можно ничего не возвращать.

На пятой строке закрывается блок и соответствующее тело функции.

На третей — происходит вывод на экран. Для этого мы пользуемся командой cout. Она не является частью самого языка C++, но описана в стандартной библиотеке, а именно, в её заголовочном файле iostream. Если бы данный заголовочный файл мы не подключили в начале программы, мы не могли бы использовать cout.

Перед cout представлена инструкция:

std::

std — это пространство имён, определённое для всей стандартной библиотеки С++, а «::» — это оператор разрешения области видимости, который указывает, из какого пространства имён должен браться следующий за ним идентификатор.

Пространство имён — группа идентификаторов, внутри которой все идентификаторы уникальны (не повторяются). С помощью идентификаторов, состоящих из латинских букв и цифр мы можем давать имена различным сущностям программы: переменным, функциям, методам, классам. С помощью разных пространств имён можно использовать одни и те же имена в одной и той же программе. Кроме того, пространство имён позволяет решить следующую программу: в собственных программах для создания сущностей мы можем использовать те же имена, что задействованы в сторонних библиотеках, в том числе, в стандартной библиотеке C++.

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

Наша первая программа может выглядеть так:

#include <iostream>
using namespace std;
int main() {
	cout << "Hello world";
}

На всей стандартной библиотеке единое пространство имён std помогает объединить описанные в библиотеке ресурсы в единое целое. Стандартная библиотека устроена так, что в разных её файлах нет повторяющихся идентификаторов на одном уровне. Стандартная библиотека распределена по разным заголовочным файлам, каждый из которых мы можем подключить к программе, но пространство имён везде общее — std.

Как уже упоминалось, в методе main может отсутствовать return, не смотря на то, что метод объявленный, как возвращающий значение целого типа. Аналогично, может отсутствовать void внутри аргумента функции main.

Задачи

Итак, вам уже знакомы основы синтаксиса на примере языка Java. Давайте их вспомни, решив несколько простых задач.

  1. Создать программу, выводящую на экран ваше имя.
  2. Создать программу, вычисляющую и выводящую на экран значение выражения 20x⅓+15².
  3. Создать программу, вычисляющую и выводящую на экран среднее арифметическое двух вещественных чисел, сохранённых в переменных x и y.
  4. Создать программу, вычисляющую и выводящую на экран куб числа, сохраненного в целой переменной num.
  5. Создать программу, вычисляющую и выводящую на экран сумму цифр натурального двухзначного числа, сохраненного в целой переменной chis.
  6. Создать программу, вычисляющую и выводящую на экран сумму цифр натурального трёхзначного числа, сохраненного в целой переменной s.