Производные типы данных. (Лекция 3)

Содержание

Слайд 2

3.4.Производные типы данных Указатель на переменную заданного типа содержит адрес переменной

3.4.Производные типы данных

Указатель на переменную заданного типа содержит адрес переменной указанного

типа.
Синтаксис: <тип> * <имя переменной>

3.4.1. Указатели

int *x;
double *y;
float *z;

Адрес, по которому будет храниться переменная типа int

Адрес, по которому будет храниться переменная типа double

Адрес, по которому будет храниться переменная типа float

Слайд 3

Занимает в памяти 2 байта Рекомендуется обнулять описанный в программе указатель

Занимает в памяти 2 байта
Рекомендуется обнулять описанный в программе указатель
Перед использованием

указателя необходимо выделить память

Указатели

Указатели на тип

Указатели на функции

Слайд 4

// пустой (нулевой) указатель int *x = NULL; // выделение памяти x = (int*)malloc(sizeof(int));

// пустой (нулевой) указатель
int *x = NULL;

// выделение памяти
x = (int*)malloc(sizeof(int));

Слайд 5

3.4.2. Ссылки Ссылка – это адрес существующей переменной. Ссылка формируется добавлением

3.4.2. Ссылки

Ссылка – это адрес существующей переменной. Ссылка формируется добавлением знака

«&» к имени переменной слева.

int z = 12; //объявлена и задана целая переменная
int *k = &z; // указателю k присваивается значение //адреса переменной z.

1

2

a

b

f

e

z

k

a

Область данных

Слайд 6

3.4.3. Разыменование указателей Для получения или инициализации значения, хранящегося по заданному

3.4.3. Разыменование указателей

Для получения или инициализации значения, хранящегося по заданному адресу,

используют операцию разыменования указателя - *.

int z = 12;
int *k = (int*)malloc(sizeof(int));
*k = z;

1

a

b

f

e

z

k

Область данных

Оперативная память (Куча)

aa

2

с

d

1

aa

bb

2

cc

dd

Слайд 7

4. Конструкции структурного программирования в Си 4.1. Ветвление Оператор проверки условия

4. Конструкции структурного программирования в Си

4.1. Ветвление
Оператор проверки условия if [else]
Синтаксис:
if

(логическое выражение)
{действия при истинном значении выражения}
[else {действия при ложном значении выражения}]
Слайд 8

Пример … … int m = 12, n = 18; if

Пример



int m = 12, n = 18;
if

