Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Основная характеристика объекта – тип объекта.

Поиск

ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ

Государственное образовательное учреждение высшего

профессионального образования

Московский технический университет связи и информатики


Кафедра вычислительной математики и программирования

УЧЕБНО-МЕТОДИЧЕСКОЕ

ПОСОБИЕ

ПО ДИСЦИПЛИНЕ

«Информатика»

КУРС 1

ВВЕДЕНИЕ В С++

Факультет ОТФ–2

Составитель: М.И. Кувыкина, кандидат технических наук, доцент

 

 

Москва 2010 г.

 

Введение в начала языка С++

 

Каждый язык имеет свой алфавит.

Алфавит языка С++

q буквы: прописные и строчные латинские A, B, C …, Z, a, b, c, …, z и символ подчеркивания _; прописные и строчные буквы – это разные символы алфавита;

q цифры: 0, 1, …, 9;

q специальные символы: “, { } | [ ] () + - / % \; _

‘.:? < = >! & * # ~ ^

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

Escape – символы - это управляющие символы, коды которых не имеют графического представления на клавиатуре, на экране дисплея или принтере. Они изображаются двумя графическими символами, первый из которых \ (обратная косая черта - backslash)

 

escape - символ название символа управляющее действие символа
\a звонок подает звуковой сигнал
\b backspase возврат каретки(курсора) на один символ
\f перевод страницы перевод (прогон) на начало новой страницы
\n новая строка переход на начало новой строки
\r возврат каретки возврат к началу текущей строки
\t горизонтальная табуляция переход к следующей позиции табуляции
\v вертикальная табуляция перевод курсора вниз на несколько строк
\\ обратная черта выводит обратную косую черту
\’ апостроф выводит апостроф (одиночную кавычку)
\” кавычка выводит двойную кавычку
\0 нулевой символ, признак конца строки символ, код которого равен 0

 

Из символов алфавита составляются слова языка. Слова в языке бывают двух типов. Зарезервированные (ключевые) слова имеют определенное начертание и четко заданное назначение. Например, слова if, int, while, const. Зарезервированные слова языка в любом редакторе выделяются цветом.

Второй тип слов языка – это имена, которые придумывает программист по следующему правилу:

имя должно быть последовательностью букв алфавита языка, может содержать в себе символы цифр или символ подчеркивания _. Имя не может содержать внутри себя символа «пробел» и обязано начинаться с буквы или символа подчеркивания. О соглашениях, принимаемых при назначении имен для объектов, смотри приложение 1.

 

Из слов в языке складываются предложения.

Основным предложением языка является инструкция (statement).

Инструкция – это последовательность слов языка, которая всегда заканчивается символом; - «точка с запятой». Например, дальше следуют две инструкции:

int cBit = 7, a1=0;

if (a1) cBit = cBit * 2;

Основное понятие языка – объект.

Объект – это область памяти, которой дано имя (identifier). В область памяти объекта записывается информация. Размер памяти объекта и информация, которая записана в объекте, могут быть различны. Это и данные, которые обрабатываются программой, и последовательности команд, которые определяют алгоритм этой обработки.

 

Основная характеристика объекта – тип объекта.

Тип, как и объект, имеет имя.

Тип характеризует объект по трем параметрам:

· размер памяти, измеренный в байтах;

· способ кодировки информации в области памяти объекта;

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

 

Объекты по типам делятся на три основные группы:

· базовые стандартные типы данных. Характеристики этих объектов определены конструкцией компьютера. Объекты таких типов – это объекты, в область памяти которых можно записать символ, число. Об объектах таких типов системе все известно: размер, способ кодировки, какие действия можно осуществлять над ними и как. Имена этих типов являются словами, зарезервированными в языке С++ и могут использоваться только в таком качестве. Например, слова int, char, float зарезервированы и являются именами базовых типов (смотри таблицу 1);

· стандартные производные типы данных. Эти данные конструируются из объектов других известных уже типов объектов по правилам, которые определили разработчики языка С++ и эти правила известны системе. Правила работы с такими объектами и правила задания имен таких типов так же определены разработчиками. Например, эти имена могут выглядеть так int*, float&, char**, PAINTSTRUCT *, STUDENT&;

