Лекции (опорный конспект)
.pdf8.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 |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|