Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс лекций по программированию и алгоритмизаци...doc
Скачиваний:
31
Добавлен:
05.09.2019
Размер:
2.24 Mб
Скачать

4.1. Литералы

В 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 выводит символ новой строки и затем очищает буфер вывода.