
- •МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ Федеральное государственное бюджетное образовательное учреждение высшего профессионального
- •составные типы языка Си:
- •это составной тип данных, состоящий из
- •Оперативная
- •Над указателями можно производить:
- •Динамический объект – объект создаваемый в процессе выполнения программы
- •Пример 1
- •имя массива
- •Операторы
- •Объявление двумерного массива r[n][m]
- •Возможные типы определений символьных массивов:
- •это независимая совокупность объявлений и Функция - операторов, предназначенная для выполнения
- •задает ее заголовок, объявления локальных Определение функции - объектов (констант, переменных и т.п.)
- •Определение функции, не возвращающей значение:
- •задает ее имя, типы и число формальных Объявление функции – параметров, тип значения,
- •Формальные параметры – это фактически шаблоны, под которые в действительности не выделяется память,
- •Правила описания функций:
- •С использованием указателей:
- •С использованием ссылочных переменных:
- •void swap(int *a, int *b)
- •Пример:
- •Рекурсивный вызов функции – это когда функция вызывает саму себя
- •Формат заголовка функции с переменным количеством параметров:
- •1-ый подход
- •возможность функции по-разному выполняться
- •Определение указателя на функцию:
- •это составной объект, в котором под одним именем Структура – объединяются элементы одного
- •1 вариант
- •Элемент структур по другому еще называют поле
- •Битовое поле задается следующим образом:
- •Определение объединения:
- •Оператор описания типа:
- •Оператора описания объекта:
- •Характеристика:
- •Времени жизни объекта:
- •Неявные преобразования:
- •В операциях присваивания тип значения, которое присваивается, преобразуется к типу переменной, получающей это
- •Выражение E может быть явно преобразовано к типу (имя_типа) при помощи оператора:
- •Препроцессор –
- •Общая форма определения макроса:

С использованием ссылочных переменных:
Ccылка – это другое имя переменной (объекта)
Оператор объявления ссылочной переменной:
тип данных &имя ссылки = имя объекта;
Пример: int x = 20; float y;
int &n = x; float &m = y;
22

void swap(int *a, int *b) |
void swap(int &a, int &b) |
{ |
{ |
int temp; |
int temp; |
temp = *a; |
temp = a; |
*a = *b; |
a = b; |
*b = temp; |
b = temp; |
} |
} |
main() |
main() |
|
{ |
{ |
|
int a, b; |
int a, b; |
|
a = 2; b = 3; |
a = 2; |
b = 3; |
swap(&a, &b); |
swap(a, |
b); |
} |
} |
|
23

Пример:
void mass ( int n, float A[ ] )
{
int i; |
|
for( i = 0; i < n; |
i++) |
scanf( “ %f ”, |
&A[ i ] ); |
} |
|
main()
{
float B[3]; int a;
a = 2; mass(a, B);
}
Оперативная память
(возможное расположение (схематичное))
сегмент данных main()
сегмент данных mass ()
24

Рекурсивный вызов функции – это когда функция вызывает саму себя
Пример рекурсивной функции, вычисляющей значение факториала для n > 0 (n! = 1*2*3…*n):
fact (int n)
{
int a;
if (n = = 1) return 1; a = fact (n – 1)*n; return a;
}
25

Формат заголовка функции с переменным количеством параметров:
тип_данных имя_функции (описания формальных параметров, …)
Пример:
long summa (int k, …)
{
int *p = &k; long t = 0;
for (; k; k--) t += *(++p); return t;
}
Подходы определения количества и типов параметров функции при ее вызове:
1-ый подход:
2-ой подход:
по одному из явно задаваемых параметров определяется реальное количество фактических параметров
по специальному параметру-индикатору уникальное значение, которого будет сигнализировать об окончании списка фактических параметров
26

1-ый подход
#include <stdio.h> long summa (int k, …)
{
int *p = &k; long t = 0;
for (; k; k--) t + = *(++p); return t;
}
void main()
{
long r, p;
r = summa(2, 6, 4);
P = summa(6, 1, 2, 3, 4, 5, 6); printf (“r=%d\n”, r);
printf (“p=%d\n”, p);
}
Результат выполнения программы: r = 10
p = 21
2-ой подход
#include <stdio.h>
double prod (double arg, …)
{
double aa = 1.0; double *p = &arg;
if (*p == 0.0) return 0.0; for (; *p; p++) aa* = *p; return aa;
}
void main()
{
double r, p;
r = prod(2.0, 4.0, 3.0, 0.0); p = prod(1.4, 3.0, 0.0, 16.0); printf (“r=%d\n”,r);
printf (“p=%d\n”,p);
}
Результат выполнения программы: r = 9.0
p = 4.4
27

#include <stdio.h>
long minimum (char z, int k, …)
{
if(z == ’i’)
{
int *pi = &k + 1; int min = *pi;
for (; k; k--, pi++)
min = min >*pi ? *pi : min; return (long) min;
}
if(z == ’l’)
{
long *pl = (long*)(&k + 1); long min = *pl;
for (; k; k--, pl++)
min = min >*pl ? *pl : min; return (long)min;
}
printf(“неверно задан 1-й параметр”); return 2222L;
}
void main()
{
long p,p1; p=minimum(‘l’,2,10L,20L); p1=minimum(‘i’, 3,11,2,3);
}
28

возможность функции по-разному выполняться
Цель перегрузки функции -
и возвращать разные значения при обращении к ней с разными по типам и количеству фактическими параметрами, но с одним именем
для обеспечения
перегрузки функции
необходимо
для каждого имени определить, сколько
разных функций связано с ним
Пример:
long max (int n, int mas[10])
{
int maxN = mas[0]; for(int i = 0; i < n; i++)
if(mas[i] > maxN) maxn = mas[i]; return maxN;
}
long max (int n, long mas[10])
{
long maxN = mas[0]; for(int i = 0; i < n; i++)
if(mas[i] > maxN) maxn = mas[i]; return maxN;
}
void main ()
{
int i, n, m, A[10] = {1, 2, 3}; long B[10] = {4, 5, 6, 7}; max1, max2;
n = 3; m = 4; max1 = max(n, A); max2 = max(m, B);
}
29

Определение указателя на функцию:
тип_функции (*имя_указателя ) (описания формальных параметров); Оператор записи адреса функции в указатель:
имя указателя = имя функции; Оператор вызова функции через указатель:
(*имя_указателя) (список фактических параметров);
Пример: |
|
|
void f1(void) |
void f3(void (*p)()) |
|
{ |
||
{ |
||
(*p)(); |
||
print(“Выполняется f1”); |
||
} |
||
} |
||
|
||
void f2(void) |
void main() |
|
{ |
||
{ |
||
void (*p)(); |
||
print(“Выполняется f2”); |
||
p = f1; |
||
} |
||
f3(p); |
||
|
||
|
} |
30

это составной объект, в котором под одним именем Структура – объединяются элементы одного или разных типов
Определение структуры:
struct
{
список описаний элементов;
};
ИЛИ
struct метка
{
список описаний элементов;
};
метка – это имя структуры
Пример 1
struct
{
int a; float b; };
Пример 2
struct student
{
char name[25]; int id, age; char sex;
};
31