Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Programmirovanie_-_1_kurs / Лекции (опорный конспект)

.pdf
Скачиваний:
69
Добавлен:
09.06.2015
Размер:
2.39 Mб
Скачать

8.2.4. Структуры как параметры функций (1)

Структуры могут передаваться по значению и по ссылке

1)struct FIO

{

char Name[15]; char Surname[15];

};

void modify(FIO);

void main()

{

FIO person; strcpy(person.Name, "Ivan");

strcpy(person.Surname, "Ivanov"); modify(person);

cout << person.Name << " " << person.Surname; getch();

}

void modify(FIO x)

{

 

strcpy(x.Name, "Peter");

 

}

strcpy(x.Surname, "Petrov");

91

 

 

 

8.2.4. Структуры как параметры функций (2)

2) struct FIO

3) struct FIO

{

 

{

char Name[15];

 

char Name[15];

char Surname[15];

 

char Surname[15];

};

 

};

void modify(FIO&);

 

void modify(FIO*);

void main()

 

void main()

{

 

{

FIO person;

 

FIO person;

strcpy(person.Name, "Ivan");

 

strcpy(person.Name, "Ivan");

strcpy(person.Surname, "Ivanov");

strcpy(person.Surname, "Ivanov");

modify(person);

 

modify(&person);

cout << person.Name << " "

 

cout << person.Name << " "

<< person.Surname;

 

<< person.Surname;

getch();

 

getch();

}

 

}

void modify(FIO& x)

 

void modify(FIO* x)

{

 

{

strcpy(x.Name, "Peter");

 

strcpy(x->Name, "Peter");

strcpy(x.Surname, "Petrov");

 

strcpy(x->Surname, "Petrov");

}

 

}

92

8.2.5. Значение параметров по умолчанию

1.23

1.234

1.23456

93

8.3.Перегрузка функций (1)

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

1)

94

8.3. Перегрузка функций (2)

2) int Max(int, int);

int Max(int, int, int); int Max(int*, int);

void main(

 

{

// 20

cout << Max(10,20);

cout <<

Max(10,50,20); // 50

int A[]

= {10, 4, 8, 88, 13, 45};

cout <<

Max(A, 6);

// 88

}

95

8.4.Указатели на функции (1)

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

1) int sum(int a, int b)

{

return a+b;

}

void main()

{

int (*ptr)(int,int); ptr = ∑

int z = (*ptr)(20,30); cout << z;

getch();

}

2) void f1(char*); int f2(char* ; void f3(int*);

void (*pf)(char*); // указатель на void(char*)

void f()

{

pf = &f1; // нормально pf = &f2; // ошибка pf = &f3; // ошибка

}

96

8.4.Указатели на функции (2)

3)int sum(int a, int b) { return a+b; }; int mult(int a, int b) { return a*b; };

typedef int (*CNT)(int, int);

void main()

{

4)

CNT ptr[2] = {&sum, &mult}; int a = (*ptr[0])(10,20); int b = (*ptr[1])( 10,20); cout << a << " " << b; getch();

}

97

8.5.Рекурсивные алгоритмы

Рекурсия – способ определения объекта через ранее заданные частные определения этого объекта

Рекурсивный алгоритм – это алгоритм, который в процессе своей работы вызывает самого себя

int f(int x)

{

if (x==0) return 1;

else

return x*f(x-1);

}

void main()

{

cout << f(2) << " " << f(5); getch();

}

1, при n = 0 n!=

(n 1)! n, при n > 0

98

9.Строки

9.1.Представление строк в памяти

Текстовые строки представляются как массивы элементов типа char

Любая строка заканчивается служебным символом с нулевым кодом – терминатором строки

99

9.2. Служебные символы

\\

Вывод обратной черты

 

• Для обозначения в строке

 

 

 

 

 

 

некоторых служебных

\'

Вывод апострофа

 

 

 

 

символов используются

\”

Вывод кавычки

 

 

специальные

 

 

 

 

 

 

последовательности

\a

Подача звукового сигнала

 

 

 

 

символов – escape-

\b

Возврат курсора на один символ назад

 

 

последовательности

 

 

 

 

 

 

 

 

 

\n

Перевод строки

 

 

 

 

 

 

 

 

 

 

 

 

 

 

\r

Возврат курсора на начало текущей строки

 

 

 

 

 

 

 

 

 

 

 

 

 

 

\t

Горизонтальная табуляция

 

 

 

 

 

 

 

 

 

 

 

 

 

 

\0

Терминатор строки

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

cout << "12345\n67890";

 

12345

 

 

 

 

 

 

 

67890

 

 

 

 

 

 

 

 

 

 

 

 

cout << "Кавычка - \"";

 

Кавычка - "

 

 

 

 

 

 

 

 

 

 

 

 

cout << "1\t2\t3";

 

1

2

3

 

 

 

 

 

 

 

 

 

 

cout << "abcdefg\r123";

 

123defg

 

100