Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Операторы, составляющие тело функции

Читайте также:
  1. HLA - система; классы антигенов, биологические функции, практическое значение HLA-типирования.
  2. II закон термодинамики. Характеристические функции системы. Уравнение энергетического баланса системы, его анализ.
  3. IV.Функции герундия в предложении.
  4. Python. Модуль math. Математические функции
  5. Агрегатные функции. Предложения GROUP BY, HAVING.
  6. Аккумулирующие сосуды и сосуды возврата крови к сердцу. Их функции. Временное и длительное депонирование крови.
  7. Алгоритм поиска подстроки Кнута-Морриса-Пратта (на основе префикс-функции)

}

 

Как правило, функция используется для вычисления какого-либо значения, по­этому перед именем функции указывается его тип.

Сведения:

- если функция не должна возвращать значение, указывается тип void;

- тело функции является блоком и, следовательно, заключается в фигурные скобки;

- функции не могут быть вложенными;

- каждый оператор заканчивается точкой с запятой (кроме составного опера­тора).

Каждая программа должна содержать функцию с именем main. Эта функция является точкой входа, с которой начинается выполнение программы. Обычно в main() отсутствуют параметры. Тело функции всегда заключается в фигурные скобки. Ключевое слово intиспользуется для обозначения того факта, что функция возвращает некоторое целочисленное значение, которое затем будет использовано операционной системой для определения факта завершения программы с ошибкой. Если ошибок не было, то функция main должна возвратить значение, равное 0.

Листинг 1.2

// Приложение с использованием стандартной

// библиотеки ввода-вывода

#include “stdafx.h”

#include <stdio.h>

using namespace std;

 

int _tmain(int argc, _TCHAR* argv[])

{

printf(“\tHello world!\n”);

return 0;

}

 

Листинг 1.3

 

// Приложение с использованием потоковой

// библиотеки ввода-вывода

#include “stdafx.h”

#include <iostream>

using namespace std;

 

int _tmain(int argc, _TCHAR* argv[])

 

{

cout << ‘\t’ << “Hello world” << ‘\n’;

// можно и так: cout << “\tHello world!\n”;

return 0;

}

 

Эта программа выводит на экран фразу «Hello world!». Кроме переменных, cout и printf воспринимают еще и управляющие символы, такие как \n - символ перевода строки. Все, что встречается после символов \n, будет показано с начала следующей строки. В приведенном примере кроме \n присутствует еще и символ табуляции \t. Он поводит к тому, что фраза «Hello world!» окажется не в начале строки, а с некоторым отступом вправо.

Последовательности символов, начинающиеся с обратной косой черты, называ­ют управляющими, или escape-последовательностями. Управляющая последовательность интерпретируется как одиночный символ. Если непосредственно за обратной косой чертой следует символ, не предусмотренный таблице, результат интерпретации не определен. Если в последовательности цифр встречается недопустимая, она считается кон­цом цифрового кода.

Управляющие последовательности могут использоваться и в строковых констан­тах, называемых иначе строковыми литералами. Например, если внутри строки требуется записать кавычку, ее предваряют косой чертой, по которой компиля­тор отличает ее от кавычки, ограничивающей строку:

"Открытое Акционерное Общество \"Волна\""

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

Управляющие символы (табл. 1.2) заключаются в одинарные кавычки и начинаются с обратной косой черты (обратного слеша). Не будь ее, объект cout и функция printf воспринял бы запись 'n' как строчную латинскую букву «n», а 't' - как латинскую букву «t» и т.д. Поэтому фразу «Hello world!» можно вывести на экран «по буквам».

 

Таблица 1.2 -Управляющие символы

Название Обозначение
Символ новой строки \n
Горизонтальная табуляция \t
Вертикальная табуляция \v
Возврат на шаг \b
Возврат каретки \r
Обратная слэш \\
Апостроф \’
Двойная кавычка \”
Нулевой символ \0
Звуковой сигнал \a
Перевод страницы (формата) \f
Восьмеричный код символа \0ddd
Шестнадцатеричный код символа \0xddd

Листинг 1.4

#include “stdafx.h”

#include <iostream>

using namespace std;

 

int _tmain(int argc, _TCHAR* argv[])