(m printf (“Сумма чисел %d”, m+n);
else printf (“Произведение чисел %d”, m*n);


Слайд 9

Пример сложного условия … int x = 5, y = 7,

Пример сложного условия


int x = 5, y = 7, z =

3;
int min;
if (x min = x;
else if (y min = y;
else min = z;

Слайд 10

4.2. Множественный выбор Синтаксис: switch (выражение) { case значение выражения1: операторы;

4.2. Множественный выбор

Синтаксис: switch (выражение)
{
case значение выражения1: операторы;
case значение выражения2:

операторы;

[default: операторы;]
}

Выражение в switch
int, long int, char, … целочисленные типы

Слайд 11

Принцип работы switch значение выражения сравнивается со значением, указанным в первом

Принцип работы switch
значение выражения сравнивается со значением, указанным в первом

блоке case
если значения совпали, выполняются операторы из первого блока case
управление без проверки условия передается в последующие блоки case
если case заканчивается оператором break, управление передается на оператор, следующий за блоком switch
Слайд 12

Принцип работы switch если совпадения значений не произошло, последовательно проверяются все

Принцип работы switch
если совпадения значений не произошло, последовательно проверяются все

следующие case
в блок default управление передается в случае, если не произошло ни одного совпадения значений
для определения диапазонов используется перечисление case:
case a: case b: case c: …
Слайд 13

int k; printf(“Введите произвольное целое число: "); scanf("%d",&k); switch (k) {

int k;
printf(“Введите произвольное целое число: ");
scanf("%d",&k);
switch (k)

{ case 1:case 2: case 3:
printf(“Введено число 1 или 2 или 3\n");
break;
case 4:
printf(“Введено число 4\n");
case 6:
printf(“ Введено число 6\n");
break;
default:
printf(“ Управление передано в блок DEFAULT \n");
}
Слайд 14

Результаты работы

Результаты работы

Слайд 15

4.3. Циклы 4.3.1. Цикл с фиксированным числом операций for Цикл, это

4.3. Циклы

4.3.1. Цикл с фиксированным числом операций for

Цикл, это конструкция

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

Синтаксис:
for (секция инициализации значения; секция проверки условия; секция коррекции) {тело цикла}

Слайд 16

4.3.1. Цикл с фиксированным числом операций for Значение, инициализируемое в первой

4.3.1. Цикл с фиксированным числом операций for

Значение, инициализируемое в

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

for(int i=0;i<3;i++)
printf(“%d ”,i);
printf(“\n”);

int i;
for( i=0;i<3;i++)
{ printf(“%d ”,i);
printf(“\n”); }

Слайд 17

4.3.1. Цикл с фиксированным числом операций for Принцип работы int i;

4.3.1. Цикл с фиксированным числом операций for

Принцип работы

int i;
for(i=0;i<3;i++)
printf(“%d

\n”,i);

i=0
i<3 (true)
печать 0
i++
i<3 (true)
печать 1
i++
i<3 (true)
печать 2
i++
i<3 (false)

Слайд 18

Ввести с клавиатуры 5 произвольных чисел, найти и вывести на экран

Ввести с клавиатуры 5 произвольных чисел, найти и вывести на экран

их сумму.


printf (“ Вводите числа: \n");
float S = 0,c;
int n;
for (int i=0;i<5;i++) {
printf("%d==> ",i+1);
n = scanf("%f",&c);
if(n!=1) {fflush(stdin);
i--;
continue;}
S+=c;
}

Слайд 19

printf (“ Сумма чисел = %.3f\n",S); system("PAUSE"); …

printf (“ Сумма чисел = %.3f\n",S);
system("PAUSE");

Слайд 20

Возможности цикла for: Уменьшение счетчика – for(i = 10 ;i>=0;i- -)

Возможности цикла for:

Уменьшение счетчика – for(i = 10 ;i>=0;i- -)

Изменение шага - for(i = 1,i<=10,i+=4)
for(i = 1,i<=10,i*=2)
Использование вещественных переменных в качестве счетчика - for(x=0;x<10;x+=0.5)
Работа с символами - for(c = 'А'; c < 'Я'; c++).
Возможность записывать несколько действий в одной секции -
for (i=1,j=1;i<10,j<10;i++,j+=4)
Слайд 21

Возможность опускать любое из выражений заголовка for(;;) – бесконечный цикл, пустое условие всегда считается истинным;

Возможность опускать любое из выражений заголовка
for(;;) – бесконечный цикл,

пустое условие всегда считается истинным;
Слайд 22

4.3.2. Циклы while и do while Для решения задач, при выполнении

4.3.2. Циклы while и do while

Для решения задач, при выполнении которых

необходимо проводить циклические действия до тех пор, пока истинно какое-либо условие
while() и do while().

Синтаксис:
while (условное выражение)
{ тело цикла
}

Слайд 23

Синтаксис: do { тело цикла } while (условное выражение) while -

Синтаксис: do {
тело цикла
} while (условное выражение)

while - цикл с

предусловием
(может ни разу не выполниться)
do while - цикл с постусловием
(обязательно выполниться хотя бы один раз)
Слайд 24

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

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

Ввод продолжать до первого отрицательного числа.
Слайд 25

printf (“Вводите числа: \n"); float S = 0,c=0; int n; int

printf (“Вводите числа: \n");
float S = 0,c=0;
int

n;
int i = 1;
do {
printf("%d==> ",i);
i++;
n = scanf("%f",&c);
if(n!=1) {fflush(stdin);
i--;
continue;}
S+=c;
}while (c>=0);
printf(“ Сумма - %f\n", S);
Слайд 26

Слайд 27

…printf (" Вводите числа: \n"); float S = 0,c=0; int n;

…printf (" Вводите числа: \n");
float S = 0,c=0;

int n;
int i = 1;
printf("%d==> ",i);
n = scanf("%f",&c);
if(n!=1) {fflush(stdin);
i--;
}
else {S+=c;}
i++;
while (c>=0) {
printf("%d==> ",i);
i++;
Слайд 28

n = scanf("%f",&c); if(n!=1) {fflush(stdin); i--; continue;} S+=c; } printf(" Сумма - %f\n", S); system("PAUSE");

n = scanf("%f",&c);
if(n!=1) {fflush(stdin);
i--;
continue;}
S+=c;
}

printf(" Сумма - %f\n", S);
system("PAUSE");
Слайд 29

Слайд 30

Основные логические ошибки при использовании циклов. После заголовка цикла ставиться точка

Основные логические ошибки при использовании циклов.

После заголовка цикла ставиться

точка с запятой. Такой цикл считается компилятором пустым Например:
for(int i=0;i<10;i++);
{ n+=10;
y-=15;
}
Увеличение переменной n и уменьшение переменной y происходит за циклом, ровно один раз.
Слайд 31

Условие цикла заведомо ложно (цикл никогда не выполниться) Условие цикла никогда

Условие цикла заведомо ложно (цикл никогда не выполниться)
Условие цикла

никогда не станет ложным (цикл будет бесконечным)
Слайд 32

4.3.3. Операторы безусловной передачи управления continue и break break досрочно завершает

4.3.3. Операторы безусловной передачи управления continue и break

break досрочно завершает

выполнение цикла. Управление передается оператору, следующему за циклом.
int n =15;
for(int i=0;i{ int z = rand()%200;
if (z>100) break;
}
Слайд 33

continue пропускает все последующие операторы тела цикла и передает управление на

continue пропускает все последующие операторы тела цикла и передает управление

на в начало цикла.
int f = 1;
do
{
int z = rand()%100;
if (z>30) continue;
if (z<10) f = 0;
printf(“%d”,z);
} while(f);
Слайд 34

5. Сложные типы данных 5.1. Массивы Одномерным массивом называется набор данных одного типа. Массивы Статические Динамические

5. Сложные типы данных

5.1. Массивы

Одномерным массивом называется набор данных одного типа.


Массивы

Статические

Динамические

Слайд 35

Статические массивы Описание: int x[15]; память для хранения статического массива выделяется

Статические массивы
Описание:
int x[15];
память для хранения статического массива выделяется автоматически непосредственно после

описания.
Нумерация элементов массива начинается с 0.
Для обращения к заданному элементу массива используются [].
Слайд 36

Инициализация статического массива может быть проведена и при описании: float y[5]

Инициализация статического массива может быть проведена и при описании:
float y[5]

= {1.1, 2.2, 3.3, 4.4, 0.05};
y[0] = 1.1 y[1] = 2.2
y[2] = 3.3 y[3] = 4.4
y[4] = 0.05

int y[25];
y[0]=10;

Слайд 37

Основные ошибки при работе со статическими массивами обращение к несуществующему элементу

Основные ошибки при работе со статическими массивами

обращение к несуществующему элементу массива


использование еще не проинициализированных элементов массива

float x[10];
x[10]=132.3;

int m[10];
m[1]=m[0]+23;

Слайд 38

Динамические массивы Описание: int *x; x =new int [10]; … обработка

Динамические массивы

Описание:
int *x;
x =new int [10]; …

обработка массивов произвольной размерности
обработка

массивов, размер которых превышает размер области данных
передача массива параметром функции