Скачать презентацию Типы данных в C Простые типы Целые Вещественные Скачать презентацию Типы данных в C Простые типы Целые Вещественные

progr_su_3.ppt

  • Количество слайдов: 80

Типы данных в C Простые типы Целые Вещественные Указатели Перечислимый тип Пустой тип (void) Типы данных в C Простые типы Целые Вещественные Указатели Перечислимый тип Пустой тип (void) Составные типы массивы структуры объединения

Целые типы данных char 1 байт short 2 байта long 4 байта int платформозависимый Целые типы данных char 1 байт short 2 байта long 4 байта int платформозависимый тип sizeof int - определение размера памяти, выделяемой для переменной заданного типа

Знаковые и беззнаковые типы signed unsigned char ch; // -128. . 127 unsigned char Знаковые и беззнаковые типы signed unsigned char ch; // -128. . 127 unsigned char ch; // 0. . 255 signed short s; // -32 768. . 32 767 unsigned short s; // 0. . 65 535 signed int d; // -2 147 483 648. . 2 147 483 647 unsigned int d; // 0. . 4 294 967 295

Вещественные типы данных float — 4 байта (3. 4 *10 -38 до 3. 4*10+38) Вещественные типы данных float — 4 байта (3. 4 *10 -38 до 3. 4*10+38) double — 8 байтов (1. 7 *10 -308 до 1. 7*10+308) long double — 10 байтов Формат числа с плавающей точкой: +/- m*2 p Где 2 — основание системы счисления, m — мантисса, p - показатель степени float: Знак 31 й 1 бит 0 й бит

Вычисление арифметических выражений 1. Неявное преобразование типов Приоритеты типов данных, используемые для неявного преобразования: Вычисление арифметических выражений 1. Неявное преобразование типов Приоритеты типов данных, используемые для неявного преобразования: long double → float → unsigned long (int) → unsigned short → unsigned char → signed char 2. Явное преобразование типов int b; double f = 13. 25; b = (int) f %10; 3. Приоритеты арифметических операций: 1. ++ -- 2. * / % 3. +- 4. = *= /= %= += -=

Указатели Объявление типизированного указателя: int* ptr; float* ptr; char* ptr; Объявление бестипового указателя: void* Указатели Объявление типизированного указателя: int* ptr; float* ptr; char* ptr; Объявление бестипового указателя: void* ptr; Инициализация переменной-указателя: int a = 5; int* ptr = &a; Косвенная адресация: int b = *ptr; a: 5 ptr : адрес a b : *ptr

Выражения, содержащие указатели int a = 10, b = 5; int * ptra = Выражения, содержащие указатели int a = 10, b = 5; int * ptra = &a; int* ptrb = &b; *ptrb = *ptra + 2 * *ptrb; Замечание: нельзя получить адрес константного значения, арифметического выражения, регистровой переменной.

Преобразование типов указателей старший байт младший байт unsigned int a = 0 xddcc; void* Преобразование типов указателей старший байт младший байт unsigned int a = 0 xddcc; void* ptr = &a; 0 unsigned 0 0 ch 0= *(unsigned 1 0 1 1 1 0 0 0 0 char 0 0 1 1 char*)ptr; printf(''%x %d'', a, ch); На экране: ddcc 204 ptr 1 1 0 0

Адресная арифметика Операции над указателями: присваивание ptr 1 = ptr 2; инкремент ptr 1++; Адресная арифметика Операции над указателями: присваивание ptr 1 = ptr 2; инкремент ptr 1++; декремент ptr 1 --; сложение ptr 2 = ptr 1 + 2; вычитание ptr 2 = ptr 1 — 3; где ptr 1 и ptr 2 — типизированные* указатели