{

cout << ‘\t’ << ‘H’ << ‘e’ << ‘l’ << ‘l’ << ‘o’

<< ‘\x20’ << ‘w’ << ‘o’ << ‘r’ << ‘l’ << ‘d’

<< ‘!’ << ‘\n’;

return 0

}

 

Одна из особенностей языка C++ - так называемая перегрузка дает необязательным использование указателей формата. В отличие от функцииprintf(), которая требует обязательное указание формата, coutпри передаче параметров сам определяет формат на основании типа получаемых данных. Этот процесс называется перегрузкой. Аналогично оператору потокового вывода cout работает оператор потокового ввода cin:

cin >> t;

где t - переменная, значение которой необходимо ввести пользователем.

Программа, составленная на языке C++, может содержать одну или больше функций. Многие функции, которые могут понадобиться, уже написаны, откомпилированы и помещены в библиотеки, так что достаточно просто указать компилятору использовать одну из стандартных функций. Необходи­мость написания собственной функции возникает только в том случае, если подходящей нет в библиотеках.

В программах на C++, использующих консоль, должна присутствовать функция main(), в отличие от приложений Windows, где точкой входа является функция WinMain(). Круглые скобки являются частью имени функции и ставить их надо обязательно, так как именно они указывают компилятору, что имеется в виду функция, а не просто английское слово main. В противном случае компиляция не будет завершена. Фактически каждая функция включает в свое имя круглые скобки, но в большинстве случаев в них содержится некая информация. В дальнейшем в тексте книги, ссылаясь на функцию, мы всегда будем ставить после ее имени круглые скобки.

Следом за main() вводятся инструкции. Инструкции могут быть представлены в виде стандартных команд и имен функций, содержащихся в библиотеках или написанных вами самостоятельно. Прямая, или открывающая фигурная скобка ({) помещается перед первой инструкцией, а обратная, или закрывающая фигурная скобка (}) следует за последней инструкцией.

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

При запуске программы компьютер начинает ее выполнение с первой инструк­ции функции main().

Функции консольного ввода-вывода clrscr(), getch(), cputs(). Поскольку разрабатываемые в данном методическом указании программы будут совместимы с MS-DOS, то рассмотрим функции консольного ввода-вывода.

Все прототипы этих функций находятся в файле conio.h. Приведем краткое назначение каждой из этих функций.

Функция clrscr() предназначена для очистки экрана.

Функция getch() предназначена для ввода одного символа с клавиатуры. Она ожидает нажатие клавиши и не отображает введенный символ на экран. Часто эту функцию используют для задержки окна вывода.

Функция puts() выводит на экран текстовую константу, заключенную в кавычки, в конце строки в обязательном порядке печатаются символы ‘\r’ и ‘\n’, иными словами при использовании данной функции курсор автоматически переводится на новую строку. В отличие от предыдущих двух функций, данная функция входит в библиотеку стандартного ввода-вывода, и для ее использования необходимо подключить заголовочный файл stdio.h. Аналогом данной функции в библиотеке консольного ввода-вывода служит функция cputs().

Ниже приведен листинг программа на C++, которая выводит на экран монитора фразу «Hello world!» с помощью описанных функций.

Листинг 1.5

#include “stdafx.h”

#include <iostream>

using namespace std;

 

int _tmain(int argc, _TCHAR* argv[])

 

{

puts(“Hello world!”);

cputs(“Hello world!”);

}

 

Кавычки, отмечающие слово внутри круглых скобок в функции puts() не выводятся на экран. В языке C++ они означают, что на экран следует вывести заключенную в них последовательность символов, а не константу или переменную.

Точка с запятой в языке C/C++ является разделителем и отмечает конец инструк­ции. Разделитель показывает компилятору что данная инструкция завершена и дальше начинается следующая инструкция или заканчивается программа. Точку с запятой необходимо ставить после каждой отдельной инструкции, так, как это показано в листинге 1.5. Вышесказанное не означает, что точку с запятой надо ставить в конце каждой строки. Иногда инструкция занимает больше одной строки и в этом случае точку с запятой надо ставить только один раз, отмечая конец команды.

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

int main(){puts("Hello world!"); return 0}

и компилятор обработает ее так же, как и предыдущую. Но для того, чтобы сделать программу более читабельной, принято следовать определенным прави­лам:

- помещать функцию main() на отдельной строке;

