Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций -=Вычислительная техника и прог...docx
Скачиваний:
11
Добавлен:
01.05.2025
Размер:
2 Мб
Скачать
☆

В примере:

//1 — объявление функции; модификатор const указывает на то, что параметры в функции не изменяются;

//2 — ввод размерности массива;

//3 — выделение памяти под динамический массив;

//4 — ввод значений элементов массива;

//5 — вызов функций и вывод результата выполнения функции на экран;

//6 — определение функции;

//7 — суммирование элементов массива;

//8 — передача результата суммирования в точку вызова функции.

4.1.6. Функции с переменным числом параметров

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

Для доступа к необязательным параметрам внутри функции используются следующие макросы библиотеки <stdarg.h>:

va_start,

va_arg,

va_end и va_list .

va_start — инициализирует указатель;

va_list — хранит указатель на очередной аргумент;

va_arg — возвращает значение очередного аргумента;

va_end — после перебора всех элементов необходимо обратиться к этому макросу до выхода из функции.

Пример:

/* функция с переменным числом параметров */

#include <stdio.h>

#include <stdarg.h>

main () {

int n;

int sred_znach(int , …) ; // объявление функции

n=sred_znach(2,3,4,-1) ; // вызов с 4-мя параметрами

print(''n=%d'' , n) ;

n=sred_znach(5,6,7,8,9,-1) ; // вызов с 6-ю параметрами

printf(''\n n=%d'' , n) ;

return 0 ;

}

int sred_znach(int x , …) // определение функции

{ int i=0 ; j=0 ; sum=0 ;

va_list uk_arg ; // объявл-е указателя uk_arg на эл-ты

// списка необязательных параметров

va_start (uk_arg , x) ; // установка указателя uk_arg на

// первый необязательный параметр х

/* выборка очередного параметра и проверка на конец списка: */

while ((i=va_arg(uk_arg , int))!=–1)

{

sum+=i ; // сумма элементов

j++ ; // кол-во элементов

}

va_end(uk_arg) ; // закрытие списка параметров

return (sum/j) ; // передача сред. знач. в точку вызова

}

Результат выполнения программы:

n=3

n=7

Примечание:

Функция в данном примере имеет один обязательный параметр, который обязательно должен быть равен ‘–1' и является признаком (флагом) окончания списка передаваемых в функцию параметров.

4.1.7. Рекурсивные функции

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

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

Пример:

/* вычисление факториала (n!): */

long factorial (long n) {

if (n==0 || n==1) return 1;

return (n*factorial(n–1));

}

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

4.1.8. Функция main()

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

Существует два формата записи функции:

— без параметров

тип main() { … }

— с двумя параметрами

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

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

Здесь:

— argc — определяет количество параметров, передаваемых функции;

— argv — является указателем на массив указателей типа char; каждый элемент массива содержит указатель на отдельный параметр командной строки, хранящейся в виде строки.

Указатели массива argv[ ] выполняют следующие функции:

argv[0] — ссылается на полное имя запускаемого на исполнение файла;

argv[1] — ссылается на первый параметр командной строки;

…

argv[argc] — указывает на «нуль символ» (окончание строки) и равен '\n';

Пример:

#include <iostream.h>

void main ( int argc , char *argv[ ] )

{

for( int i=0 ; i<argc ; i++ )

cout<< argv[i]<< “\n” ;

}

Результат выполнения программы:

Если данный файл имеет название main.exe и запускается из строки:

d:\BC\main.exe one two three

то на экране будет выведено:

D:\BC\MAIN.EXE

one

two

three