Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
.doc
Скачиваний:
4
Добавлен:
23.09.2019
Размер:
440.83 Кб
Скачать

32) Аргумент функции main(): argv и argc (в2б2, в3б26)

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

тип main(){/*…*/}

или

тип main(int argc, char*argv[]){/*…*/}

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

Argc определяет количество параметров, передаваемых функции, включая имя самой программы.

Argv является указателем на массив указателей типа char. Каждый элемент массива содержит указатель на отдельный параметр командной строки, хранящееся в виде С-строки, оканчивающейся null-символом.

Первый элемент массива argv[0] ссылается на полное имя, запускаемого на выполнение файла. Следующий argv[1] указывает на первый параметр; argv[2] – на второй и т.д. Параметр argv[argc] должен быть равен 0. Если функция main() ничего не возвращает, вызвавшая система получит значение,

означающее успешное завершение. Ненулевое значение означает аварийное завершение. Оператор возврата из main() можно опускать.

33) Рекурсия. (в2б3, в3б29)

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

int a()

{.....a().....}

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

программы.

Классический пример рекурсии – это математическое определение факториала n!:

n! = 1 при n=0;

n*(n-1)! при n>1 .

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

long fakt(int n)

{return ( (n==1) ? 1 : n*fakt(n-1) ); }

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

может произойти переполнение стека.

34) Вызов библиотечных функций(в2б4, в3б25)

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

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