· абстрактные (пользовательские) типы данных. Эти данные конструируются из объектов других уже известных типов объектов по правилам, которые определяет сам программист и эти правила не известны системе. Эти правила программист обязан сообщить системе с помощью средств языка С++. Имена своим типам программист придумывает сам. Эти слова не зарезервированы и должны отвечать лишь требованиям языка С++. Например, имена новых пользовательских типов могут выглядеть так STUDENT, PAINTSTRUCT;

 

Базовые стандартные типы данных

Таблица 1

 

Имя типа размер в байтах объектов данного типа способ кодировки диапазон значений данных, которые могут быть записаны в объектах данного типа (от … до …)
char   символ -128 … 127 (коды ASCII)
unsigned char   беззнаковый символ 0 … 255
short   целое -32768 … 32767
unsigned int   беззнаковое целое 0 … 65535
int   целое -32768 … 32767
long   длинное целое -2147483648 … 2147483647
unsigned long   беззнаковое длинное целое 0 … 4294967295
float   действительное 3.4E-38 … 3.4E+38
double   длинное действительное 1.7E-308 … 1.7E+308
long double   длинное действительное 3.4E-4932 … 3.4E+4932

 

Понятие определения объекта

 

Для того, чтобы в программе можно было работать с объектом, его надо создать, т.е. программист на языке С++ должен дать указание системе на его создание – на выделение памяти требуемого размера и задать способ кодировки информации в этой области памяти. Выделенной памяти должно быть присвоено имя. В этом случае говорят, надо определить (defined) объект. Определить объект можно только один раз!!!!!!!!

Объект, который определен, одновременно и описан (declared).

Инструкция определения объекта выглядит так:

имя_типа [имя_объекта1, имя_объекта2, …,] имя_объектаN;

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

Инструкция обязательно заканчивается точкой с запятой. Нет точки с запятой – нет инструкции!!!

 

Например:

int nA1, nA2, nA3 = 0;

float fltVar;

char chSymb;

Здесь записаны три инструкции определения объекта.

Первая создает в памяти три объекта с именами nA1, nA2, nA3, размер каждого из них 2 байта, в область этих объектов можно записывать целые числа из диапазона от -32768 до 32767 (смотри табл.) При создании объектов nA1, nA2 в их область памяти ничего разумного не записано, там могут в данный момент находиться любые целые числа из диапазона объектов типа int.

В область объекта nA3 записано в момент создания число 0. Об объекте nA3 говорят, что объект nA3 инициализирован нулем.

Какие объекты созданы в в следующих двух инструкциях, смотри таблицу 1.

 

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

 

Так определяют целые константные объекты, тип которых long:

3 55 -10 +1 1 1876

 

Так определяют действительные константные объекты, тип которых double (в записи таких констант всегда присутствует точка):

3. 0 3. 55. – 10. -1. 1 0. 34. 34 -15. 12345678

 

Так определяют символьные константные объекты, тип которых char (их значения взяты в одинарные кавычки – кавычки не являются частью данного, а призваны только для того, чтобы обозначить его значение):

3 ‘ ‘ a ‘ ‘ \n ‘ ‘ я ‘ ‘ % ‘ ‘ }

 

Так определяют символьные константные строки (их тип пока называть не будем, т.к. эти константные объекты являются объектами производного типа), значения этих констант взяты в двойные кавычки – двойные кавычки не являются частью данного, а призваны только для того, чтобы обозначить его значение:

3 “ “ abcd “ “ 123456789“-15.12345678 “ “ я

константная строка, в памяти занимает столько байт, сколько в ней символов + 1 байт на символ конца строки

Символом конца строки является символ ‘\0’, код которого равен 0.

 

Понятие описания объекта

 

 

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

 

 

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

 

Вот ее вид:

extern имя_типа [имя_объекта1, имя_объекта2, …,] имя_объектаN;

 

Обратите внимание, что инструкция описания объекта повторяет синтаксис инструкции определения объекта, перед которой появляется зарезервированное слово extern.

 

Модульная структура программы в СИ++. Объект типа функция.

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

Такой стиль программирования, использующий принципы структурного программирования, ведет к повышению степени абстракции программы и к упрощению ее структуры, повышает надежность программы. Разделение программы на объекты-функции позволяет избежать избыточности кода (многократного повторения одного и того же кода), поскольку функцию записывают один раз, а вызывать ее на выполнение можно многократно из разных точек программы. Упрощается процесс отладки, т.к. каждую функцию можно отладить отдельно. Дальнейшим шагом в повышении уровня абстракции является объединение функций и связанных с ними данных в отдельные файлы - исходные модули (они имеют расширение .срр), компилируемые раздельно. Получившиеся в процессе компиляции файлы объектные модули (файлы с расширением.obj), объединяются в исполняемую программу с помощью компоновщика (получают исполняемый файл с расширением.exe).

 

