Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
s__ekzamen.docx
Скачиваний:
7
Добавлен:
18.12.2018
Размер:
113.34 Кб
Скачать

28.Рекурсии. Фреймы.

Рекурсия (recursion) - это процесс, при котором функция вызывает сама себя.

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

29. Функция Main()

В языке C заданы два встроенных аргумента функции main: argc и argv.

Выглядит это так:

int main(int argc, char *argv[]) {...}

Аргумент argc типа integer содержит в себе количество аргументов командной строки.

Аргумент argv типа char - указатель на массив строк. Каждый элемент массива указывает на аргументы командной строки. Один параметр отделяется от другого пробелами.

argv[0] - полное имя запущенной программы

argv[1] - первая строка записаная после имени программы

argv[2] - вторая строка записаная после имени программы

argv[argc-1] - последняя строка записаная после имени программы

argv[argc] - NULL

В средах разработки фирмы Borland (Borland Builder C++, Borland C++ и т.п.) предусмотрен еще и третий аргумент env, который, так же как и argv является указателем на массив строк, но содержит установки среды:

int main(int argc, char *argv[], char *env[]) {...}

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

Пример:

#include "stdio.h"

#include "stdlib.h"

int main(int argc, char *argv[], char *env[]) {

int i;

printf("Количество аргументов командной строки %d \n", argc);

printf("Аргументы командной строки:\n);

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

printf("%s\n", argv[i]);

printf("\nАргументы состояния среды:\n");

for (i = 0; env[i] != NULL; i++)

printf("%s\n", env[i]);

return 0;

30. Стеки.

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

push Добавить (положить) в конец стека новый элемент

pop Извлечь из стека последний элемент

back Узнать значение последнего элемента (не удаляя его)

size Узнать количество элементов в стеке

clear Очистить стек (удалить из него все элементы)

Удобнее всего создать класс для работы со стеком, описание которого будет выглядеть примерно так:

Code struct ELEMENT//элемент стека

{ int Content; ELEMENT* Next;};

typedef ELEMENT *LPELEMENT;//указатель на элемент стека

class STACK

{ public:

STACK();//конструктор

~STACK();//деструктор

bool Push(int Content);//добавление элемента

bool Pop(int &Content);//изъятие элемента

void Clear();//очистка стека

int Length();//определение количества элементов в стеке

void OutPut();//Вывод стека

private:

LPELEMENT Start;//Начало стека };

Извлечение элемента:

Code

bool STACK::Pop(int &Content)//Извлекает из стека элемент в переменную Content { //в случае успешного извлечения элемента вернёт true, иначе- false

if(!Start)

return false;

Content=Start->Content;

LPELEMENT Temp=Start;

Start=Start->Next;

delete Temp;

return true;}

Вывод на экран всех элементов:

Code

void STACK::OutPut()//выводит в консоль все элементы стека

{ if(!Start)

{ printf("стек пуст\n");

return; }

LPELEMENT Temp=Start;

while(Temp)

{ printf("%i\n",Temp->Content);

Temp=Temp->Next; }}

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