Пример использования указателей Задача: в вещественную переменную ввести число. Просмотреть содержимое каждого байта указанной Пример использования указателей Задача: в вещественную переменную ввести число. Просмотреть содержимое каждого байта указанной переменной. Ввели: 0. 21875 (0. 00111 ) Ответ: 1 байт — 0 2 #include 2 байт — 0 3 байт — 96 int main() { Ввели: -0. 21875 (-0. 001112) Ответ: float num; 1 байт — 0 2 байт — 0 3 байт — 96 scanf("%f", &num); unsigned char*pbyte=(unsigned char*)# printf("1 byte %u ", *pbyte); printf("2 byte %u ", *(pbyte+1)); printf("3 byte %u ", *(pbyte+2)); printf("4 byte %u ", *(pbyte+3)); return 0; } 4 байт - 62 4 байт - 190

Перечислимый тип enum color{red, blue, black=4, green}; int var; switch (var) { case red: Перечислимый тип enum color{red, blue, black=4, green}; int var; switch (var) { case red: printf(''Это красный цвет''); break; case blue: printf(''Это синий цвет''); break; case black: printf(''Это черный цвет''); break; case green: printf(''Это зеленый цвет''); }

Тип void Использование: 1. для объявления функции, не возвращающей значение void My. Fn( ); Тип void Использование: 1. для объявления функции, не возвращающей значение void My. Fn( ); 2. для объявления функции, не имеющей параметров void My. Fn (void); 3. для объявления переменной — бестипового указателя void* pointer;

Структура программы на языке C 1. Директивы препроцессора 2. Объявления переменных (локальные, глобальные) 3. Структура программы на языке C 1. Директивы препроцессора 2. Объявления переменных (локальные, глобальные) 3. Инициализация (определение) переменных 4. Объявление функции (прототип) 5. Реализация (определение) функции

#include <stdio. h> float sum() { float a; float b = 12; a = #include float sum() { float a; float b = 12; a = 2*b; Пример 1 программы с функцией пользователя return a; } int main() { printf(''%fn'', sum()); return 0; } Локальные переменные

#include <stdio. h> float sum(); /* прототип функции */ int main() { printf(''%fn'', sum()); #include float sum(); /* прототип функции */ int main() { printf(''%fn'', sum()); return 0; } float sum() { float a, b=12; a = 2*b; b+=2; return a; } Пример 2 программы с функцией пользователя прототип функции

#include <stdio. h> float b = 12; /*глобальная переменная*/ float sum(); /* прототип функции #include float b = 12; /*глобальная переменная*/ float sum(); /* прототип функции */ int main() { printf(''%f %fn'', sum(), b); return 0; } float sum() { float a; a = 2*b; b+=2; return a; } Пример 3 программы с функцией пользователя Глобальная переменная

Пример 4 — оператор разрешения области видимости (С++) : : int x = 2; Пример 4 — оператор разрешения области видимости (С++) : : int x = 2; // глобальная переменная void fn() { int x = 1; // локальная переменная int z = x + : : x; printf(''z = %d'', z); }

Функция пользователя 1. Объявление функции 2. Определение (реализация) функции 3. Вызов функции Определение функции: Функция пользователя 1. Объявление функции 2. Определение (реализация) функции 3. Вызов функции Определение функции: тип_возвр_значения имя_функции (список параметров) { }

Функция, не возвращающая значение Прототип: Определение: void privet( ); void privet( ) { printf(''Privet!!!n''); Функция, не возвращающая значение Прототип: Определение: void privet( ); void privet( ) { printf(''Privet!!!n''); } Вызов: int main() { privet(); return 0; }

Функция с параметрами, возвращающая значение Прототип: float square(float, float); Определение: float square(float fa, float Функция с параметрами, возвращающая значение Прототип: float square(float, float); Определение: float square(float fa, float fb) { float c = fa*fa + fb*fb; return c; } Вызов: int main() { float a=3, b=4, d; d = square(a, b); printf(''%fn'', d); return 0; }

Массивы Тип элемента массива Индекс элемента массива Начальный индекс элемента массива — 0 Размерность Массивы Тип элемента массива Индекс элемента массива Начальный индекс элемента массива — 0 Размерность массива Объявление массива: int A[4]; float B[3][5]; char symb[5][6][4]; Инициализация одномерного массива: int A[4] = {5, -3, 8, 6};

Доступ к элементу массива Элемен 5 т -3 8 6 Индекс 1 2 3 Доступ к элементу массива Элемен 5 т -3 8 6 Индекс 1 2 3 a 0 int a[4]; 1. С помощью индекса: a[0] a[3] a[i] pritntf(''%d'', a[3]); 2. С помощью указателя: a — константа-указатель на начало массива a+1 — адрес элемента массива с индексом 0 *(a+1)<==> -3 *(a+i) <==> ?

Примеры 1. Ввести в числовой массив 5 вещественных чисел. Вычислить среднее арифметическое элементов массива. Примеры 1. Ввести в числовой массив 5 вещественных чисел. Вычислить среднее арифметическое элементов массива. 2. Ввести в числовой массив 8 вещественных чисел. Вычислить максимальное значение элемента массива.

Обращение к элементу одномерного массива с помощью переменнойуказателя int D[3] = {1, 2, 3}; Обращение к элементу одномерного массива с помощью переменнойуказателя int D[3] = {1, 2, 3}; int* ptr = D; for(int i=0; i<3; i++) { printf(''%7 d'', *ptr); ptr++; }

Двумерный массив 0 -1 -2 -3 -4 1 1 2 3 4 -5 -6 Двумерный массив 0 -1 -2 -3 -4 1 1 2 3 4 -5 -6 2 Объявление -7 int B[3][4]; -8 Инициализация int B[3][4] = {-1, -2, -3, -4, 1, 2, 3, 4, 0 1 2 3 5, -6, -7, -8}; Доступ к элементу B[2][1] <==> -6

Доступ к элементу двумерного массива с помощью указателей int B[3][4]; B *(*(B+1)+2) -1 -2 Доступ к элементу двумерного массива с помощью указателей int B[3][4]; B *(*(B+1)+2) -1 -2 -3 -4 1 1 2 3 4 2 *B, *(B+1), *(B+2) 0 -5 -6 -7 -8 *(*(B+j)+i), j - номер строки, i 0 - номер столбца 1 2 3

Комбинированные способы обращения к элементам двумерного массива 0 -1 -2 -3 -4 1 1 Комбинированные способы обращения к элементам двумерного массива 0 -1 -2 -3 -4 1 1 2 3 4 2 -5 -6 -7 -8 2 3 int B[3][4]; *(B[i]+j) (*(B+i))[j] 0 1

Задача Ввести с клавиатуры числа в двумерный массив, состоящий из 5 столбцов и 3 Задача Ввести с клавиатуры числа в двумерный массив, состоящий из 5 столбцов и 3 строк. Вычислить наименьшее значение элемента для каждой строки. Результаты вывести на экран.

Параметры функции 1. Передаются через стек 2. Виды параметров: • Параметр-значение • Параметр-указатель • Параметры функции 1. Передаются через стек 2. Виды параметров: • Параметр-значение • Параметр-указатель • Параметр-ссылка (в C++)

Передача параметра-значения float mult(float a) { a = 2*a; return a; } int main() Передача параметра-значения float mult(float a) { a = 2*a; return a; } int main() { float num = 15. 5; printf(''%. 3 f n'', mult(num)); printf(''%. 3 f '', num); return 0; } Ответ: 31. 000 15. 500

Передача параметра-указателя void mult 2(float* pa) { *pa = *pa * 2 } int Передача параметра-указателя void mult 2(float* pa) { *pa = *pa * 2 } int main() { float num = 15. 5; mult 2(&num); printf(''%fn'', num); return 0; } Ответ: 31. 000

Передача параметра-ссылки void mult 3(float &b) { b = b*2; } int main() { Передача параметра-ссылки void mult 3(float &b) { b = b*2; } int main() { float num = 15. 5; mult 3(num); printf(''%fn'', num); return 0; } Ответ: 31. 000

Пердача в функцию одномерного массива void My. Function(int* a, int n); где a - Пердача в функцию одномерного массива void My. Function(int* a, int n); где a - указатель на начало массива n — количество элементов в массиве void My. Function(int a[ ], int n); где a[ ] - эквивалент обозначению *a n — количество элементов в массиве Вызов функции: int massiv[6]; … My. Function(massiv, 6);

Задача Для одномерного массива, содержащего N целых числа, определить, сколько чисел имеют значение в Задача Для одномерного массива, содержащего N целых числа, определить, сколько чисел имеют значение в диапазоне от 100 до 10000. Заполнение массива выполнить с помощью генератора случайных чисел. Результат генерации и обработки массива вывести на экран. Заполнение, обработку массива и вывод результатов выполнить с помощью функций пользователя. Генерация случайных чисел : rand() (stdlib. h) Запуск генератора случайных чисел: srand() (stdlib. h и time. h)

Генератор случайных чисел int i, a[5], b[5]; srand(time(NULL)); // Запуск генератора for(i=0; i<5; i++) Генератор случайных чисел int i, a[5], b[5]; srand(time(NULL)); // Запуск генератора for(i=0; i<5; i++) { // Генерация в диапазоне 0 — RAND_MAX // RAND_MAX = 32767 (stdlib. h) a[i]=rand(); // Генерация в диапазоне 2 - 101 b[i]=rand()%100+2; }

Решение задачи (1) #include <stdio. h> #include <stdlib. h> #include <time. h> #define N Решение задачи (1) #include #include #include #define N 30 void generate(int* a, int n); void print_mas(int* a, int n); int count(int* a, int n);

Решение задачи (2) int main() { int mas[N]; generate(mas, N); print_mas(mas, N); printf(

Решение задачи (3) void generate(int* a, int n) { int i; srand(time(NULL)); for(i=0; i<n; Решение задачи (3) void generate(int* a, int n) { int i; srand(time(NULL)); for(i=0; i

Решение задачи (4) void print_mas(int* a, int n) { int i; for(i=0; i<n; i++) Решение задачи (4) void print_mas(int* a, int n) { int i; for(i=0; i

Решение задачи (5) int count(int* a, int n) { int c=0, i; for(i=0; i<n; Решение задачи (5) int count(int* a, int n) { int c=0, i; for(i=0; i=100 &&a[i]<=10000) c++; return c; }

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

Передача в функцию двумерного массива void My. Function(int mas[ ][3], int m, int n); Передача в функцию двумерного массива void My. Function(int mas[ ][3], int m, int n); где mas[ ][3] — адрес начала массива m и n — количество строк и столбцов в массиве Вызов функции: int massiv[4][3]; … My. Function(massiv, 4, 3);

Задача Ввести с клавиатуры числа в двумерный массив m x n. Вывести на экран Задача Ввести с клавиатуры числа в двумерный массив m x n. Вывести на экран массив в виде таблицы. Вывести на экран числа из второй строки в обратном порядке. Все действия над массивом выполнить с помощью функций

Решение задачи (1) #include <stdio. h> #include <stdlib. h> #define M 4 // количество Решение задачи (1) #include #include #define M 4 // количество строк #define N 3 // количество столбцов void input(int mas[][N], int m, int n); void print(int mas[][N], int m, int n); void revers(int row[], int n);

Решение задачи (2) int main() { int massiv[M][N]; input(massiv, M, N); print(massiv, M, N); Решение задачи (2) int main() { int massiv[M][N]; input(massiv, M, N); print(massiv, M, N); revers(massiv[1], N); return 0; }

Решение задачи (3) void input(int mas[][N], int m, int n) { int i, j; Решение задачи (3) void input(int mas[][N], int m, int n) { int i, j; for(i=0; i

Решение задачи (4) void print(int mas[][N], int m, int n) { int i, j; Решение задачи (4) void print(int mas[][N], int m, int n) { int i, j; for(i=0; i

=0;" src="https://present5.com/presentation/5090597_151676544/image-48.jpg" alt="Решение задачи (5) void revers(int row[], int n) { int i; printf("n"); for(i=n-1; i>=0;" /> Решение задачи (5) void revers(int row[], int n) { int i; printf("n"); for(i=n-1; i>=0; i--) printf("%7 d", row[i]); }

Объявление пользовательского типа typedef int mas[4]; typedef float mas 2[3][4]; Создание массива: mas One; Объявление пользовательского типа typedef int mas[4]; typedef float mas 2[3][4]; Создание массива: mas One; mas 2 Two; Передача массива в функцию: void My. Function 1(mas a, int n); void My. Function 2(mas 2 b, int m, int n);

Методы программирования Структурное программирование Модуль в С: *. h — заголовочный файл (внешняя часть Методы программирования Структурное программирование Модуль в С: *. h — заголовочный файл (внешняя часть модуля, интерфейс, header) • • • Директивы препроцессора Объявления типов данных Прототипы функций *. c, *. cpp, *. cc — реализация модуля (внутренняя часть модуля) • • • Объявления и инициализация переменных Реализация (определение) функций Директивы препроцессора

Конструирование программы для обработки двумерного массива Конструирование программы для обработки двумерного массива

My. Modul. h #define M 4 #define N 3 typedef int tmas 2[M][N]; void My. Modul. h #define M 4 #define N 3 typedef int tmas 2[M][N]; void input(tmas 2 mas, int m, int n); void print(tmas 2 mas, int m, int n); void revers(int row[], int n);

My. Modul. cpp #include ''My. Modul. h'' #include <stdio. h> #include <stdlib. h> void My. Modul. cpp #include ''My. Modul. h'' #include #include void input(tmas 2 mas, int m, int n){ int i, j; for(i=0; i=0; i--) { for(j=0; j

Main. cpp #include ''My. Modul. h'' int main() { tmas 2 massiv; input(massiv, M, Main. cpp #include ''My. Modul. h'' int main() { tmas 2 massiv; input(massiv, M, N); print(massiv, M, N); revers(massiv[1], N); return 0; }

My. Modul. h (2 редакция) #ifndef MYMODUL_H_INCLUDED #define M 4 #define N 3 typedef My. Modul. h (2 редакция) #ifndef MYMODUL_H_INCLUDED #define M 4 #define N 3 typedef int tmas 2[M][N]; void input(tmas 2 mas, int m, int n); void print(tmas 2 mas, int m, int n); void revers(int row[], int n); #endif // MYMODUL_H_INCLUDED

Задача В одномерный массив ввести целые числа. Сформировать второй массив, поместив в него 1, Задача В одномерный массив ввести целые числа. Сформировать второй массив, поместив в него 1, если соответствующий элемент первого массива имеет четное значение, и 0, если нечетное. Применить модульное построение программы.

Строки в C 1. Объявление строки как массива символов char str[10]; Инициализация: char str[10] Строки в C 1. Объявление строки как массива символов char str[10]; Инициализация: char str[10] = ''array''; char str[10] = {'a', 'r', 'a', 'y', ''}; char str[ ] = ''array''; 2. Объявление строки с помощью переменнойуказателя char *str 2; Инициализация: char *str 2 = ''array'';

Ввод и вывод строк char str[15]; Ввод с клавиатуры: scanf(''%s'', str); gets (str); Вывод Ввод и вывод строк char str[15]; Ввод с клавиатуры: scanf(''%s'', str); gets (str); Вывод на экран: printf(''%s'', str); puts (str); Присваивание значения: char *str 1; str 1 = str; или str 1 = ''строка'';

Функции для обработки строк Заголовочный файл: string. h 1. strlen (const char* str) — Функции для обработки строк Заголовочный файл: string. h 1. strlen (const char* str) — вычисляет фактическое количество символов в строке 2. strcmp (const char* str 1, const char* str 2) — сравнение строк str 1 и str 2 3. strcpy (char* str 1, const char* str 2) — копирование символов строки str 2 в строку str 1 4. strcat (char* str 1, const char* str 2) — конкатенация строк, т. е. добавление символов строки str 2 в конец строки str 1

Пример обработки строк char str 1[10] = ''работа_''; char str 2[8] = ''робот''; char Пример обработки строк char str 1[10] = ''работа_''; char str 2[8] = ''робот''; char str 3[100]; strcpy(str 3, str 1); strcat(str 3, str 2); strcat(str 3, ''а''); int n = strlen(str 3); printf(''Длина строки str 3 = %dn'', n); if (strcmp(str 1, str 2)>0) printf(''%s больше %sn'', str 1, str 2); if (strcmp(str 1, str 2)<0) printf(''%s меньше %sn'', str 1, str 2); if (!strcmp(str 1, str 2)) printf(''Одинаковые строкиn'');

Массивы строк Массив указателей на строки: char *strings[ ] = {''один'', ''два'', ''восемь''}; Двумерный Массивы строк Массив указателей на строки: char *strings[ ] = {''один'', ''два'', ''восемь''}; Двумерный массив символов: char array[ ][7] = {''один'', ''два'', ''восемь''};

Обработка символов в строках Заголовочный файл ctype. h isdigit( ) - распознает цифры isspace( Обработка символов в строках Заголовочный файл ctype. h isdigit( ) - распознает цифры isspace( ) - распознает пробелы isalpha( ) - распознает буквы islower( ) - распознает строчные буквы isupper( ) - распознает прописные буквы tolower( ) - преобразует прописные буквы в строчные toupper( ) - преобразует строчные буквы в прописные

Пример распознавания символов char str[30] = ''2011 год''; int n = strlen(str); for(int i=0; Пример распознавания символов char str[30] = ''2011 год''; int n = strlen(str); for(int i=0; i

Разбиение строки на лексемы char* strtok(char* s 1, const char*s 2) s 1 — Разбиение строки на лексемы char* strtok(char* s 1, const char*s 2) s 1 — указатель на разбиваемую строку s 2 — строка, содержащая символыразделители исходной строки Возвращаемое значение при последовательных вызовах: указатель на очередную лексему. Заголовочный файл string. h

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

#include <stdio. h> #include <string. h> int main() { char str[100]; char*p = NULL; #include #include int main() { char str[100]; char*p = NULL; char* str 1 = str; gets(str); p = strtok(str 1, "! "); // список разделителей - ! и пробел do { printf("n %s", p); p=strtok(NULL, "! "); } while (p!= NULL); return 0; } Пример использования функции strtok()

Структуры 1. Объявление типа структуры 2. Объявление структурной переменной Объявление типа (Person): struct Person Структуры 1. Объявление типа структуры 2. Объявление структурной переменной Объявление типа (Person): struct Person { char Name[30]; /*поле структуры*/ int Year; /*поле структуры*/ }; Объявление переменной (Nick): struct Person Nick;

Объявление тега структуры (синоним типа) typedef struct Person { char Name[30]; int Year; } Объявление тега структуры (синоним типа) typedef struct Person { char Name[30]; int Year; } PERSON; PERSON Ann;

Анонимный тип структуры struct { char Name[30]; int Year; } Tom; Tom — имя Анонимный тип структуры struct { char Name[30]; int Year; } Tom; Tom — имя перемной структурного типа Выделено памяти: 30 + 4 = 34 (байта)

Инициализация структурной переменной struct Person { char Name[30]; int Year; }; struct Person Stud Инициализация структурной переменной struct Person { char Name[30]; int Year; }; struct Person Stud 1 = {''John'', 1994}; struct Person Stud 2 = {''Ann'', 1993};

Действия над структурами 1. Обращение к полю структуры через имя переменной Stud 1. Year Действия над структурами 1. Обращение к полю структуры через имя переменной Stud 1. Year Stud 2. Name 2. Использование в вычислениях полей структур Stud 1. Year = 1992; int Age = 2011 - Stud 1. Year; strcpy(Stud 1. Name, ''Bill''); printf(''Имя: %s возраст: %d'', Stud 1. Name, Age); 3. Обращение к полю через указатель struct Person* p. Stud = &Stud 1; printf(''%s %d'', p. Stud->Name, p. Stud->Year);

Задача Создать тип данных — структуру, содержащую 3 поля: Марка машины, Фамилия владельца, Год Задача Создать тип данных — структуру, содержащую 3 поля: Марка машины, Фамилия владельца, Год выпуска. Создать две структурных переменных, ввести в них данные с клавиатуры. Определить, какая из двух машин новее. Вычислить срок эксплуатации каждой машины. Результаты вывести на экран. Эту же задачу решить для структуры, имеющей в составе 5 полей: Марка машины, Фамилия владельца, Год выпуска, Месяц выпуска, Дата выпуска.

Передача в функцию структурной переменной struct Person { char Name[30]; int Year; }; void Передача в функцию структурной переменной struct Person { char Name[30]; int Year; }; void input_struct(struct Person* P); void output_struct(struct Person P); int main() { struct Person Ann; input_struct(&Ann); output_struct(Ann); return 0; } void input_struct(struct Person* P) { scanf(''%s'', P->Name); scanf(''%d'', &P->Year); } void output_struct(struct Person P) { printf(''%s %dn'', P. Name, P. Year); }

Вложенные структуры Объявления типов: struct Person { char Name[30]; Объявление переменной: struct Student Nick Вложенные структуры Объявления типов: struct Person { char Name[30]; Объявление переменной: struct Student Nick = {1, {''Ivanov'', 1995}}; int Year; }; struct Student { int Kurs; struct Person Stud; }; Обращение к полям структуры: printf(''%dn'', Nick. Kurs); printf(''%sn'', Nick. Stud. Name); printf(''%dn'', Nick. Stud. Year);

Массив структур struct Person { char Name[30]; int Year; }; struct Person Mas[4]; Обращение Массив структур struct Person { char Name[30]; int Year; }; struct Person Mas[4]; Обращение к полю структуры в массиве: Mas[i]. Year = 1996; (Mas + i)->Year = 1993;

Передача в функцию массива структур struct Person { char Name[30]; int Year; }; void Передача в функцию массива структур struct Person { char Name[30]; int Year; }; void input_struct(struct Person* P, int n); void output_struct(struct Person* P, int n); int main() { struct Person su 11[25]; input_struct(su 11, 25); output_struct(su 11, 25); return 0; }

void input_struct(struct Person* P, int n) { int i; for(i=0; i<n; i++) { scanf(''%s'', void input_struct(struct Person* P, int n) { int i; for(i=0; iName, (P+i)->Year); } }

Объединения union myunion /* тип данных */ { int i; double d; char mas[12]; Объединения union myunion /* тип данных */ { int i; double d; char mas[12]; } myvar ; /* переменная */ sizeof(myvar) <=> 12

Пример программы union tag { int i; double d; } u; int main(void) { Пример программы union tag { int i; double d; } u; int main(void) { printf("integer number: n"); scanf("%d", &u. i); printf("%d n%en", u. i, u. d); printf("double number: n"); scanf("%lf", &u. d); printf("%d n%en", u. i, u. d); return 0; }

Инициализация объединения union tag { int i; double d; } u ={1. 2}; int Инициализация объединения union tag { int i; double d; } u ={1. 2}; int main(void) { printf("integer number: n"); printf("%dn", u. i); printf("%en", u. d); return 0; }