Напомним, что

объект – это область памяти, которая имеет имя.

Каждый объект характеризуется своим типом. Когда задается тип объекта, системе сообщается:

  • Размер объекта (система знает, сколько байт выделить под этот объект);
  • Способ кодировки информации в этой области памяти;
  • Какие действия можно делать над информацией, записанной в этой области памяти и как их делать.

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

Функция – это имя типа объекта. Но объекты типа функция обычно называют просто функциями.

 

  Для того, чтобы в программе можно было работать с объектом, его надо физически создать, т.е. программист на языке С++ должен дать указание на его создание – на выделение памяти требуемого размера и нужной кодировки. Выделенной памяти должно быть присвоено имя. В этом случае говорят, надо определить (defined)объект.Определить объект можно только один раз!!!!!!!!   Объект, который определен, одновременно и описан (declared).  

 

Итак, определение объекта типа функция состоит из заголовка функции и тела функции.

 

Вот как синтаксически выглядит определение функции:

тип_возвращаемого_значения имя_объекта_функции ( список_формальных_параметров )

{

/* Это тело функции. Здесь пишутся инструкции, которые определяют объекты, создаваемые внутри функции – локальные объекты.

Здесь пишутся инструкции, задающие действия над этими объектами - алгоритм работы функции

*/

}

 

Заголовок функции это:

тип_возвращаемого_значения имя_объекта_функции ( список_формальных_параметров )

 

Заголовок функции задает, каким образом организован обмен данными между ней и вызвавшей ее объектом–функцией. То есть заголовок определяет, какие данные и как функция получает от функции, вызвавшей ее, а также какие результаты своей работы функция возвращает и как она их возвращает в точку ее вызова.

 

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

 

{

/* Это тело функции. Здесь пишутся инструкции, которые определяют объекты, создаваемые внутри функции – локальные объекты.

Здесь пишутся инструкции, задающие действия над этими объектами -алгоритм работы функции

*/

}

 

Как известно, определить объект типа функция, как и любой другой объект, можно только один раз. И как любой другой объект функцию порой приходится описывать. Зачем? Для того, чтобы уметь правильно с этим объектом работать, когда его по каким либо причинам «не видно» (например тело функции определено не в том файле из которого его вызывают).

 

Как выглядит инструкция описания функции?

Описание функции – это точная копия заголовка функции, после которого стоит точка с запятой (ведь это инструкция!):

тип_возвращаемого_значения имя_объекта_функции ( список_формальных_параметров );

Для инструкции описания функции есть специальное название – прототип (prototype).

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

 

В примере тела функции показано, как записать в программе на языке С++ много строковый комментарий. В комментарии можно дать нужные пояснения к всей программе, ее частям – функциям или к отдельным инструкциям. Комментарии системой не воспринимается как распознаваемый текст. Этот текст только для чтения программистом:

