Оператор возврата из функции
Операторreturn pзавершает выполнение функции и передает управление в точку ее вызова. Вид оператора:
return [<выражение>];
Выражение должно иметь скалярный тип. Если тип возвращаемого функцией значения описан как void, выражение должно отсутствовать.
27. Структурированные операторы. Оператор цикла с предусловием. Пример.
Операторы цикла служат для организации циклов (повторов). Цикл представляет собой последовательность операторов, которая может выполняться более одного раза. Группу повторяемых операторов называют телом цикла. Для построения цикла в принципе можно применять ранее рассмотренный условный оператор и оператор перехода. Однако в большинстве случаев удобно использовать операторы цикла.
Оператор цикла с предусловием целесообразно использовать в случаях, когда число повторений тела цикла заранее неизвестно и тело цикла может ни разу не выполняться. Формат оператора цикла с предусловием:
while (Условие) <Оператор>;
28. Организация повторения вычислений по желанию пользователя. Пример.
29. Структурированные операторы. Оператор цикла с постусловием. Пример.
Условие представляет собой выражение логического типа. Операторы, заключенные между словами do и while, составляют тело цикла и выполняются до тех пор, пока логическое выражение не примет значение False, т. е. тело цикла повторяется при значении логического выражения, равном True. Так как условие проверяется только в конце цикла, то операторы тела цикла выполняются минимум один раз.
По крайней мере один из операторов тела цикла должен влиять на значение условия, в противном случае произойдет зацикливание.
30. Структурированные операторы. Оператор цикла с параметром. Пример.
for (<инициализация>; <выражение>; <модификации>) <Оператор>;
Инициализация используется для установления начального значения переменных, управляющих циклом. В этой части можно записать несколько операторов, разделенных запятой (операцией «последовательное выполнение»). Областью действия переменных, объявленных в части инициализации цикла, является цикл. Инициализация выполняется один раз в начале исполнения цикла.
Выражение определяет условие, при котором тело цикла будет выполняться.
Модификации определяют изменение переменных, управляющих циклом после каждого выполнения тела цикла. В части модификации можно записать несколько операторов, разделенных запятой.
Оператор представляет собой тело цикла.
31. Алгоритмы нахождения наибольшего (наименьшего) из n вводимых последовательно чисел. Пример.
32. Алгоритм нахождения количества (суммы) чисел удовлетворяющих некоторому условию из n вводимых последовательно чисел.
33. Алгоритм нахождения произведения чисел удовлетворяющих некоторому условию из n вводимых последовательно чисел.
34. Объявление и определение функции. Прототип. Вызов функции. Пример.
Функция — это именованная последовательность описаний и операторов, выполняющая какое-либо законченное действие. Функция может принимать параметры и возвращать значение.
Любая программа на C++ состоит из функций, одна из которых должна иметь имя main (с нее начинается выполнение программы). Функция начинает выполняться в момент вызова. Любая функция должна быть объявлена и определена. Как и для других величин, объявлений может быть несколько, а определение только одно. Объявление функции должно находиться в тексте раньше ее вызова для того, чтобы компилятор мог осуществить проверку правильности вызова.
Каждая программа в своем составе должна иметь главную функцию main(). Именно функция main() обеспечивает создание точки входа в объектный модуль.
Кроме функции main(), в программу может входить произвольное число функций, выполнение которых инициализируется либо прямо, либо опосредованно вызовами из функции main(). Каждая функция по отношению к другой является внешней. Для того, чтобы функция была доступной, необходимо, чтобы до ее вызова о ней было известно компилятору.
Cостоит из двух частей: заголовка и тела. Описание функции имеет следующую форму записи:
/* заголовок функции*/
[тип_результата] <имя> ([формальные параметры])
{
/* объявления и операторы */
<тело_функции>
}
Здесь тип_результата — тип возвращаемого значения. В случае отсутствия спецификатора типа предполагается, что функция возвращает целое значение (int). Если функция не возвращает никакого значения, то на месте типа записывается спецификатор void.
Здесь тип_результата — тип возвращаемого значения. В случае отсутствия спецификатора типа предполагается, что функция возвращает целое значение (int). Если функция не возвращает никакого значения, то на месте типа записывается спецификатор void.
Тело_функции представляет собой последовательность объявлений и операторов, описывающих определенный алгоритм. Важным оператором тела функции является оператор возврата в точку вызова:
return [выражение];
Оператор return имеет двойное назначение. Он обеспечивает возврат в вызывающую функцию и может использоваться для передачи вычисленного значения функции. В теле функции может быть несколько операторов return, но может не быть и ни одного. В последнем случае возврат в вызывающую программу происходит после выполнения последнего оператора тела функции.
Прототип функции
может указываться до вызова функции вместо описания функции для того, чтобы компилятор мог выполнить проверку соответствия типов аргументов и параметров. Прототип функции по форме такой же, как и заголовок функции, в конце его ставится «;». Формальные параметры функции в прототипе могут иметь имена, но компилятору они не нужны.
Компилятор использует прототип функции для сравнения типов аргументов с типами формальных параметров. Язык C++ не предусматривает автоматического преобразования типов в случаях, когда аргументы не совпадают по типам с соответствующими им параметрами, т. е. язык C++ обеспечивает строгий контроль типов.
При наличии прототипа вызываемые функции не обязаны размещаться в одном файле с вызывающей функцией.
Вызов функции
может быть оформлен в виде оператора, если у функции отсутствует возвращаемое значение, или в виде выражения, если существует возвращаемое значение и имеет следующий формат:
имя_функции (список_фактических_параметров);
Значение вычисленного выражения является возвращаемым значением функции. Возвращаемое значение передается вместо вызова функции и является результатом ее работы.
Число и типы фактических и формальных параметров должны совпадать. При вызове функции фактические параметры подставляются вместо формальных параметров.
35. Получение нескольких результатов в функциях. Пример.
Аргументы функции передаются по значению, поэтому прямым путем значения соответствующих переменных в функции изменять нельзя (чтобы вернуть ответные значения в качестве результатов вычисления). Однако соответствующей цели можно достичь, если в качестве параметров и аргументов функции использовать адреса переменных, а не их значения (в этом случае говорят о вызове по ссылке). В случае вызова по ссылке оператор вызова дает вызываемой функции возможность прямого доступа к передаваемым данным, а также возможность изменения этих данных.
Ссылочный параметр — это псевдоним соответствующего аргумента. Чтобы показать, что параметр функции передан по ссылке, после типа параметра в прототипе функции ставится символ амперсанда (& — операция взятия адреса); такое же обозначение используется в списке типов параметров в заголовке функции. Например, объявление
int ∑
в заголовке функции может читаться как «sum является ссылкой на int». В вызове функции достаточно указать имя переменной и она будет передана по ссылке. Тогда упоминание в теле вызываемой функции переменной по имени ее параметра в действительности является обращением к исходной переменной вызывающей функции и эта переменная может быть изменена непосредственно вызываемой функцией.
36. Формальные и фактические параметры функции. Пример.
Параметры, перечисленные в заголовке описания функции, называются формальными параметрами, или просто параметрами
Параметры, записанные в операторе вызова функции — фактическими параметрами, или аргументами.
37. Передача параметров по значению и по адресу. Пример.
по значению
по адресу
38. Области действия переменных. Понятия область видимости и область существования переменной. Пример.
В языке C++ возможны три места объявления переменных:
- Вне каких либо функций, в том числе и main(). Такая переменная называется глобальной и может использоваться в любом месте программы от места объявления и до конца программы.
- Переменная может быть объявлена внутри блока, в том числе и внутри тела функции. Объявленная таким образом переменная называется локальной и может использоваться только внутри блока. Такая переменная вне блока, в котором она объявлена, не известна.
- Переменная может быть объявлена как параметр функции. Кроме специального назначения, а именно для передачи данных в функцию, параметр можно рассматривать как локальную переменную для тела функции.
39. Структурированные типы данных. Одномерный массив. Описание, особенности использования. Ввод/вывод элементов одномерного массива. Передача одномерного массива в качестве параметра в функции. Пример.
Структура данных— это некоторая структура, содержащая данные.
Различают динамические и статические типы данных.
Статическая структура данныхимеет фиксированный тип и размер. Для ее изменения программист должен изменить исходный код программы. В то время как размер (а иногда и тип) динамической структуры данных может изменяться в процессе выполнения программы.
Массив представляет собой упорядоченный набор однотипных элементов. Массивы бывают одномерными и многомерными.
Одномерные массивы (вектора)— это конечная именованная последовательность элементов. Элементы массива занимают в памяти один непрерывный участок памяти и располагаются последовательно друг за другом. Для доступа к отдельному элементу массива указывают имя массива и номер позиции отдельного элемента массива (индекс). Индекс должен быть целым числом или целым выражением. Индексация элементов массива начинается с нуля. На рисунке показан вектор A целых чисел.
Массивы занимают область в памяти. При объявлении вектора указывают тип каждого элемента и количество элементов. При этом компилятор резервирует соответствующий объем памяти.
Объявление одномерного массива:
<тип элемента> <имя массива>[<кол-во элементов>];
Например: int A[10]; float B[3],C[100]; double D[20];
Инициализация одномерного массива означает присвоение начальных значений его элементам при объявлении. Массивы можно инициализировать списком значений или выражений.
Например:
int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};
Если элементов в массиве больше, чем инициализаторов, элементы для которых значения не указаны обнуляются. Массив можно инициализировать списком без указания в скобках длины. При этом длина массива определяется количеством инициализаторов.
Например: char code[]={’a’,’b’,’c’};
Если массив явно не проинициирован, то внешние и статические массивы инициализируются нулями. Автоматические массивы после объявления ничем не инициализируются и содержат неизвестную информацию.