Разделы презентаций


Тема 6. Массивы, структуры, объединения

Содержание

Классификация типов данных СТипы данныхПростыеСоставныеЦелочисленныеВещественныеМассивыОбъединенияСтруктурыЛогическийСимвольные

Слайды и текст этой презентации

Слайд 1Тема 6. Массивы, структуры, объединения

Тема 6.  Массивы, структуры, объединения

Слайд 2Классификация типов данных С
Типы данных
Простые
Составные
Целочисленные
Вещественные
Массивы
Объединения
Структуры
Логический
Символьные

Классификация типов данных СТипы данныхПростыеСоставныеЦелочисленныеВещественныеМассивыОбъединенияСтруктурыЛогическийСимвольные

Слайд 3Перечисления
Перечисление – тип данных, все возможные значения которого задаются списком

целочисленных констант: enum [имя_типа] { значение1, значение2, … }; Элементы,

которые не инициализированы явно, получают значения предшествующих им элементов, увеличенные на единицу. Первому элементу присваивается значение 0.

Пример кода

enum Animal {Cat, Dog, Tiger, Elephant}; enum Error {ERR_READ = 101, ERR_WRITE};
Animal a1 = Elephant;

Error e1;
e1 = ERR_WRITE;

ПеречисленияПеречисление – тип данных, все возможные значения которого задаются списком целочисленных констант: enum  [имя_типа] { значение1,

Слайд 4Объявление массивов
Массив - это объединение нескольких элементов данных одного типа: Тип_данных

имя_массива[число_элементов]; Тип и число элементов определяют объем памяти, выделяемой под

массив. Число элементов должно быть целым положительным числом и может быть задано константами или константными выражениями.

Пример кода

int months[12]; Animal animals[200]; enum {MIN = 20, MAX = 200}; double values[MIN*10];

Объявление массивовМассив - это объединение нескольких элементов данных одного типа: Тип_данных  имя_массива[число_элементов]; Тип и число элементов

Слайд 5Инициализация массивов
При определении можно инициализировать элементы массива, для этого после

имени ставят знак равенства и в фигурных скобках по порядку

перечисляют значения элементов: Тип имя[число_элементов] = { значение1, значение2, … }; Неинициализированным элементам присваивается значение 0 (глобальный массив) и неопределенное значение (локальный массив). Если значений больше, чем размер массива, то выдается сообщение об ошибке. Если размер не указан, то он вычисляется по числу элементов.

Пример кода

double values[3] = {1.23, 4.56}; double values[] = {1.23, 4.56};

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

Слайд 6Доступ к элементам массива
Доступ к элементам массива осуществляется при помощи

индекса, указанного в квадратных скобках. Индекс первого элемента массива всегда

равен 0. Индекс последнего элемента равен числу элементов массива, уменьшенному на единицу.

Пример кода

double values[3] = {1.23, 4.56}; values[2] = 7.89;

double x = values[3]; //ошибка, выход за размер int index = 0; double y = values[index+1];

Доступ к элементам массиваДоступ к элементам массива осуществляется при помощи индекса, указанного в квадратных скобках. Индекс первого

Слайд 7Строки как массивы
Строки символов представляют собой массив типа char. В

стандарте языка С предусмотрены ASCIIZ строки, заканчивающиеся символом '\0' (нуль-терминатором).

При инициализации строки константой нуль-терминатор автоматически подставляется компилятором в конец строки.

Пример кода

char country[] = "Russia"; char country[7] = {'R', 'u', 's', 's', 'i', 'a', '\0'}; char country[7]; country[0] = 'R'; //нет оператора country[1] = 'u'; //для присваивания строк, country[2] = 's'; //только для символов country[3] = 's'; country[4] = 'i'; //строки копируются country[5] = 'a'; //функцией strcpy country[6] = ‘\0';

Строки как массивыСтроки символов представляют собой массив типа char. В стандарте языка С предусмотрены ASCIIZ строки, заканчивающиеся

Слайд 8Многомерные массивы
Язык С поддерживает многомерные массивы. Размерность определяется числом индексов,

используемых для ссылки на конкретный элемент массива. Элементы многомерного массива

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

Пример кода

int matrix[3][2] = {{11, 12}, {21, 22}, {31, 32}}; int matrix[3][2] = {11, 12, 21, 22, 31, 32}; matrix[0][0] = 11; matrix[0][1] = 12; matrix[1][0] = 21; matrix[1][1] = 22; matrix[2][0] = 31; matrix[2][1] = 32;

Многомерные массивыЯзык С поддерживает многомерные массивы. Размерность определяется числом индексов, используемых для ссылки на конкретный элемент массива.

Слайд 9Объявление структур
Структура является набором элементов (почти) произвольных типов: struct [имя_структуры] {

тип_1 элемент_1; тип_2 элемент_2; …

};

Пример кода

struct Product { int code; char name[20]; //массив внутри структуры double price; char comment[256];//массив внутри структуры };

Объявление структурСтруктура является набором элементов (почти) произвольных типов: struct [имя_структуры]  {   тип_1  элемент_1;

Слайд 10Объявление структурных переменных
Структурные переменные объявляются стандартным образом. В качестве типа

используется имя структуры (только С++). Структурные переменные могут быть элементами

массивов.

Пример кода

struct Product product1; Product products[20]; struct MyComplex { double real, imag; } value1, value2;

Объявление структурных переменныхСтруктурные переменные объявляются стандартным образом. В качестве типа используется имя структуры (только С++). Структурные переменные

Слайд 11Инициализация структурных переменных
Структурные переменные могут инициализироваться при их определении. Для

этого после имени переменной располагают оператор присваивания и в фигурных

скобках перечисляют значения полей структуры. Нет необходимости инициализировать все элементы структуры.

Пример кода

Product products[20] = { {1, "Яблоки", 55.50, "Сорт \"Гольден\""}, {2, "Апельсины", 45.00}, {5, "Бананы", 22.00}, {8, "Груши", 64.45, "Очень спелые!"}, {4, "Сливы", 82.50}, {6, "Грейпфруты"} };

Инициализация структурных переменныхСтруктурные переменные могут инициализироваться при их определении. Для этого после имени переменной располагают оператор присваивания

Слайд 12Доступ к элементам структур
Для доступа к отдельным элементам (полям) структурных

переменных используется оператор ".", который связывает имя структурной переменной и

имя поля.

Пример кода

Product product; product.code = 1;

// копирование строки при помощи функции strcpy
strcpy(product.name, "Яблоки");
product.price = 55.50;
product.comment[0] = 0;

MyComplex complex[20]= {{1, 2},{3, 4}}; double value = complex[1].real;

Доступ к элементам структурДля доступа к отдельным элементам (полям) структурных переменных используется оператор

Слайд 13Объединения
Объединения можно рассматривать как структуру, все поля которой располагаются по

одному и тому же адресу: union [имя_объединения] { тип_1

элемент_1; тип_2 элемент_2; … };
Длина объединения равна длине наибольшего поля.

Пример кода

union Number { char b1; short b2;
long b4; };

ОбъединенияОбъединения можно рассматривать как структуру, все поля которой располагаются по одному и тому же адресу:  union

Слайд 14Безымянное объединение
Когда объединение расположено внутри структуры, то имеет смысл сделать

его безымянным. В этом случае обращение к его полям упрощается.
Пример

кода

struct
{
bool type;

union {
char c;
int i; };
} MyUnion;

if(MyUnion.type) printf("%c", MyUnion.c);
else printf("%d", MyUnion.i);

Безымянное объединениеКогда объединение расположено внутри структуры, то имеет смысл сделать его безымянным. В этом случае обращение к

Слайд 15Создание новых типов данных
Оператор typedef позволяет определять новые типы данных

на основе уже существующих.
Пример кода
typedef double real;
real v1, v2; typedef struct

{int x; int y} Vector;
Vector vec[1000]; typedef long[64] LONG_ARRAY;
LONG_ARRAY arr;
Создание новых типов данныхОператор typedef позволяет определять новые типы данных на основе уже существующих.Пример кодаtypedef double real;real

Слайд 16Определение размера переменных в памяти с помощью sizeof()
Оператор sizeof() позволяет

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

или любым типом данных.

Пример кода

long y[] = {43, 56, 34}; int s1 = sizeof(long); int s2 = sizeof(y); int n = sizeof(y)/sizeof(long);

Определение размера переменных в памяти с помощью sizeof()Оператор sizeof() позволяет определить размер в байтах, занимаемый в памяти

Слайд 17Выравнивание данных в структурах
Пример структуры
struct A {

short a; float b;

char c; } a1, a2;

В структурах компилятор применяет выравнивание. Каждое поле выравнивается на границу, кратную параметру выравнивания

a

b

c

A

a

b

c

a

b

c

a1

a2

sizeof(A) = 12

Выравнивание данных в структурахПример структуры  struct A   {    short a;

Слайд 18Оптимальное размещение данных в структурах
a
b
c
A1
sizeof(A1) = 12
a
c
A2
sizeof(A2) = 8
b
Пример структур

struct A1 { short a;

float b; char c; }; struct A2 { short a; char c; float b; };
Оптимальное размещение данных  в структурахabcA1sizeof(A1) = 12acA2sizeof(A2) = 8bПример структур  struct A1   {

Слайд 19Пример определения данных различной размерности
Простые данные (переменные)
Температура, С
Время, чч:мм
Влажность, %
struct Time
{

char h;
char m;
};

Time time;
time.h =

10;
time.m = 25;
double temp = 24.4;

double humi = 42;

10:25

24.4

42

Пример определения данных различной размерностиПростые данные (переменные)Температура, СВремя, чч:ммВлажность, %struct Time {  char h;  char

Слайд 20Пример определения данных различной размерности
Наборы данных (массивы)
Температура, С
Время, чч:мм
Влажность, %
Time time[2];
time[0].h = 10;
time[0].m

= 25;
time[1].h = 11;
time[1].m = 19;
double temp[2];
temp[0] = 24.4;
temp[1] =

24.2;

double humi[2];
humi[0] = 42;
humi[1] = 47;

10:25

24.4

42

11:19

24.2

47

Пример определения данных различной размерностиНаборы данных (массивы)Температура, СВремя, чч:ммВлажность, %Time time[2];time[0].h = 10;time[0].m = 25;time[1].h = 11;time[1].m

Слайд 21Пример определения данных различной размерности
Группы данных (структуры)
Температура, С
Время, чч:мм
Влажность, %
struct Mesure
{
Time

time;
double temp;
double humi;
};

Mesure mes;
mes.time.h = 10;
mes.time.m

= 25;
mes.temp = 24.4;
mes.humi = 42;

10:25

24.4

42

Пример определения данных различной размерностиГруппы данных (структуры)Температура, СВремя, чч:ммВлажность, %struct Mesure{  Time time;  double temp;

Слайд 2247
Пример определения данных различной размерности
Наборы групп данных
Температура, С
Время, чч:мм
Влажность, %
Mesure mes[2];

mes[0].time.h = 10;
mes[0].time.m

= 25;
mes[0].temp = 24.4;
mes[0].humi = 42;

mes[1].time.h = 11;
mes[1].time.m = 19;
mes[1].temp

= 24.2;
mes[1].humi = 47;

10:25

24.4

42

11:19

24.2

47Пример определения данных различной размерностиНаборы групп данныхТемпература, СВремя, чч:ммВлажность, %Mesure mes[2];mes[0].time.h = 10;mes[0].time.m = 25;mes[0].temp = 24.4;mes[0].humi

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика