Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Описание реализаций функций, прототипы которых были описаны ранее




ОПИСАНИЕ ФУНКЦИИ main

*/

 

int main()

{

/*

Пример многострочного комментария. Здесь должен располагаться код основной программы

*/

// Пример однострочного комментария.

return 0;

}

//---------------------------------------------------------------------------------------

/*

*/

 

Следует отметить, что:

1. В языке C++ различаются большие и маленькие буквы.

2. Из всех приведенных разделов обязательным является только описание функции main (заголовка и тела), причем рекомендуется, чтобы функция возвращала значение цело численного типа int (0 - в случае удачного завершения, не 0 - в противном случае). Это производится с помощью оператора return, за которым через пробел идет возвращаемое функцией значение. Это значение может быть задано непосредственно константой или с помощью переменной и должно совпадать с типом возвращаемого значения, описанным в заголовке функции. После выполнения оператора return происходит немедленное прекращение выполнения функции. Если после оператора return не указать значение, то оно будет неопределенным (это делается в том случае если нужно преждевременно прервать выполнение функции, которая имеет тип возвращаемого значения void - пустое множество значение).

Если функция main будет описана с типом возвращаемого значения void, то использование ключевого слова return не обязательно (как и в случае любой другой функции). Однако, тип возвращаемого значения void для функции main при использовании некоторых компиляторов (не Microsoft или Borland) приводит к генерации предупреждения или ошибки. Их поведение таково, потому что в случае «пакетного» запуска программ операционная система не сможет «понять» удачно завершилась программа или нет, т.к. за это отвечает значение, возвращаемое функцией main, а в случае использования типа данных void оно отсутствует.

При необходимости использовать аргументы командной строки у функции main появляется 2 аргумента, и она описывается следующим образом:

int main(int argc, char* argv[])

где argc - содержит количество аргументов командной строки, а массив строк argv - собственно аргументы.

3. Имя любого идентификатора в языке C++ (имена переменных, макроопределений, типов данных, функций, меток) должно начинаться с большой или маленькой буквы латинского алфавита или знака подчеркивания (_) и может содержать цифры в качестве не первого символа. Количество воспринимаемых символов в имени идентификатора в стандарте языка не ограничено, но может ограничиваться в конкретных компиляторах. Например, в некоторых компиляторах - это 31 символ. В Microsoft Visual Studio различаются первые 2048 имени идентификатора, а также допускается использование в любой позиции имени символа $.

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

5. В языке C++ допускается (хотя и не рекомендуется) использование меток (синтаксис их использования подобен Паскалю) и, соответственно, безусловных переходов по ним с помощью оператора goto, но, в отличие от языка Паскаль, нет специальной секции описания меток.

6. В языке C++ константные значения бывают числовые (целочисленные и вещественные), строковые и символьные.

Примеры целочисленных константных значений:

Десятичная система: -10, 20.

Восьмеричная система: 020, -0100. Таким образом, восьмеричные значения начинаются префиксом 0.

Шестнадцатеричная система: -0x20, 0xFFFF. Таким образом, шестнадцатеричные значения начинаются префиксом 0x.

Следует отметить, что по умолчанию целочисленные константные значения считаются значениями типа int. Если необходимо интерпретировать их, как значения типа long (длинное целое), то в конце необходимо дописать букву l или L, например: 2000000000l. Это важно в случаях, когда тип данных int 16-битный.

Примеры вещественных константных значений:

В формате с фиксированной точкой, например: 5.256, -678.2768.

В формате с экспонентой, например: 1.5E-2 (эквивалентно 0.015), -2E2 (эквивалентно -200).

 

Примеры строковых константных значений (литералов):

Строковые константные значения записываются в ”” (двойных кавычках), например: ”This is an example”. В конце строковой константы компилятор автоматически размещает символ с ASCII кодом 0, который на языке C++ означает конец строки. В случае использования символов ”, \ и некоторых других необходимо применять так называемые Escape-последовательности (управляющие последовательности), которые начинаются символом \. Перечень допустимых Escape-последовательностей приведен в табл. 2.

 

Табл. 2. Перечень допустимых Escape-

последовательностей языка C++