/* это много

строковый

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

Комментарий, который занимает одну строку, можно создать так:

// это комментарий в одну строку

 

В комментарии можно использовать любые символы.

 

Главная функция в СИ++ как точка входа в программу.

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

Такой функцией всегда будет функция, которая имеет имя main:

// тип_возвращаемого_значения имя_объекта_функции ( список_формальных_параметров )

Void main (void)

{

// инструкции тела функции main

}

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

 

Операторы языка С++. Инструкция выражения.

Тело функции состоит из инструкций (statement). Часть инструкций определяет объекты, которые должны хранить обрабатываемые этой функцией данные, часть инструкций задает последовательность действия над этими объектами.

Действия над объектами (операции) в С++ осуществляются операторами (operator), которые задаются одним или более символов. (Обратите внимание, что в других языках и часто и в учебниках C++ инструкции (statement) называются операторами, а операторы - операциями).

Все операторы представляют собой отдельные лексемы, например + - / sizeof::.

По количеству операндов, участвующих в действии, определяемой оператором, операторы делятся на унарные (действие осуществляется над одним объектом) и бинарные (действие осуществляется над двумя объектами).

 

Понятие выражения.

Выражение (выр expression)это последовательность имен объектов, соединенных операторами. Выражение задает выполнение некоторых действий над объектами в виде математической формулы и/или отношения.

Например, если определены следующие объекты:

int nA1, nA2;

float flt B;

то выражения могут выглядеть так:

nA1 + fltB – 2. / nA2

или так

fltB = 2.8

или так

nA1 = (nA2 + fltB) / nA2 - fltB * nA1

 

Порядок выполнения операторов в выражении.

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

 

 

В таблице приведены операторы языка, сгруппированные в порядке их приоритетов.

СВОДКА ОПЕРАТОРОВ (операций) С++ В каждой очерченной части находятся операторы с одинаковым приоритетом

 

Приоритет Оператор Назначение оператора Синтаксис оператора
  :: разрешение области видимости имя_класса:: член
:: глобальное :: имя
    -> выбор члена указатель -> член
[ ] индексация указатель [ выр ]
() вызов функции выр (список_выр)
sizeof определение размера типа sizeof (тип)
sizeof определение размера объекта sizeofвыр
  ++ приращение после lvalue ++
++ приращение до ++ lvalue
- - уменьшение после lvalue - -
- - уменьшение до - - lvalue
~ дополнение ~ выр
! не ! выр
- ударный минус - выр
+ ударный плюс + выр
& адрес объекта & lvalue
* разыменование * выр
new создание (размещение) new mun
delete уничтожение (освобождение) delete указатель
delete [ ] уничтожение массива delete [] указатель
() преобразование типа (тип) выр
  * умножение выр * выр
/ деление выр / выр
% взятие по модулю (остаток) выр % выр
  + сложение (плюс) выр + выр
- вычитание (минус) выр - выр
  << сдвиг влево lvalue << выр
>> сдвиг вправо lvalue >> выр
    < меньше выр < выр
<= меньше или равно выр <= выр
> больше выр > выр
>= больше или равно выр >= выр
  = = равно выр == выр
!= не равно выр!= выр
  & побитовое И выр & выр
  ^ побитовое исключающее ИЛИ выр ^ выр
  | побитовое включающее ИЛИ выр | выр
  && логическое И выр && выр
  || логическое ИЛИ выр || выр
  ?: арифметический if выр? выр: выр
  = простое присваивание lvalue = выр
* = умножить и присвоить lvalue * = выр
/ = разделить и присвоить lvalue / = выр
% = взять по модулю и присвоить lvalue % = выр
+ = сложить и присвоить lvalue + = выр
- = вычесть и присвоить lvalue - = выр
  , запятая (последование) выр, выр

I ++ равнозначно I = I + 1

++ I равнозначно I = I + 1

J = I ++ равнозначно двум действиям в таком порядке J = I I = I + 1

J = ++ I равнозначнодвум действиям в таком порядке I = I + 1 J = I

Термин lvalue (left value) – леводопустимое выражение (происходит от объяснения оператора присваивания LV=A, в котором левый операнд LV может быть только адресным объектом, в который копируется информация, т.е. изменяемым выражением).  

 

 

Неявное преобразование типов в выражении.

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

Если в выражение входят операнды одного типа, то значение выражения будет того же типа. В выражении операнды могут быть различных типов. Тогда перед вычислением выражения будут выполняться преобразования типов по умолчанию таким образом, чтобы осуществить преобразования более коротких типов в более длинные для сохранения значения и точности (это не относится! к оператору =)

Например, если определены следующие объекты:

int nA1 = 2, nA2 = 5.5; // значение объекта nA2 равно 5, так как произошло неявное

// преобразование константы 5.5 типа float к типу int при выполнении оператора =

float flt B = 3;

Выражение nA1 + 2 - nA2 будет иметь значение - 1, тип которого int (все операнды в выражении типа int).

Выражение flt B = nA1+ 2 - nA2 будет иметь то же значение - 1., но тип его будет float, так как при выполнении оператора = произошло неявное преобразование внутреннего представления информации в объекте flt B.

Выражение nA1 + 2.2 - nA2 будет иметь значение 0.8, тип которого float (один из операндов константа 2.2 имеет тип float, следовательно все операнды в выражении преобразованы к более длинному типу float).

Выражение flt А2 = nA1+ 2.2 - nA2 будет иметь то же значение 0, тип его будет int, так как при выполнении оператора = произошло неявное преобразование значения 0.8, вычисленного в выражении nA1 + 2.2 - nA2 и имеющего значение float к типу int.

 

 

Разберитесь каковы значения и тип у следующих выражений:

nA1 + fltB – 2. / nA2 // значение 4.6, тип float, т.к. значение 2. / nA2 равно 0.4

nA1 + fltB – 2 / nA2 // значение 5., тип float, т.к. значение 2 / nA2 равно 0

 

или так

fltB = 2.8 // значение 2.8, тип float

 

или так

// 1.6 - 6

nA1 = (nA2 + fltB) / nA2 - fltB * nA1 // при выполнении последнего оператора =

// nA1 = - 4.4 получили значение равное -4, тип int

Инструкция выражения.

Инструкция- выражение – это выражение, после которого стоит точка с запятой.

Например:

nB = 2.8;

nA1 = (nA2 + fB) / nA2 - fB * nA1;

Инструкция выражение делает то, что делают над объектами операторы, записанные в выражении. Это одна из самых мощных инструкций, так как количество сочетаний различных действий, записанных в выражениях бесконечно.

 

Пример первой программы, состоящей из одной функции main.

 

Далее следует пример программы, состоящей из одной функции. А раз функция одна, то такой функцией может быть только функция main.

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

 

/* файл first.cpp содержит программу, 1

Using namespace std; // 11

// 12

void main (void) // 13

{ // 14

Int nA; // 15

Float fltB; // 16

cout <<"Input numbers:\t" // 17

<<"\nfirst int\t"; // 18

cin>>nA; // 19

cout<<"second float\t"; // 20

cin>>fltB; // 21

Float fltSumma; // 22

fltSumma = nA + fltB; // 23

cout<<"summa = " << fltSumma; // 24

cout<<endl<<"\tBYE!"; // ПОКА 25

Getch(); // 26

} // 27

Рассмотрим приведенный текст.

Программа содержит функцию main.

Она состоит:

  • из заголовка (строка 13);
  • тела (строки 14 – 27).

Тело функции состоит из инструкций. Каждая инструкция заканчивается точкой с запятой. Инструкций в теле функции всего 11, из них 3 – это инструкции определения объектов nA (строка 15), fltB (строка 16), fltS umma (строка 22).
Эти инструкции создают объекты, выделяя под них память. Напоминаем, что любой объект, имя которого встречается в программе, должен быть определен и определен всего один раз. Инструкции определения объектов легко распознать, они всегда начинаются с имен типов – здесь имена типов int и float (строки 15, 16, 22). Кроме этого в функции определены константные объекты-строки. Константные объекты-строки - это последовательности символов, взятые в двойные кавычки.

Вот эти пять объектов:

"Input numbers: \t "

" \n first int \t "

"second float \t "

"summa = "

" \t BYE!"

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

 

 

Стандартные потоковые объекты С++ (cin, cout) и потоковые операторы >>, <<.

 

Кроме объектов na, flt b, fltSumma и константных строк в тексте появились имена cout и cin. Объекты cout и cin – это имена стандартных абстрактных объектов, тип их называется «поток», с их помощью организуется ввод и вывод в С++. Объект cout совместно с оператором >> организует вывод информации из памяти на экран. Объект cin совместно с оператором << организует ввод информации с клавиатуры в память.

сout и cin -это имена объектов, но если мы пытаемся воспользоваться этими объектами, где их определения, где и когда они создаются?

Описание объектов в хэдерных файлах.h. Область видимости имен – оператор using namespace std;

Определение стандартных объектов cout и cin присоединяется в строке 9. В этой строке записана директива #include специальной программы – препроцессора.

 

 

Препроцессор (preprocessor)- это программа, выполняющая предварительную обработку входных данных (исходного файла с расширением.срр) для другой программы (компилятора). Препроцессор до начала работы программы- компилятора: · отыскивает и подключает к программе необходимые файлы; · просматривает исходный текст на языке С++ до компилятора и заменяет в нем определенные сочетания символов (макросы) на соответствующие другие; · может изменить условия компиляции.

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

Директива #include вставляет перед текстом функции main текст файла iostream. Обратите внимание, что эта директива не является элементом языка С++, это элемент другого языка, языка программы препроцессор.

Директива, не является инструкцией языка С++, а потому не имеет заканчивающей её точки с запятой.

В тексте файла iostream находятся определения объектов cout и cin, эти определения и присоединяются к тексту программы.

Имя файла iostream записано в треугольных скобках < >, что является указанием системе, где, в каких папках искать файл и соответствующую ему библиотеку. Этот поиск делается автоматически на этапе компоновки.

Объект endl определен также в файле iostream, он работает так, как и escape-символ ‘\n‘ - переводит курсор при выводе на новую строку экрана.

Обратите внимание на инструкцию using namespace языка С++ в строке 19:

using namespace std;

Эта инструкция определяет область имен, где необходимо искать определения используемых в программе имен объектов. Дело в том, что сейчас существует очень много различных библиотек, в которых могут появиться одинаковые имена. Инструкция using namespace определяет, что поиск нужно осуществлять в области имен стандартной библиотеки std.

Последнее имя, которое используется в этой программе – имя getch. Это имя объекта типа функция. Как система и мы узнаем, что это имя функции, а не какого-то объекта любого другого типа? Этим признаком является то, что сразу после этого имени появляется оператор вызова функции – круглые скобки () (смотрите таблицу сводки операторов С++, приоритет 2). Этот объект, как и любой объект должен быть определен в функции, если им нужно воспользоваться. Описания стандартных функций находятся в.h файлах. Описание этой функции getch находится в файле conio.h, который подключается директивой препроцессора #include в строке 10. А определения этого стандартного объекта-функции (его код) находится в стандартной библиотеке (LIB). Само определение этого объекта- функции будет найдено автоматически в стандартной библиотеке и подключено к нашему коду на этапе компоновки.

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

В функции main 7 инструкций-выражений.

Void main (void)

{

сout << endl << "vvedite a, x1, x2 "; // вывод строки-подсказки

Void main (void)

{

сout << endl << "vvedite a, x1, x2 ";

float x1, a, x2;

cin>>a>>x1>>x2;

float vir1;

vir1 = countX (x1*x1, x2, M_PI_2); //здесь функция countX видна

float vir2;

vir2 = countX (x2, x1 + 1.2, 0); // здесь функция countX видна

float x = 1./11 + a * vir1 + 1 / vir2;

cout << endl << "X = " << x;

getch();

}

// --

 

Определение функции countX состоит из заголовка функции и ее тела (показано желтым цветом).

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

Изменим последовательность расположения текстов в программе, записаном в одном файле example2.cpp. Функция countX вызывается в точке, где она не видна.

 

// файл example2.cpp

// Изменили порядок записи функций в файле, функция main записана первой

#define _USE_MATH_DEFINES

#include <math.h>

#include <iostream>

#include <conio.h>

using namespace std;

Void main (void)

{

сout << endl << "vvedite a, x1, x2 ";

float x1, a, x2;

cin>>a>>x1>>x2;

float vir1;

vir1 = countX (x1*x1, x2, M_PI_2); // здесь функция countX не видна!

float vir2;

vir2 = countX (x2, x1 + 1.2, 0); // здесь функция countX не видна!

float x = 1./11 + a * vir1 + 1 / vir2;

cout << endl << "X = " << x;

getch();

}

Void main (void)

{

сout << endl << "vvedite a, x1, x2 ";

float x1, a, x2;

cin>>a>>x1>>x2;

float vir1;

vir1 = countX (x1*x1, x2, M_PI_2); // здесь функция countX стала видна!

float vir2;

vir2 = countX(x2, x1 + 1.2, 0); // здесь функция countX стала видна!

float x = 1./11 + a * vir1 + 1 / vir2;

cout << endl << "X = " << x;

getch();

}

// здесь функция countX видна

Void main (void)

{

cout<<endl<<"vvedite a, x1, x2 ";

float x1, a, x2;

cin>>a>>x1>>x2;

float vir1;

countX (x1*x1, x2,pi, M_PI_2);

float vir2;

countX(x2, x1 + 1.2, 0, vir2);

float x=1/11. + a * vir1 + 1 / vir2;

cout<< endl <<"X = "<<x;

getch();

}

Пояснения к работе программы в этом варианте.

Программа начинает работать с функции main.

Попрежнему первая исполняемая инструкция-выражение

сout << endl << "vvedite a, x1, x2 ";

выводит на экран подсказку.

Следующая инструкция-в



Поделиться:


Последнее изменение этой страницы: 2016-09-20; просмотров: 603; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.139.108.48 (0.013 с.)