}
В результате работы программы получим, например:
Input string: 12345 67890
12345
Input string: 67890
Как видно из примера, строка символов вводилась лишь один раз, хотя в программе оператор ввода встречается дважды. При этом первые пять вводимых символов были помещены в переменную Stringl,а последующие символы - в переменную String2.
2. Комментарии
При создании программного продукта разработчик всегда ясно представляет, что будет выполнять та или иная часть его программы. Однако, если программа довольно сложная (большой размер исходного текста, нетривиальность алгоритма), через какое-то время бывает трудно вспомнить всю цепь логических рассуждений, предшествующих написанию кода. Особенно сложно бывает разобраться в текстах программ других разработчиков.
Чтобы избежать подобных неприятностей, в процессе составления программного кода используются так называемые комментарии. Текст комментариев всегда игнорируется компилятором, но позволяет программисту описывать назначение какой-либо части программы. Размер комментариев ограничен только размером свободной памяти, хотя, конечно, не стоит превращать текст программы в литературное произведение.
В С++используется две разновидности комментариев.
Первый, традиционный (заимствованный из ANSI С)многострочный комментарий, представляет- собой блок, начинающийся с последовательности символов «слеш со звездочкой» (/*) и заканчивающийся символами «звездочка слеш» (*/). Как следует из названия, данный вид комментария может располагаться на нескольких строках. Комментарии этого тина не могут быть вложенными друг в друга.
Второй вид - однострочный комментарий - следует за «двойным слешем» (//) доконца текущей строки. Этоттип комментария может быть вложенным в многострочный комментарий.
Кроме объяснения текста программы комментарии можно использовать для временного исключения из программы некоторой ее части. Этот прием обычно используется при отладке.
Например:
inc. main()
{
II примеры комментария
int а = 0; // int d;
/*int b = 15;*/
int с = 7;
/* <- начало комментария
а = с;
конец комментария -> */ return 0;
}
В приведенном примере компилятор проигнорирует объявление переменной b и d, а также присвоение переменной азначения переменной с.
3. Переменные и типы данных
Сутьфактически любой программы сводится к вводу, хранению, модифицированию и выводу некоторой информации.
Для того чтобы программа могла на протяжении своего выполнения сохранять определенные данные и оперировать с ними, используются переменные и константы.
Одним из базовых свойств программы является идентификатор.
Под идентификатором понимается имя переменной или константы, имя функции или метка. В программе идентификатор может содержать прописные и строчные латинские буквы, цифры и символ подчеркивания, обязательно начинается с буквы или символа подчеркивания и не должен совпадать с ключевым словом (с учетом регистра). Так, в приведенном выше примере представлены идентификаторы а, Ь, с и d.
Следующим базовым понятием любого языка программирования является ключевое слово.
Ключевые слова - это зарезервированные языком идентификаторы, имеющие специальное назначение. В табл. 1.1 приводится список ключевых слов языка С++.
Таблица 1.1
Ключевые слова
asm | else | new | template |
auto | enum | operator | this |
break | explicit | private | throw |
case | extern | protected | try |
catch | float | public | typedef |
char | for | register | typename |
class | friend | return | union |
const | goto | short | unsigned |
continue | if | signed | virtual |
default | inline | sizeof | void |
delete | int | static | volatile |
do | long | struct | while |
double | mutable | switch |
Чтобы переменную можно было использовать в программе, она должна быть предварительно объявлена. При этом в процессе объявления переменной осуществляется создание ее идентификатора.
Переменная - объект программы, занимающий в общем случае несколько ячеек памяти, призванный хранить данные. Переменная, обладает именем, размером и рядом других атрибутов (таких как видимость, время существования и т.д.).
При объявлении переменной для нее резервируется некоторая область памяти, размер которой зависит от конкретного типа переменной. Здесь следует обратить внимание на то, что размер одного и того же типа данных может отличаться на компьютерах разных платформ, а также может зависеть от используемой операционной системы. Поэтому при объявлении той или иной переменной нужно четко представлять, сколько байт она будет занимать в памяти ЭВМ, чтобы избежать проблем, связанных с переполнением и неправильной интерпретацией данных.
Ниже приведен перечень базовых типов переменных и их размер в байтах. Следует учесть, что размер, указанный в табл. 1.2 для каждого типа, должен быть проверен для конкретного ПК.
Таблица 1.2
Базовые типы данных для ПК на базе платформы Intel
Тип | Размер, байт | Значение |
bool | 1 | true или false |
unsigned short int | 2 | от 0 до 65 535 |
short int | 2 | от -32 768 до 32 767 |
unsigned long int | 4 | от 0 до 4 294 967 295 |
long int | 4 | от -2 147 483 648до 2 147 483 647 |
int (16 разрядов) | 2 | от -32 768 до 32 767 |
int (32 разряда) | 4 | от -2 147 483 648до 2 147 483 647 |
unsigned int (16 разрядов) | 2 | от 0 до 65 535 |
unsigned int (32 разряда) | 4 | от 0до 4 294 967 295 |
char | 1 | от 0 до 256 |
float | 4 | от 1.2е-38 до 3.4е38 |
double | 8 | от 2.2е-308 до 1.8е308 |
void | 2 или 4 | - |
Объявление переменной начинается с ключевого слова, определяющего его тип, за которым следует собственно имя переменой и (необязательно) инициализация - присвоение начального значения.
Одно ключевое слово позволяет объявить несколько переменных одного и того же типа. При этом они следуют друг за другом через запятую (,). Заканчивается объявление символом точка с запятой (;).
Имя переменной (идентификатор) не должно превышать 256символов (разные компиляторы накладывают свои ограничения на количество распознаваемых символов в идентификаторе). При этом важно учитывать регистр букв (Abe и abc- не одно и то же)! Конечно, имя должно быть достаточно информативным, однако не следует использовать слишком длинные имена, так как это приводит к опискам.
Хотя начальная инициализация и не является обязательной при объявлении переменной, все же рекомендуется инициализировать переменные начальным значением. Если этого не сделать, переменная изначально может принять непредсказуемое значение.
Установка начального значения переменной осуществляется с помощью оператора присваивания (=).
Рассмотрим подробно основные типы переменных.
Переменная типа boolзанимает всего 1 байт и используется, прежде всего, в логических операциях, так как может принимать значение 0 (false,ложь) или отличное от нуля (true, истина). Встарых текстах программ вы можете встретить тип данных BOOLи переменные этого типа, принимающие значения TRUE и FALSE.Этот тип данных и указанные значения не являлись частью языка, а объявлялись в заголовочных файлах как unsigned short, с присвоением начальных значений 1 и 0 соответственно. В новой редакции С++ bool - самостоятельный, полноправный тип.
Часто в программе бывает необходимо указать, что переменная должна принимать только целые значения. Целочисленные переменные (типа int, long, short), как следует из названия, призваны хранить целые значения, и отличаются только размером допустимого значения. Целочисленные переменные могут быть знаковыми и беззнаковыми.
Знаковые переменные могут представлять как положительные, так и отрицательные числа. Для этого в их представлении один бит (самый старший) отводится под знак. Вотличие от них, беззнаковые переменные принимают только положительные значения. Чтобы указать, что неременная будет беззнаковой, используется ключевое слово unsigned.По умолчанию целочисленные переменные считаются знаковыми (signed,чаще всего опускается; используется при преобразовании типов данных).
Из табл. 1.2видно, что переменная типа int в разных случаях может занимать в памяти различное число байт.
Символьный тип данных char применяется," когда переменная должна нести информацию о коде ASCII. Этот тип данных часто используется для построения более сложных конструкций, таких как строки, символьные массивы и т.д. Данные типа char также могут быть знаковыми и беззнаковыми.
Для представления чисел с плавающей запятой применяют тип данных float.Этот тип, как правило, используется для хранения не очень больших дробных чисел и занимает в памяти 4байта: 1 бит - знак, 8 бит - экспонента, 23 бита - мантисса.
Если вещественное число может принимать очень большие значения, используют переменные двойной точности, тип double.
Переменная типа void не имеет значения и служит для согласования синтаксиса. Например, синтаксис требует, чтобы функция возвращала значение. Если не требуется использовать возвращенное значение, перед именем функции ставится тип void.
Приведем несколько примеров объявления переменных:
int а = О, А = 1;
float aGe = 17.5;
double PointX;
bool bTheLightlsOn=false;
char LETTER = 'Z';
void MyFunctionQ; //возвращаемое функцией
//значение игнорируется
4. Константы
Константы, так же как и переменные, представляют собой область памяти для хранения данных, с тем лишь отличием, что значение, присвоенное константе первоначально, не может быть изменено на протяжении выполнения всей программы. Константы бывают литеральными и типизованными, причем литеральные константы делятся на символьные, строковые, целые и вещественные.
Символьные константы представляются отдельным символом, заключенным в одинарные кавычки (апострофы): 'е', '@', '<'.