Обозначение Назначение
\\ Обратный слеш.
\” Двойная кавычка.
\’ Одинарная кавычка.
\a Управляющий символ звукового сигнала (воспроизводится через спикер). Его ASCII код 7.
\b Управляющий символ, генерируемый при нажатии клавиши Backspace. Приводит к возврату курсора на одну позицию влево, но при этом не стирается символ слева от курсора. Его ASCII код 8.
\f Управляющий символ, используемый при печати на принтере для перехода к новой странице. Его ASCII код 12.
\n Управляющий символ, соответствующий новой строке (переходу на новую строку). Его ASCII код 13.
\r Управляющий символ, соответствующий возврату каретки при переходе на новую строку. Его ASCII код 10.
\t Управляющий символ, соответствующий горизонтальной табуляции (нажатие на клавишу Tab). Его ASCII код 9.
\v Управляющий символ, соответствующий горизонтальной табуляции. Используется при выводе на принтер.
\ooo Символ, ASCII код которого задан восьмеричным значением.
\xhh Символ, ASCII код которого задан шестнадцатеричным значением. Также можно задавать символы при использовании Unicode (2-байтные коды символов).

Примеры символьных константных значений:

Символьные константные значения записываются в ’’ (одинарных кавычках или апострофах), например: ’f’. Количество символов в такой константе не может превышать одного символа и при ее задании также можно использовать Escape-последовательности.

 

7. В языке C++, в отличие от языка Паскаль, не допускается в теле функции описывать другую функцию (заголовок + тело), но можно описать только прототип функции. Других ограничений на используемые в теле функции секции не существует.

 

Арифметические типы данных языка C++.

Рассмотрим арифметические типы данных языка C++, которые представлены в табл. 3:

Табл. 3. Перечень арифметических типов

данных языка C++

Характеристики типов     Название типа в языке C++
Класс Байт Дес. знаков Диапазон  
Целые без знака   2-3 0,,28-1 unsigned char unsigned __int8
  4-5 0,,216-1 unsigned short int unsigned __int16
  9-10 0,,232-1 unsigned int unsigned long unsigned __int32
  19-20 0,,264-1 unsigned long long unsigned __int64
Целые знаковые   2-3 -27…27-1 char __int8
  4-5 -215…215-1 short int __int16
  9-10 -231…231-1 int long int __int32
  19-20 -263…263-1 long long __int64
Действительные   7-8 3.4е-38,,,3,4е38 float
  15-16 1,7е-308,,,1,7е308 double long double

Следует отметить, что:

1. Размер типа данных int зависит от размеров машинного слова, от используемой платформы и компилятора, поэтому в некоторых случаях может быть 2 байта (Например, в Borland C++ 3.1).

2. Следует обратить внимание, что при использовании типов short int, unsigned int, long int ключевое слово int использовать необязательно.

3. В некоторых компиляторах тип данных long double не реализован.

4. При использовании целочисленных типов данных для указания конкретного типа могут быть использованы следующие ключевые слова:

- unsigned - означает беззнаковый целочисленный тип.

- signed - означает знаковый целочисленный тип. Используется по умолчанию, если не указать ни unsigned, ни signed.

- short - означает короткое целое.

- long - означает длинное целое (или вещественное).

5. Тип данных long long в среде Microsoft Visual Studio 6.0 использовать невозможно, хотя, например, в среде Microsoft Visual Studio 2005 применение такого типа допустимо.

6. Типы данных __int8, __int16, __int32, __int64 (знаковые и беззнаковые) характерны только для компиляторов Microsoft и стандартом ANSI не предусмотрены.

7. Для целочисленных знаковых типов данных старший бит является знаковым: если он равен 1, то число считается отрицательным (представляется в дополнительном коде при записи в двоичной системе счисления), а если он равен 0, то положительным.

8. Существует неявное и явное преобразование типов. Неявное работает в ряде случаев автоматически (будет рассмотрено ниже). Явное предполагает конструкцию вида: новый_тип_данных(значение) или (новый_тип_данных)(значение), которая может использоваться, например, в правой части оператора присваивания, в операциях сравнения, и возможно для совместимых типов данных:

- Знаковый целочисленный тип данных можно преобразовать к беззнаковому целочисленному типу данных и наоборот. При этом старший бит числа будет интерпретироваться либо как знаковый (следует учитывать использование дополнительного кода для представления целых отрицательных чисел), либо как часть числа.

- В случае преобразования к типу данных с меньшей размерности будет потеряна старшая (наиболее значимая часть значения). Например, при приведении значения 4-байтного целочисленного типа данных 65537 к беззнаковому целочисленному типу данных получаем 1 из-за потери 2-ух старших байт.

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

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

 

Краткий перечень операций и функций языка C++.

Рассмотрим арифметические операции (операторы) языка C++ (табл. 4):

 

Табл. 4. Перечень арифметических операций

языка C++

Назначение Обозначение Кол-во операндов Применимость для типов данных
Целых Действительных
Сложение +   Да Да
Обозначение положительного числа + или отсутствие знака   Да Да
Вычитание -   Да Да
Обозначение отрицательного числа   -     Да   Да
Умножение *   Да Да
Деление /   Да Да
Взятие остатка от деления %   Да Нет
Увеличение на 1 ++   Да Да
Уменьшение на 1 --   Да Да

