Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
po_programmirovaniyu_otvety.rtf
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
22.6 Mб
Скачать

Вопрос 14. Цикл с выходом из середины. Привести блок схемы и примеры реализации.

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

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

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

Вопрос 15. Итерационные алгоритмы. Привести примеры реализации итерационных алгоритмов в задачах вычисления суммы бесконечного ряда с заданной точностью (нет ничего)

Вопрос 16. Пользовательские функции в С/C++. Разновидности функций. Определение функций. Привести пример функции, возвращающей значение.

Для того, чтобы в С++ использовать функцию, нужно ее:

  • Объявить

  • Описать (или определить)

  • Вызвать

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

  • разбить сложную задачу на ряд сравнительно простых ;

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

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

Функции в С++ подразделяются на

  • библиотечные,

  • определяемые пользователем.

Примеры функций:

int add (int, int); объявляется функция, поименованная add, которая требует два аргумента типа int и возвращает величину типа int.

double calc ( ); объявляется функция, поименованная calc, которая возвращает величину типа double. Список типов аргументов не задан.

void draf (void); объявляется функция с типом возврата void (нет возвращаемой величины). Список типов аргументов также void, означающий отсутствие аргументов для этой функции.

тип возвращаемого значения Имя (список параметров)

{

тело функции

}

Вопрос 17. Способы передачи параметров в вызываемую функцию на языке С/C++. Последовательность выполнения вызова функции. Привести примеры.

Передача данных по значению

Этот способ передачи данных в подпрограмму является основным и действует по-умолчанию. Фактический параметр вычисляется в вызывающей функции и его значение передаётся на место формального параметра в вызываемой функции. На этом связь между фактическим и формальным параметрами прекращается.

Передача данных по адресу

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

Передача данных по ссылке

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

Вызов имеет вид:

Имя (список аргументов);

Функция, возвращающая значение некоторого типа, обычно должна вызываться как один из элементов выражения того же типа, например:

double у = sin ( x ) + 2 * cos ( x ) + 1.53;

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

Вопрос 18. Правила разработки функций. Формальные и фактические параметры функции. Привести примеры определения и вызова функций в С/C++.

Правила разработки функций

  • Функция должна быть определена до того, как использована (вызвана).

  • Прототип выполняет ту же роль, что и объявление для переменных: в нем перечисляются используемые типы.

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

void f(void) { }

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

Формальные и фактические параметры функции

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

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

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

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

int add (int x, int y)

{

return (x+y);

}

// Формальные параметры – x и y.

void main( )

{

int a = 2;

int b = 3;

cout << add (5*a,

4*b);

}

// Фактические параметры – выражения 5*a и 4*b.

Вопрос 19. Функция с параметрами по умолчанию. Привести пример определения и вызова такой функции в С/C++.

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

тип имя = выражение

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

Пример функции

void repch (char ch = '-', int k = 60)

{ for (int i = 0; i < k; ++i) cout << ch; }

C++ разрешает такие вызовы этой функции:

repch (); // выводится 60 минусов

repch ('+'); // выводится 60 плюсов

repch ('=', 52); // выводится 52 равно

Вызов функции с параметрами по умолчанию считается корректным, если не указываются самые правые параметры. Язык C++ запрещает писать вызовы с пропущенными первыми и заданными последними параметрами.

Вызов repch (,54); писать нельзя.

Вызов repch (54); приведет к выводу на экран 60 шестерок.

Вызов функции с параметрами по умолчанию

double f;

double sqr (double x) // определение функции

{ return x * x; }

double ff (double x = sqr(f)) // вызов функции для вычисления

// значения

{ return x; }

int main (void)

{ f = 2;

cout << "\n \n f =" < f < endl;

cout << "\n ff (x = sqr(f)) =" << ff (); // вычисляется значение

// по умолчанию

cout << "\n ff(3) = " << ff (3) << endl; // умолчание

// не используется

return 0;

} f = 2

ff (x = sqr(f)) = 4

ff ( 3 ) = 3

Вопрос 20. Рекурсия. Привести пример рекурсивной функции в С/C++.

рекурсивной называется такая функция, которая может вызывать сама себя;

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

Рекурсивная функция "Факториал"

#include "stdafx.h"        

#include <iostream>          

using namespace std;      

unsigned int factor (unsigned int); //прототип функции        

int main (void)

{

unsigned int n; // число, факториал которого надо вычислить

unsigned int f; // факториал числа n

cout << " Вычисление факториала: \n ";  

    cout << " Введите число, факториал которого надо вычислить \n";  

cin >> n;    

f = factor (n);

cout << "Факториал числа “ << n << “равен” << f;

return 0;

}

unsigned int factor (unsigned int k)

{ if ( k == 1 )

return 1;

else

return k*factor(k-1);

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]