- помещать фигурные скобки на отдельных строках;

- создавать в тексте программы отступы с помощью табуляции.

Когда ваша программа станет достаточно длинной, вы увидите, что с помощью отступов можно сделать более понятной структуру программы и выделить логичес­кие единицы.

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

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

Добавление комментариев сделает любую программу более легкой для понимания. Комментарий - это сообщение для того, кто читает исходный код программы. Комментарии могут помещаться в любом месте программы. Компилятор и компоновщик игнорируют комментарии, так что их содержимое не включается в объектный и исполняемый файлы.

Тому, кто только начинает программировать, введение комментариев не нужной роскошью, ведь он и так тратит массу времени на создание программы. Действительно, небольшой, простой, легко тестируемой программе, ее из небольшого числа строк, комментарии не нужны. Однако, читая программу, вы будете благодарны ее автору за любые пояснения, пусть программа не так уж и сложна.

Комментарий либо начинается с двух символов «прямая косая черта» (//) и за­канчивается символом перехода на новую строку, либо заключается между сим­волами-скобками /* и */. Внутри комментария можно использовать любые до­пустимые на данном компьютере символы, а не только символы из алфавита языка C++, поскольку компилятор комментарии игнорирует. Вложенные ком­ментарии-скобки стандартом не допускаются, хотя в некоторых компиляторах разрешены.

 

Листинг 1.6

 

/*Эта программа выводит сообщение на экран*/

#include “stdafx.h”

#include <iostream>

using namespace std;

 

int _tmain(int argc, _TCHAR* argv[])

{

puts("Hello world!");

return 0;

}

 

Символы /* указывают начало строки комментария, а символы */ отмечают ее конец. Все, что помещено между ними, C++ игнорирует. Как правило, в начале текста программы программисты помещают строку комментария чтобы пояснить цель ее создания. Внутри текста программы помещаются комментарии, поясняющие употребление отдельных инструкций или последовательность ло­гических шагов. Такие комментарии обычно помещают после разделителя, то есть точки с запятой:

 

Листинг 1.7

 

/*Эта программа выводит сообщение на экран */

#include “stdafx.h”

#include <iostream>

using namespace std;

 

int _tmain(int argc, _TCHAR* argv[])

 

{

/*На экран выводится сообщение "ОК"*/

puts("Hello world");

return 0; /*Возврат в операционную систему*/

}

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

Весьма распространенным недосмотром, который часто допускают начинающие программисты, является то, что они забывают ставить символы */ в конце комментария, и в результате получают сообщение об ошибке компилятора, в C++ использование комментария несколько облегчается за счет введения пары символов //, указывающих начало строки комментария. В этом с концом комментария считается конец строки, так что нет необходимости отмечать его специальным символом:

 

Листинг 1.8

 

//Эта программа выводит сообщение на экран

#include “stdafx.h”

#include <iostream>

using namespace std;

 

int _tmain(int argc, _TCHAR* argv[])

 

{

puts("Hello world!");

return 0; //Возврат в операционную систему

}

 

Однако если комментарий занимает больше одной строки, каждая строка должна начинаться с символов //.

Литералы. Идентификаторы, константы, переменные, ключевые слова. Литералом называется любой элемент данных, который вводится непосредственно в инструкции языка C++. Литералом может являться любое число, символ или строка, которые вводятся как начальные значения переменной. Например: cout=8, где число 8 являться литералом.

Каждой программе для работы необходима информация - данные. Данные вводятся в компьютер, он обрабатывает их, следуя нашим инструкциям, затем выдает результат.

Идентификатор - это имя программного объекта. В идентификаторе могут ис­пользоваться латинские буквы, цифры и знак подчеркивания. Прописные и строчные буквы различаются, например, sysop, SySoP и SYSOP - три различных имени. Первым символом идентификатора может быть буква или знак подчерки­вания, но не цифра. Пробелы внутри имен не допускаются.

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

- идентификатор не должен совпадать с ключевыми словами именами используемых стандартных объектов языка;

- не рекомендуется начинать идентификаторы с символа подчеркивания, по­скольку они могут совпасть с именами системных функций или переменных, и, кроме того, это снижает мобильность программы;

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

Константами называют неизменяемые величины. Различаются целые, вещест­венные, символьные и строковые константы. Компилятор, выделив константу в качестве лексемы, относит ее к одному из типов по ее внешнему виду. Форматы констант, соответствующие каждому типу, приведены в таблице 1.3.

Таблица 1.3 - Форматы констант, соответствующие каждому типу

Константа Формат Примеры
Целая Десятичный: последовательность десятичных цифр, начинающаяся не с нуля, если это не число нуль 8, 0, 199226
Восьмеричный: нуль, за которым следуют восьмеричные цифры (0,1,2,3,4,5,6,7) 01, 020, 07155
Шестнадцатеричный: 0х или 0Х, за которым следуют шестнадцатеричные цифры (0,l,2,3,4,5,6,7,8,9,A,B,C,D,E,F) 0хА, 0x1B8, 0X00FF
Вещественная Десятичный: [цифры].[цифры] 5.7,.001, 35.
Экспоненциальный: [цифры][.][цифры]{Е|е}[+-][ЦиФры] 0.2Е6,.lle-3, 5E10
Символьная Один или два символа, заключенных в апострофы ‘А’, ‘ю’, ‘*’, ‘db’, ‘\0’, ‘\n’, ‘\012’, ‘\x07\x07’
Строковая Последовательность символов, заключенная в кавычки “Здесь был Vasia”, “\tЗначение r=\0xF5\n”

 

Если требуется сформировать отрицательную целую или вещественную кон­станту, то перед константой ставится знак унарной операции изменения знака (-), например: -218, -022, -0хЗС, -4.8, -0.1е4.

Вещественная константа в экспоненциальном формате представляется в виде ман­тиссы и порядка. Мантисса записывается слева от знака экспоненты (Е или е), по­рядок - справа от знака. Значение константы определяется как произведение мантиссы и возведенного в указанную в порядке степень числа 10. Обратите вни­мание, что пробелы внутри числа не допускаются, а для отделения целой части от дробной используется не запятая, а точка.

Символьные константы, состоящие из одного символа, занимают в памяти один байт и имеют стандартный тип char. Двухсимвольные константы занимают два байта и имеют тип int, при этом первый символ размещается в байте с меньшим адресом.

Символ обратной косой черты используется для представления:

- кодов, не имеющих графического изображения (например, \a - звуковой сиг­нал, \n - перевод курсора в начало следующей строки);

- символов апострофа ('), обратной косой черты (\), знака вопроса (?) и ка­вычки (");

- любого символа с помощью его шестнадцатеричного или восьмеричного кода, например, \073, \0xF5. Числовое значение должно находиться в диапазоне от 0 до 255.

Определить константу - это, значит, сообщить компилятору C ее имя, тип и значение. Для определения константы в языке C перед функцией main() часто помещают директиву #define для объявления констант и макроопределений. Однако использование этой директивы сопряжено с появлением трудно диагностируемых ошибок, лучшей альтернативой для констант является использование переменных с модификатором const. Такие переменные носят название константных переменных и объявляются следующий образом:

const <Тип> <Имя_Переменной> = <Значение>;

Наличие инициализатора <Значение> при объявлении константной переменной обязательно. Значение константной переменной не может быть изменено в процессе работы программы. Например:

const double pi = 3.1415926; // вещественная кон.

const int size = 400; // целая константа

const char new_line = ‘\n’; // символьная константа

const char topic[] = “Тема”; // строковая константа

В любой программе требуется производить вычисления. Для вычисления значений используются выражения, которые состоят из операндов, знаков операций и скобок. Операнды задают данные для вычислений. Операции задают действия, которые необходимо выполнить. Каждый операнд является, в свою очередь, выражением или одним из его частных случаев, например, константой или переменной. Операции выполняются в соответствии с приоритетами. Для изменения порядка выполнения операций используются круглые скобки. Рассмотрим составные части выражений и правила их вычисления.

Переменная - это именованная область памяти, в которой хранятся данные определенного типа. У переменной есть имя и значение. Имя служит для обращения к области памяти, в которой хранится значение. Во время выполнения про­граммы значение переменной можно изменять. Перед использованием любая переменная должна быть описана. Пример описания целой переменной с именем а и вещественной переменной х:

 

int a; double x;

 

Общий вид оператора описания переменных:

 

[класс памяти] [const|volatile] тип имя[инициализатор];

 

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

- большие и малые буквы латинского алфавита,

- арабские цифры,

- символ подчеркивания ­«_».

Компилятор C++ рассматривает одну и ту же большую и малую буквы как разные символы. Например, переменные dx_1, Dx_1, dX_1, DX_1 имеют различные имена и являются, соответственно, разными литералами.

Первым символом в имени должна стоять буква или знак подчеркивания. Например: Num, _min, max_, sum_7, и так далее. Тем не менее, не рекомендуется использовать знак подчеркивания в качестве первого символа литерала, поскольку таковые в основном используются для системных нужд и определяют литералы собственно компилятора или операционной системы, например _UNICODE, литерал, используемый в директивах условной компиляции, если программа написана с использованием кодировки Unicode.

Определить переменную - это, значит, сообщить ее имя и тип компилятору C++. Объявление переменной можно совместить с ее инициализацией. В этом случае объявлений переменной записывают следующим способом:

 

<Тип> <Имя_Переменной> = <Начальное_значение>;

 

Знак «=» обозначает инструкцию присваивания. Она предназначена для изменения значения переменных

<имя>=<выражение>;

Разновидность операции присваивания

<имя>=<имя> <знак операции> <выражение>;

Имя переменной не должно совпадать с ключевыми словами языка C++, перечень которых, приведен в табл. 1.4.

Ключевые слова - это зарезервированные идентификаторы, которые имеют спе­циальное значение для компилятора. Их можно использовать только в том смыс­ле, в котором они определены.

Таблица 1.4 - Ключевые слова стандарта языка C++

asm else new this
auto enum operator throw
bool explicit private true
break export protected try
case extern public typedef
catch false register typeid
char float reinterpret_cast typename
class for return union
const friend short unsigned
const_cast goto signed using
continue if sizeof virtual
default int static void
delete inline static_cast volatile
do long struct wchar_t
double mutable switch while
dynamic_cast namespace template  

 

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

Время жизни может быть постоянным (в течение выполнения программы) и вре­менным (в течение выполнения блока).

Областью видимости идентификатора называется часть текста программы, из которой допустим обычный доступ к связанной с идентификатором областью па­мяти. Чаще всего область видимости совпадает с областью действия. Исключе­нием является ситуация, когда во вложенном блоке описана переменная с таким же именем. В этом случае внешняя переменная во вложенном блоке невидима, хотя он и входит в ее область действия. Тем не менее, к этой переменной, если она глобальная, можно обратиться, используя операцию доступа к области видимо­сти::.

Для задания класса памяти используются следующие спецификаторы:

auto - автоматическая переменная. Память под нее выделяется в стеке и при не­обходимости инициализируется каждый раз при выполнении оператора, содер­жащего ее определение. Освобождение памяти происходит при выходе из блока, в котором описана переменная. Время ее жизни - с момента описания до конца блока. Для глобальных переменных этот спецификатор не используется, а для локальных он принимается по умолчанию, поэтому задавать его явным образом большого смысла не имеет.

extern - означает, что переменная определяется в другом месте программы (в другом файле или дальше по тексту). Используется для создания переменных, доступных во всех модулях программы, в которых они объявлены.

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

register - аналогично auto, но память выделяется по возможности в регистрах процессора. Если такой возможности у компилятора нет, переменные обрабаты­ваются как auto.

 

int a; // 1 глобальная переменная а

int main()

{

int b; // 2 локальная переменная b

extern int x; /* 3 переменная х определена в другом месте */

static int с; /* 4 локальная статическая переменная с */

а = 1; // 5 присваивание глобальной переменной

int a; // 6 локальная переменная а

а = 2; // 7 присваивание локальной переменной

::а = 3; // 8 присваивание глобальной переменной

return 0;

}

int x = 4; // 9 определение и инициализация х

 

В этом примере глобальная переменная a определена вне всех блоков. Память под нее выделяется в сегменте данных в начале работы программы, областью действия является вся программа. Область видимости - вся программа, кроме строк 6-8, так как в первой из них определяется локальная переменная с тем же именем, область действия которой начинается с точки ее описания и заканчивается при выходе из блока. Переменные b и с - локальные, область их видимо­сти - блок, но время жизни различно: память под b выделяется в стеке при входе в блок и освобождается при выходе из него, а переменная с располагается в сег­менте данных и существует все время, пока работает программа.

Если при определении начальное значение переменных явным образом не зада­ется, компилятор присваивает глобальным и статическим переменным нулевое значение соответствующего типа. Автоматические переменные не инициализи­руются.

Имя переменной должно быть уникальным в своей области действия (например, в одном блоке не может быть двух переменных с одинаковыми именами).

Описание переменной может выполняться в форме объявления или определения. Объявление информирует компилятор о типе переменной и классе памяти, а оп­ределение содержит, кроме этого, указание компилятору выделить память в со­ответствии с типом переменной. В C++ большинство объявлений являются од­новременно и определениями. В приведенном выше примере только описание 3 является объявлением, но не определением.

Переменная может быть объявлена многократно, но определена только в одном месте программы, поскольку объявление просто описывает свойства переменной, а определение связывает ее с конкретной областью памяти.

Простые типы данных. Прежде чем использовать в программе на языке C++ какую-либо переменную, ее необходимо описать. Переменные в языке C++ могут быть описаны как в теле функции (между { }), так и вне ее. При описании переменной внутри функции область ее действия ограничена функцией. При описании переменной указать тип переменной и ее имя (идентификатор), для того, чтобы C++ должен зарезервировать достаточное количество памяти для хранения введенной информации. Разные типы данных занимают не одинаковый объем памяти. Не все функции языка C могут работать с данными любого типа.

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

Тип данных определяет:

- внутреннее представление данных в памяти компьютера;

- множество значений, которые могут принимать величины тина;

- операции и функции, которые можно применять к величинам типа.

Рассмотрим наиболее часто употребляемые простые типы языка C++:

- целые числа со знаком int, long, short,

- целые беззнаковые константы unsigned,

- символы, занимающие один байт char и два байта wchar_t,

- числа с плавающей точкой float, double.

Тип char определяет целочисленные переменные, занимающие один байт, в диапазоне от -128 до 127. Этот тип, как правило, применяется для символьных переменных (числовым значением является код символа).

Тип wchar_t определяет целочисленные переменные, занимающие два байта, в диапазоне от -32768 до 32767. Этот тип, как правило, применяется для символьных переменных в кодировке Unicode (числовым значением является код символа в кодировке Unicode).

Тип short определяет целые переменные, занимающие два байта, в диапазоне от -32768 до 32767. Этот тип используется для небольших целых чисел, в основном для управления циклами.

Тип long определяет целочисленные переменные, занимающие четыре байта, в диапазоне от -2147483647 до 2147483646.

В зависимости от компилятора и операционной системы тип int может быть эквивалентен либо типу short, либо типу long. Для компилятора Borland C++ Builder тип int эквивалентен типу long.

Беззнаковые типы unsigned определяяют беззнаковые целые числа. Это ключевое слово используется с другими типами данных для определения этого типа как беззнакового, т.е. только положительные числа и ноль. К беззнаковым типам относятся unsigned char, unsigned wchar_t, unsigned short, unsigned long, unsigned int. Тип unsigned эквивалентен типу unsigned int.

Тип float определяет переменные, занимающие четыре байта, для чисел с плавающей точкой в диапазоне от до

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

Таблица 1.5 - Диапазоны значений простых типов данных на IBM PC

Тип Диапазон значений Размер (байт)
bool true и false  
signed char -128... 127  
unsigned char 0... 255  
signed short int -32 768... 32 767  
unsigned short int 0... 65 535  
signed long int -2 147 483 648... 2 147 483 647  
unsigned long int 0... 4 294 967 295  
float 3.4e-38... 3.4c+38  
double 1.7e-308... 1.7e+308  
long double 3.4c-4932... 3.4e+4932  

 

При описании данных достаточно ввести тип, за которым должен следовать список имен переменных. Например:

 

int tdw, _sek, g1o; char elen, ogi;

long kid, g2o; char isi ='j';

float z2_c; unsigned rib = 6;

double pi = 3.14159;

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

Все приведенные в таблице 1.6 операции, кроме условной «?:», sizeof, селектора членов класса «.», доступа к области видимости «::» и оператора последовательного вычисления «,» могут быть пере­гружены.

Таблица 1.6 - Операции, определенные в С++

Операция Краткое описание
Унарные операции
:: Доступ к области видимости
. Селектор членов класса
-> Селектор членов класса
[ ] Индексация
() Вызов функции
++ Постфиксный инкремент
-- Постфиксный декремент
typeid Идентификация типа
dynamic_cast Преобразование типа с проверкой на этапе выполнения
static_cast Преобразование типа с проверкой на этапе компиляции
reinterpret_cast Преобразование типа без проверки
const_cast Константное преобразование типа
sizeof Размер объекта или типа
-- Префиксный декремент
++ Префиксный инкремент
~ Поразрядное отрицание
! Логическое отрицание
- Арифметическое отрицание (унарный минус)
+ Унарный плюс
& Взятие адреса
* Разадресация
new Выделение памяти
delete Освобождение памяти
(<тип>) Преобразование типа
.* Селектор членов класса по указателю
->* Селектор членов класса по указателю
Бинарные и тернарные операции
* Умножение
/ Деление
% Остаток от деления
+ Сложение
- Вычитание
<< Сдвиг влево
>> Сдвиг вправо
< Меньше
<= Меньше или равно
> Больше
>= Больше или равно
== Равно
!= Не равно
& Поразрядная конъюнкция (И)
^ Поразрядное исключающее ИЛИ
| Поразрядная дизъюнкция (ИЛИ)
&& Логическое И
| | Логическое ИЛИ
?: Условная операция (тернарная)
= Присваивание
*= Присваивание с умножением
/= Деление с присваиванием
%= Остаток от деления с присваиванием
+= Сложение с присваиванием
-= Вычитание с присваиванием
<<= Сдвиг влево с присваиванием
>>= Сдвиг вправо с присваиванием
&= Поразрядное И с присваиванием
|= Поразрядное ИЛИ с присваиванием
^= Исключающее ИЛИ с присваиванием
throw Инициировать исключение
, Последовательное вычисление

 

Рассмотрим основные операции подробнее.

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

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

Например, вместо x = x + dx можно записать x += dx, вместо у = у*х можно записать у *= х а вместо i = i + 1 воспользоваться оператором инкремента и записать i++. Список наиболее часто используемых таких операций приведен в таблице 1.7.

Таблица 1.7 - Арифметические операции с присваиванием в C++

Наименование операции Выражение Эквивалентное выражение
Префиксный и постфиксный инкремент ++x или x++ x = x + 1
Префиксный и постфиксный декремент --x или x-- x = x - 1
Сложение с присваиванием x += y x = x + y
Вычитание с присваиванием x -= y x = x - y
Умножение с присваиванием x *= y x = x * y
Деление с присваиванием x /= y x = x / y
Взятие остатка с присваиванием x %= y x = x % y

 

Операндом операции инкремента в общем случае является так называемое L-значение (L-value). Так обозначается любое выражение, адресующее некоторый уча­сток памяти, в который можно занести значение. Название произошло от опера­ции присваивания, поскольку именно ее левая (Left) часть определяет, в какую область памяти будет занесен результат операции. Переменная является част­ным случаем L-зиачепия.

Операция определения размера sizeof предназначена для вычисления размера объекта или типа в байтах, и имеет две формы:


Дата добавления: 2015-10-26; просмотров: 96 | Нарушение авторских прав


Читайте в этой же книге: Лабораторная работа №1. Интегрированная среда разработки Microsoft Visual Studio. Программирование алгоритмов линейной структуры | Операнд_1 ? операнд_2 : операнд_3 2 страница | Операнд_1 ? операнд_2 : операнд_3 3 страница | Операнд_1 ? операнд_2 : операнд_3 4 страница | Операнд_1 ? операнд_2 : операнд_3 5 страница | Операнд_1 ? операнд_2 : операнд_3 6 страница | Операнд_1 ? операнд_2 : операнд_3 7 страница | Операнд_1 ? операнд_2 : операнд_3 8 страница | Пример 6.1. Среднее арифметическое и количество положительных элементов | Пример 6.2. Номер столбца из положительных элементов |
<== предыдущая страница | следующая страница ==>
Открытие проекта, над которым вы работали ранее.| Операнд_1 ? операнд_2 : операнд_3 1 страница

mybiblioteka.su - 2015-2024 год. (0.045 сек.)