Следует отметить, что:

1. Тип данных результата деления (/) будет зависеть от типа данных операндов: если хотя бы один из операндов вещественного типа, то результат также будет вещественным, в противном случае - результат будет целочисленным (при помещении результата в вещественную переменную в этом случае дробная часть будет утеряна).

2. Операторы инкремента (++) и декремента (--) могут быть в префиксном (++ имя_перем; или -- имя_перем;) и постфиксном (имя_перем++; или имя_перем--;) виде. Различия заключаются в том, что при использовании префиксной формы сначала происходит изменение значения переменной, а потом - его дальнейшее использование; при использовании постфиксной формы сначала используется значение переменной, а потом происходит изменение его значения. Это различие существенно в сложных выражениях.

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

- Операнды типа float преобразуются к типу double.

- Если один операнд long double, то второй преобразуется к этому же типу.

- Если один операнд double, то второй также преобразуется к типу double.

- Любые операнды типа char и short преобразуются к типу int.

- Любые операнды unsigned char или unsigned short преобразуются к типу unsigned int.

- Если один операнд типа unsigned long или long, то второй также преобразуется к типу unsigned long или long.

- Если один операнд типа unsigned int, то второй операнд преобразуется к этому же типу.

 

Рассмотрим операции (операторы) сравнения языка C++ (табл. 5):

Табл. 5. Перечень операций сравнения

языка C++

Назначение Обозначение Кол-во операндов Применимость для типов данных
Целых Действительных
Равно ==   Да Да
Не Равно !=   Да Да
Меньше <   Да Да
Меньше либо равно <=   Да Да
Больше >   Да Да
Больше либо равно >=   Да Да

 

Рассмотрим побитовые и логические операции (операторы) языка C++ (табл. 6):

 

Табл. 6. Перечень побитовых операций

языка C++

Назначение Обозначение Кол-во операндов Применимость для типов данных
Целых Действительных
Двоичное дополнение ~   Да Нет
Сдвиг на указанное количество двоичных разрядов влево <<   Да Нет
Сдвиг на указанное количество двоичных разрядов вправо   >>     Да   Нет
Побитовое «И» &   Да Нет
Побитовое «ИЛИ» |   Да Нет
Побитовое исключающее «ИЛИ» ^   Да Нет

 

В языке C++ существует 3 логических операции, которые применяются для построения логических выражений: && (логическое «и»), || (логическое или)и! (отрицание). Причем && и || – бинарные операции (имеют 2 аргумента), а! – унарная (1 аргумент).

Результатом выполнения логической операции будет одно из двух константных значений (хотя правильно называть это ключевыми словами, что, в последствии, и будем делать): false (ложь, числовое значение 0)и true (истина, числовое значение НЕ 0). Эти ключевые слова могут также использоваться как 2 возможных значения переменных логического типа данных bool. Это встроенный тип данных, размер которого 1 байт.

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

 

Табл. 7. Таблицы истиности логических

операций языка C++.

Значения аргументов Значение результата выполнения логической операции   Значения аргумента Значение результата выполнения логической операции
1-ый 2-ой && или & || или | ^     !
               
               
               
               

Операции << (Сдвиг на указанное количество двоичных разрядов влево) и >> (Сдвиг на указанное количество двоичных разрядов вправо) заменяют собой умножение и деление нацело, соответственно, на число, представляющее собой степень двойки. Например: 10 << 2 == 40, а 10 >> 2 == 2. Для того, чтобы понять принцип их работы необходимо записать число 10 в двоичной системе счисления и произвести сдвиг этого числа на указанное число двоичных разрядов влево или вправо (Табл. 8).

 

Табл. 8. Принцип работы операций сдвига

Число Операция Кол-во двоичн. разр. Результат
10 = <<   40 =
10 = >>   2 =

 

Следует обратить внимание на тот факт, что:

1. При работе с переменными знаковых типов данных операция >> будет расширять знаковый бит, например -1 >> 2 == -1.

2. Операции >> и << выполняются существенно быстрее деления или умножения даже на современных процессорах.

 

Применение операции двоичного дополнения (~) приводит к тому, что в двоичной записи числа значение каждого бита инвертируется. Например, ~10 == 65525 (Если интерпретировать 10 как 2-ухбайтное целое число).

 

В языке C++ существует еще две очень полезные унарные операции (операторов), которые приведены в табл. 9.

 

Табл. 9. Унарные операции взятия адреса и

получения размера в языке C++

