Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Язык программирования Сpp 25.09.11 (2).doc
Скачиваний:
16
Добавлен:
19.08.2019
Размер:
10.09 Mб
Скачать

1.2. Комментарии

Наряду с командами часто нужно писать пояснительный текст, который рассказывает о том, с какой целью вы все это делаете. Такие пояснения называются комментариями. Комментарии особенно важны, если вы хотите, чтобы в вашей программе мог разобраться кто-нибудь другой, или если вы собираетесь с ней работать дальше. Опыт показывает, что спустя неделю после завершения работы с программой забываются практически все тонкие моменты, на которые вы потратили больше всего времени. Поэтому примите настоятельный совет – пишите комментарии, даже если делать этого не хочется. С другой стороны не увлекайтесь литературным творчеством. писать комментарий типа: «а здесь я умножаю два на три». Пишите комментарии действительно там, где они нужны и так, чтобы они принесли наибольшую пользу. Комментарии программой не исполняются. Заметим, что в комментарии можно использовать любые символы, что означает, что комментарий можно писать на русском языке, а также использовать зарезервированные слова, например, main( ).

В С++ комментарии можно вставить везде, где можно вставить пробел. Существуют два типа комментариев. Один из них оформляется в виде двух знаков деления, после которых идет любой текст. Например:

// Это текст, который до конца строки рассматривается

// как комментарий,

// такой комментарий может быть продолжен на следующей строке.

// Признаком окончания этого типа комментария является

// конец строки.

Такого рода комментарии называются комментариями в стиле языка С++.

Существует еще один тип комментариев. Такой комментарий начинается знаком /* и заканчивается обратным знаком */. Вот пример такого комментария:

/* Подобного рода комментарии могут занимать несколько строк.

* В связи с этим часто каждую строку такого комментария

* помечают каким-нибудь специальным знаком, например, знаком

* умножения. В противном случае комментарий можно принять

* за команду особенно когда запись производится буквами

* латинского алфавита */

Такой комментарий называется комментарием в стиле языка С. Комментарии этого типа не могут быть вложенными, т.е. конструкция типа/* Это один комментарий, /* а здесь начинается другой */ */

недопустима. Хотя вложение разнотипных комментариев возможно. Последнее свойство позволяет использовать комментарии при отладке программы, когда в силу различных причин возникает необходимость в отключении отдельных строк программы. Правда реализации этой возможности нужно пользоваться комментариями первого типа, тогда комментарии в стиле языка С позволят «вырезать» из программы целые куски.

1.3. Зарезервированные слова и типы данных

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

Зарезервированные слова это заранее оговоренный список английских слов и нескольких символов, который используется в качестве команд языка. С некоторыми из них мы уже встречались, например, слова main, define. Встречая такое слово, компьютер «понимает» что далее нужно сделать и не спутает его ни с каким иным словом. Таких слов в С++ немного, меньше 60. Можно сказать, что как только мы все их изучим, так сразу поймем возможности языка С++. Зарезервированный символ мы тоже встречали это решетка #.

Теперь перейдем к так называемым типам данных, но сначала скажем о том, что представляют собой данные. Для начала можно сказать так: данные это то с чем работает программа, т.е не команды, а то что требуется для выполнения этих команд. Например, для сложения нужны числа, для формирования текста символы, а возможно слова и целые фразы. После такого не очень хорошего определения постараемся понять, что такое тип данных.

Мы уже говорили, что минимальной единицей информации в компьютере является байт, который состоит из восьми битов. Память компьютера можно рассматривать как последовательность пронумерованных байтов. Номер байта называется его адресом. Байт довольно мелкая величина, поэтому для хранения чисел, букв или любого иного объекта информации часто используется несколько соседних байтов. Группа состоящая из соседних байтов в которых хранится объект информации называется ячейкой. Адресом такой ячейки является адрес первого, входящего в группу байта. Таким образом, память компьютера можно рассматривать как совокупность ячеек разного размера. Размер ячейки, как отмечалось, зависит от того, что мы в неё поместили. Однако часто ячейки равных размеров хранят в себе данные разных типов. Остановимся на этом более подробно.

