В C++ существует четыре типа литералов:
· целочисленный литерал;
· вещественный литерал;
· символьный литерал;
· строковый литерал.
Целочисленный литерал служит для записи целочисленных значений и является соответствующей последовательностью цифр (возможно со знаком '-'). Целочисленный литерал, начинающийся с 0, воспринимается как восьмеричное целое. В этом случае цифры 8 и 9 не должны встречаться среди составляющих литерал символов. Целочисленный литерал, начинающийся с 0x или 0X, воспринимается как шестнадцатеричное целое. В этом случае целочисленный литерал может включать символы от A или a, до F или f, которые в шестнадцатеричной системе эквивалентны десятичным значениям от 10 до 15. Непосредственно за литералом может располагаться в произвольном сочетании один или два специальных суффикса: U (или u) и L (или l).
Вещественный литерал служит для отображения вещественных значений. Он фиксирует запись соответствующего значения в обычной десятичной или научной нотациях. В научной нотации мантисса отделяется от порядка литерой E (или e). Непосредственно за литералом могут располагаться один из двух специальных суффиксов: F (или f) и L (или ℓ).
Значением символьного литерала является соответствующее значения ASCII кода (это, разумеется, не только буквы, буквы-цифры или специальные символы алфавита C++). Символьный литерал представляет собой последовательность из одной или нескольких литер, заключённых в одинарные кавычки. Символьный литерал служит для представления литер в одном из форматов представления. Например, литера Z может быть представлена литералом 'Z', а также литералами '\132' и '\x5A'. Любая литера может быть представлена в нескольких форматах представления: обычном, восьмеричном и шестнадцатеричном. Допустимый диапазон для обозначения символьных литералов в восьмеричном представлении ограничен восьмеричными числами от 0 до 377. Допустимый диапазон для обозначения символьных литералов в шестнадцатеричном представлении ограничен шестнадцатеричными числами от 0x0 до 0xFF. Литеры, которые используются в качестве служебных символов при организации формата представления или не имеют графического представления, могут быть представлены с помощью ещё одного специального формата. Ниже приводится список литер, которые представляются в этом формате. К их числу относятся литеры, не имеющие графического представления, а также литеры, которые используются при организации структуры форматов.
\0 \x00 null пустая литера
\a \x07 bel сигнал
\b \x08 bs возврат на шаг
\f \x0C ff перевод страницы
\n \x0A lf перевод строки
\r \x0D cr возврат каретки
\t \x09 ht горизонтальная табуляция
\v \x0B vt вертикальная табуляция
\\ \x5C \ обратная косая черта
\' \x27 '
\" \x22 "
\? \x3F ?
Список литер организован по следующему принципу: сначала приводится представление литеры в специальном формате, затем – эквивалентное представление в шестнадцатеричном формате, далее – обозначение или название литеры, за которым приводится краткое описание реакции на литеру (смысл литеры).
Строковые литералы являются последовательностью (возможно, пустой) литер в одном из возможных форматов представления, заключённых в двойные кавычки. Строковые литералы, расположенные последовательно, соединяются в один литерал, причём литеры соединённых строк остаются различными. Так, например, последовательность строковых литералов "\xF" "F" после объединения будет содержать две литеры, первая из которых является символьным литералом в шестнадцатеричном формате '\F', второй – символьным литералом 'F'. Строковый литерал и объединённая последовательность строковых литералов заканчиваются пустой литерой, которая используется как индикатор конца литерала.
Рассмотрим несколько простейших примеров программ, а затем вернемся к систематическому изучению языка.
Пример. Вывести на экран номер года.
# include <stdio.h>
/* Пример 1.*/
main()
{ int year, month;
year = 2012;
printf("Сейчас %d год\n", year);
}
Детально рассмотрим программу.
Первая строка #include <stdio.h> сообщает компилятору о необходимости подключить файл stdio.h. Этот файл содержит информацию, необходимую для правильного выполнения функций библиотеки стандартного ввода/вывода языка С. Язык С предусматривает использование некоторого числа файлов такого типа, которые называются заголовочными файлами (header files). В файле stdio.h находится информация о стандартной функции вывода printf(), которая использовалась далее в программе.
Вторая строка /* Пример 1.*/ является комментарием.
Комментарий–это часть программы, которая игнорируется компилятором и служит для удобочитаемости исходного текста программы. В процессе компиляции комментарий заменяется пробелом, следовательно, комментарий может располагаться в любом месте программы, где допустимо использование пробела. Комментарием в языке С является любая последовательность символов, заключенная между парами символов /* и */. В стандарте языка С запрещены вложенные комментарии, хотя во многих реализациях компиляторов, в частности в Borland C++, вложенные комментарии разрешены. В языке C++ появился еще один вид комментариев: так называемый однострочный комментарий. Все символы, располагающиеся за парой символов // и до конца строки, рассматриваются как комментарий. Компилятор языка С, встроенный в систему Borland C++, позволяет использовать комментарий в стиле C++ в программах на языке С.
Третья строка main() – определяет имя функции. Любая программа на языке С состоит из одной или нескольких функций. Выполнение программы начинается с вызова функции main(). Поэтому каждая программа на языке С должна содержать функцию main().Эта конструкция может выглядеть по-другому:
main или void main (void) или void main()
Эти три конструкции взаимозаменяемы. Для простоты пока поясним, что void означает нечто, несуществующее и его можно явно не указывать. Все три заголовка говорят о том, что наша главная функция не имеет параметров и не возвращает никакого значения.
Следующая строка { содержит открывающую фигурную скобку (brace), обозначающую начало тела функции main().Фигурные скобки в языке С всегда используются парами (открывающая и закрывающая). Закрывающую скобку мы еще встретим в нашей программе.
Строка int year, month ; объявляет (declare) переменную, называемую year, и сообщает компилятору, что эта переменная целая. В языкеС все переменные должны быть объявлены прежде, чем они будут использованы. Процесс объявления переменных включает в себя определение имени (идентификатора) переменных (year, month)и указание типа переменных (int).
Строка yеаг = 2008; является оператором присваивания. В этой строке переменой с именем year присваивается значение 2008. Заметим, что в языке С используется просто знак равенства в операторе присваивания. Все операторы в языке С заканчиваются символом «точка с запятой».
Строка printf ("Сейчас %d год\n", year); является вызовом стандартной функции printf(), которая выводит на экран некоторую информацию. Эта строка состоит из двух частей: имени функции printf()и двух ее аргументов "Сейчас %d год\n" и year, разделенных запятой. В языке С нет встроенных функций ввода/вывода. Но библиотеки языка С и C++ содержат много полезных и удобных функций ввода/вывода. Функция printf(), которую мы использовали, является универсальной функцией форматного вывода.
Для вызова функции нужно написать имя функции и в скобках указать необходимые фактические аргументы. Первый аргумент функции printf() – это строка в кавычках "Сейчас %d год\n", которую иногда называют управляющей строкой (control string).
Управляющая строка содержит два типа информации: символы, которые непосредственно выводятся на экран, и команды формата (спецификаторы формата), определяющие, как выводить аргументы. Команда формата начинается с символа %, за которым следует код формата. Команды формата следующие:
%с – символ,
%d – целое десятичное число,
%i – целое десятичное число,
%е – десятичное число в видех.хх е+хх,
%Е – десятичное число в виде х.хх Е+хх,
%f – десятичное число с плавающей занятой хх.хххх,
%F –десятичное число с плавающей запятой хх.хххх,
%g – %f или %е, что короче,
%G – %F или %Е, что короче,
%о – восьмеричное число,
%s –строка символов,
%u – беззнаковое десятичное число,
%х – шестнадцатеричное число 5a5f,
%Х – шестнадцатеричное число 5A7F,
%% – символ %,
%р – указатель,
%n – указатель.
Кроме того, к командам формата могут быть применены модификаторы l и h, например:
%ld – печать long int,
%hu – печать short unsigned,
%lf – печать long double.
Между знаком % и форматом команды может стоять целое число. Оно указывает на наименьшее поле, отводимое для печати. Если строка или число больше этого поля, то строка или число печатается полностью, игнорируя ширину поля. Нуль, поставленный перед целым числом, указывает на необходимость заполнить неиспользованные места поля нулями. Вывод printf("%05d", 15); даст результат 00015.
Чтобы указать число десятичных знаков после целого числа, ставится точка и целое число, указывающее на количество десятичных знаков. Когда такой формат применяется к целому числу или к строке, то число, стоящее после точки, указывает на максимальную ширину поля выдачи.
Выравнивание выдачи производится по правому краю поля. Если мы хотим выравнивать по левому знаку поля, то сразу за знаком % следует поставить знак минуса. В прототипе функции многоточием обозначен список аргументов – переменных или констант, которые следуют через запятую и подлежат выдаче в соответствующем формате, следующем по порядку.
Спецификация формата, начинающаяся с символа '%', указывает формат, в котором будет выводиться значение переменной year, являющейся вторым аргументом функции printf().Спецификация %dуказывает, что будет выводиться целое число в десятичной записи. Комбинация символов ' \n'сообщает функции printf()о необходимости перехода на новую строку. Этот символ называется символом новой строки (newline).
Последняя строка программы } содержит закрывающую фигурную скобку. Она обозначает конец функции main().
Если при наборе программы вы не допустили опечаток, то на экране увидите строку: Сейчас 2008 год.
Эта программа была написана более в стиле языка С, а не С++. Приведем пример программы с использованием конструкций ввода/вывода языка C++.
Пример.
//Вычисление длины и площади окружности
#include <iostream.h>
void main()
{
int radius;
float length, square;
cout<<"Введите значение радиуса:\n";
cin>>radius;
length = 3.1415 * 2 * radius;
square = 3/1415 * radius * radius;
cout<<" Радиус – " << radius<<"длина – "<<length<<endl;
cout<<" Радиус – " << radius<<"площадь – "<<length<<endl;
}
В этой программе по сравнению с предыдущей использовано несколько важных новшеств. Во-первых, объявлены две переменные двух разных типов: radius – типа целое (int); length– типа с плавающей запятой (float), содержащую дробную часть. Во-вторых, используются другие операторы ввода/вывода, даже на первый взгляд значительно отличающиеся от функции printf.
Объекты потоковcout и cinвызывают взаимодействие между пользователем и компьютером. Поскольку это взаимодействие напоминает диалог, часто говорят о диалоговом расчете или интерактивном расчете. Используется объект выходного потока cout и операция << – поместить в поток для вывода приглашения пользователю и выдачи результата расчета. Объект входного потока cin и операция взять из потока >>, чтобы получить от пользователя значение.
Манипулятор потока endlвыводит символ новой строки и затем очищает буфер вывода.