Название Обозна чение Применимость для типов данных Описание
Взятие адреса & Переменные любых типов данных В результате применения формируется номер ячейки памяти, в которой хранится значение переменной. Пример: &a где a - имя переменной.
Вычисление размера объекта в байтах sizeof Применим для типов данных и переменных. В результате применения вычисляется размер операнда в байтах. Если операнд представляет собой название типа данных, то он должен быть взят в круглые скобки, в противном случае это необязательно. Этот оператор нельзя применять: 1. К типу данных void. 2. К именам функций. 3. К битовым полям. 4. К внешним массивам. Пример 1: sizeof (int) Результат = 4. Пример 2: sizeof a Результат зависит от типа данных переменной a.

 

Среди математических функций хотелось бы выделить следующие:

1. abs – имеет один аргумент числового типа, возвращает значение по модулю.

2. sqrt – имеет один аргумент действительного типа (double), возвращает корень квадратный из значения аргумента тоже действительного типа (double).

В качестве аргументов и результата любой математической функции языка C++, которые описаны с использованием типа данных double, можно использовать переменные ЛЮБОГО действительного типа данных.

Следует отметить, что для использования вышеперечисленных математических функций необходимо подключить файл заголовков math.h, т.е. программа должна содержать строку #include <math.h>. При использовании некоторых компиляторов при осуществлении линковки необходимо убедиться в том, что библиотека math.lib присутствует в списке библиотек, используемых линковщиком.

Краткие сведения об операторах языка C++.

Язык C++ содержит такие группы операторов: простые и структурированные. Структурированные операторы в свою очередь бывают следующих видов: условный оператор (if), операторы цикла (цикл for, цикл с предусловием – while, цикл с постусловием – do…while), оператор множественного ветвления (switch).

Также следует обратить внимание на использование символа;(точка с запятой). Практически каждый оператор на языке C++ заканчивается точкой с запятой. Однако есть ряд исключений, когда точка с запятой никогда не ставится:

1. После ключевых слов: do, while, for, if, switch, case, default, class, struct, union, typedef, template, enum, после названий типов данных.

2. После заголовка функции, если за ним сразу следует ее тело.

3. После { ставить НЕ ОБЯЗАТЕЛЬНО (как правило, этого не делают).

4. После } ставить НЕ ОБЯЗАТЕЛЬНО (как правило, этого не делают). Единственное исключение - точку с запятой ВСЕГДА нужно ставить в конце описания типов данных class, struct и union.

 

Рассмотрим некоторые операторы языка C++.

1. Пустой оператор (;). Не выполняет никаких действий.

2. Оператор присваивания (=). Этот простой оператор тому объекту (переменной), который стоит в левой части, присваивает то выражение, которое стоит в правой части. Например:

A = 2 * B + C + D / 4 – E % 2;

В этом примере переменной A присваивается выражение, которое включает ряд математических действий, причем B, C, D, E могут быть переменными и константами, в то время как A константой быть НЕ МОЖЕТ.

Существуют составные операторы присваивания, объединяющие оператор присваивания с каким-либо арифметическим или побитовым оператором. Их перечень приведен в табл. 10.

 

Табл. 10. Перечень составных операторов

присваивания языка C++

Назначение Обозначение Кол-во операндов Применимость для типов данных
Целых Действительных
Значение переменной слева сложить со значением справа и результат записать в переменную слева +=   Да Да
Из значения переменной слева вычесть значение справа и результат записать в переменную слева -=   Да Да
Значение переменной слева умножить на значение справа и результат записать в переменную слева *=   Да Да
Значение переменной слева разделить на значение справа и результат записать в переменную слева /=   Да Да
Найти остаток от деления значения переменной слева на значение справа и результат записать в переменную слева %=   Да Нет
Найти результат побитового «И» значения переменной слева и значения справа и результат записать в переменную слева &=   Да Нет
Найти результат побитового «ИЛИ» значения переменной слева и значения справа и результат записать в переменную слева |=   Да Нет
Найти результат побитового исключающего «ИЛИ» значения переменной слева и значения справа и результат записать в переменную слева ^=   Да Нет
Найти результат сдвига влево значения переменной слева на количество двоичных разрядов, заданных значением справа, и результат записать в переменную слева <<=   Да Нет
Найти результат сдвига вправо значения переменной слева на количество двоичных разрядов, заданных значением справа, и результат записать в переменную слева >>=   Да Нет

 

 

3. { и } - являются операторными скобками, т.е. с { начинается какая-то группа операторов, которая рассматривается как некоторый единый блок, а } эта группа операторов завершается.

4. Условный оператор (if). Это структурированной оператор, с помощью которого можно осуществлять ветвления в программе на основании выполнения или невыполнения какого-то условия. В общем виде этот оператор выглядит следующим образом:

if (условие)

Действие1;




Поделиться с друзьями:


Дата добавления: 2017-01-14; Просмотров: 816; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.