Информация, содержащаяся в ячейках памяти может иметь совершенно различный смысл. Это могут быть, например, целые числа, или числа с дробной частью, или символы. Тем не менее, все это выражено в виде последовательности нулей и единиц. Обращаясь к ячейке памяти, компилятор может трактовать содержащуюся в ней информацию как число, букву, команду или информацию другого типа. Например, двоичное число 01000001 может обозначать букву A или десятичное число 65. Поэтому, при создании программ, нужно указывать какая информация хранится в каждой ячейке. В этом случае за счет применения разных схем кодирования удается правильно интерпретировать содержащуюся информацию. К счастью, сделать это несложно, практически все выполняется автоматически. Для этого в языках программирования используются понятия «типы данных».

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

Типы данных образуют перечень видов данных, которые используются в языке. Например, некоторые языки используют только целые числа, дробные числа и символы. В других этот список расширен введением булевских чисел true и false, а также строк, состоящих из символов, в третьих, он расширен еще больше, например, введением записей, множеств и т.д.

Часто этот перечень бывает закрытым. Это означает, что программист может работать только с ограниченным числом переменных входящих в названный список. В С++ это не так. Программист, работающий в С++ может неограниченно расширять количество типов переменных. Однако существует несколько базовых типов. Здесь мы рассмотрим только некоторые из них. Прежде всего, это символьный тип. В символьный тип входят все символы, которые встречаются на клавиатуре. Именно символы, а не вспомогательные клавиши. Однобайтовых символов может быть 28=256 штук. Для кодирования символов достаточно одного байта.

Каждый тип данных имеет свое название. Символьный тип имеет имя char от слова английского слова character (буква, иероглиф, цифра, знак). Кстати, о иероглифах. Для кодирования многих национальных алфавитов 256 символов оказывается недостаточно. Поэтому иногда для кодирования символов используются два байта. Такой тип кодировки называется юникодом. Юникод позволяет поддеоживать все известные в мире алфавиты и элементы иероглифов.

Вернемся все же к данным типа char. В переменной типа char может храниться только один символ клавиатуры, при этом прописная и строчная буква рассматриваются как разные символы. Вообще говоря, символы русского алфавита кодируются точно также как и символы латиницы. Однако, производители программного обеспечения, которые, как правило, находятся в США, рассчитывают прежде всего на англоязычного потребителя продукта. Поэтому кодировка кириллицы в среде программирования С++ имеется только тогда когда редактор С++ подвергся специальной доработке, или как говорят, русифицирован, что бывает довольно редко. Это недоразумение легко разрешимо, но об этом мы будем говорить позднее.

Другим типом являются целые числа. В С++ целый тип называется типом int от слова integer (целый). Для размещения числи типа int используется 4 байта. В четырех байтах можно поместить 232 различных чисел без знака или числа от – 2 147 483 648 до 2 147 483 647. Обычно такого диапазона целых чисел вполне достаточно. В компьютерах ранних версий использовалось только два байта, поэтому диапазон чисел типа int в там значительно уже от -32768 до 32767. В компьютерах с 32 разрядных процессорах такие числа тоже можно использовать, только называются они short (короткий) или short int. Оба имени можно применять в программах, т.к. они означают одно и тоже.

Кроме целых чисел программа должна работать с дробными числами. В С++ для этого используются так называемые числа с плавающей точкой (запятой). Не стоит пугаться, с такими числами вы давно знакомы. Например, 123,456 можно записать как 1,23456∙102, т.е. такие числа имеют дробную часть. Такой тип чисел, а точнее тип данных, называется float (плавающий). Обратите внимание, что дробная часть отделяется от целой части точкой, а не запятой. Это справедливо для записи дробных сисел любых типов. Для записи числа типа float используется 4 байта. Числа этого типа могут быть как положительными так и отрицательными. Диапазон изменений таких чисел примерно равен от 10-38до 1038.

Другим типом дробных чисел является число типа double (двойной). Такие числа имеют дробную часть. Например, 3.1415926. Для записи числа типа double используется 8 байтов. Числа этого типа могут быть как положительными так и отрицательными. Минимальное по модулю число примерно равно 10-308, максимальное 10308. Следует понимать, что целые числа заприсыватся точно, а дробные числа хранятся как приближенное значение, то есть только

Сравним записи целых чисел и чисел с плавающей точкой. Если в программе встретятся числа 2 и 2.0 то компилятор С++ будет трактовать их по-разному. Первое рассматривается как целое – int (4 байта), второе как double (8 байт), потому, что у него есть дробная часть. Неважно, что она равна нулю. Число типа double может быть записано в экспоненциальной форме. В частности такое представление удобно для очень больших и очень малых по модулю чисел. Например число 2873620000, которое иначе можно записать как 2,87362∙109 в С++ записывается как 2.87362е9, то есть после знака е стоит степень в которую нужно возвести число 10. Такое обозначение употребляется потому, что в обычных клавиатурах не предусмотрен способ записи с использованием верхнего индекса. Число стоящее перед знаком е называется мантиссой. Число стоящее после знака е называется показателем степени, его можно рассматривать как указатель направления и количества цифр на которые нужно переместить десятичную точку. Например, чтобы записать число 3.62е4 в виде обычной десятичной дроби нужно перенести десятичную точку на четыре позиции вправо, в результате получится число 36200.0. Если после символа е стоит отрицательное число, десятичную точку нужно перенести налево, при необходимости добавляя после нее нули. Так число 3.62е-4 означает тоже самое, что 0.000362. Эти примеры показывают, что при экспоненциальном представлении числа десятичная точка как бы плывет на соответствующее степени количество разрядов. Отсюда и название такого типа - числа с плавающей точкой.

Число которое стоит перед символом е может содержать или не содержать десятичную точку. Число стоящее после е не должно содержать десятичной точки.

В 8 байтов можно записать ограниченное число значащих цифр мантиссы, обычно не менее 14, поэтому от чисел типа double можно ожидать сюрпризов, связанных с округлением. Для целых чисел округлений нет.

Вероятно, после такого краткого введения в типы чисел у читателя появились новые вопросы. Например, какие еще типы чисел могут использоваться в С++?. Почему тип чисел с дробной частью называется double (двойной)? Есть ли тип single (одинарный)? Ответы на эти вопросы читатель может получить из следующей таблицы:

Название типа

Количество используемых байтов

Интервал значений

Точность цифр

Примечания

short(short int)

2

От -32768 до 32768

-

Названия short и short int эквивалентны

int

4

От -2147483648 до 2147483647

-

long(long int)

4

От -2147483648 до 2147483647

-

Названия long и long int эквивалентны

float

4

Приблизительно от 10-38 до 1038

7

double

8

Приблизительно от 10-308 до 10308

15

long double

10

Приблизительно от 10-432 до 10432

19

Таблица наглядно дает понять, что платой за диапазон и точность является увеличение объема памяти требуемой для хранения чисел. Вообще в С++ существуют другие типы чисел (кстати говоря типа single среди них нет), однако для большинства приложений рассмотренных типов вполне достаточно.

Забегая вперед отметим, что объем памяти занимаемой типом можно получить если воспользоваться инструкцией

sizeof(имя типа); или sizeof(имя переменной);

Например,

cout<< sizeof(int);

выведет на экран число 4, а

short int j;

cout<< sizeof(j);

даст число 2.

Теперь, когда мы разобрались с типами чисел, попробуем ответить на такой вопрос,- чем отличаются числа 2 и 2.0? Читатель сразу ответит – типом. Конечно, ответ формально верный. Но чем по существу отличаются эти числа? Что значит отличаются типом? Думаю, что здесь возникнет заминка. Поэтому подскажу. Число 2.0 рассматривается как приближенное значение числа 2, несмотря на то, что его дробная часть равна нулю. Чуть позже мы увидим, что это может приводить к неожиданным результатам при выполнении вычислений, особенно при выполнении деления.

Еще одним типом является тип bool, сокращение от слова boolean, что означает булевский. Напомним, что английский математик George Bool, именем которого и назван этот тип, первым ввел правила математической логики. Переменные типа bool могут принимать только два значения true и false. Переменная типа bool занимает один байт.

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

Заканчивая изучение базовых типов дадим наконец определение тому о чем мы так долго говорили.

Тип данных это множество значений, которые может принимать переменная, с определением операций, которые над ней можно выполнять.