- •Алфавит.
- •Объявления и определения
- •Структура и компоненты простой программы
- •Текст программы и препроцессор.
- •Структура программы.
- •Функция форматированного вывода.
- •Программы печати предельных констант.
- •Применимость вещественных данных.
- •Выделение лексем из текста программы.
- •2.2. Элементарные средства программирования Деление операторов языка Си на группы.
- •Программа оценки машинного нуля.
- •Трассировочная таблица
- •Переключатели
- •Ввод данных.
- •Вычисление объема цилиндра.
- •Операторы цикла
- •Три формы операторов цикла.
- •Приближенное значение экспоненты.
- •Оператор break.
- •Сумма отрезка степенного ряда.
- •Оператор continue.
- •Суммирование положительных чисел.
- •2.4. Массивы и вложение операторов цикла Массивы и переменные с индексами.
- •Вычисление среднего и дисперсии.
- •Упорядочение в одномерных массивах.
- •Инициализация массивов.
- •Моделирование многомерных массивов.
- •Ввод и вывод
- •7.1. Потоковый ввод-вывод
- •7.1.1. Открытие и закрытие потока
- •7.1.2. Стандартные файлы и функции для работы с ними
- •Ввод-вывод отдельных символов.
- •Ввод-вывод строк.
- •Форматный ввод-вывод.
- •Спецификаторы форматной строки для функции форматного вывода
- •Спецификаторы форматной строки для функции форматного ввода
- •Работа с файлами на диске
- •Двоичный (бинарный) режим обмена с файлами.
- •Строковый обмен с файлами.
- •Позиционирование в потоке.
- •Трехъязычный словарь "Цифры
- •7.2. Ввод-вывод нижнего уровня
- •7.2.1. Открытие / закрытие файла
- •7.2.2. Чтение и запись данных
- •7.2.3. Произвольный доступ к файлу
- •Теоретические положения Управление экраном в текстовом режиме в ms dos
- •Основные функции работы в текстовом режиме
- •2.5. Функции Определение функций.
- •Функция для вычисления объема цилиндра.
- •Функция для вычисления скалярного произведения векторов.
- •Обращение к функции и ее прототип.
- •Вычисление объема цилиндра
- •Вычисление площади треугольника.
- •Скалярное произведение векторов.
- •Препроцессорные средства
- •Глава 6. Структуры и объединения
- •6.1. Структурные типы и структуры Производные типы.
- •Структурный тип.
- •Определение структур.
- •Выделение памяти для структур.
- •Инициализация и присваивание структур.
- •Доступ к элементам структур.
- •Модули:
- •Некоторые понятия:
Определение структур.
Определение структур. Определения элементов (компонентов) структурного типа внешне подобны определениям данных соответствующих типов. Однако имеется существенное отличие. При определении структурного типа его компонентам не выделяется память, и их нельзя инициализировать. Другими словами, структурный тип не является объектом.
Из нашего примера определения структурного типа с названием goods следует, что наименование товара будет связано с указателем типа char*, имеющим имя name. Оптовая цена единицы товара будет значением элемента типа long с названием price. Торговая наценка будет значением элемента типа float с именем percent и т.д. Все это следует из приведенного определения структурного типа с названием goods. Но прежде чем элементы, введенные в определении структурного типа, смогут получить значения, должна быть определена хотя бы одна структура (т.е. структурированный объект) этого типа. Например, следующее определение вводит две структуры, т.е. два объекта, типа goods:
Итак, если структурный тип определен и известно его имя, то формат определения конкретных структур (объектов структурного типа) имеет вид:
struct имя_структурного_типа список_структур;
где список_структур - список выбранных пользователем имен (идентификаторов).
Выше показано, что для структурного типа, имя которого введено с помощью служебного слова typedef, определение структур не должно содержать спецификатора типа struct. Например, указатель на структуры для представления комплексных чисел с помощью определенного выше обозначения структурного типа complex можно определить так:
Выше был определен структурный тип "рациональная дробь", для которого введены два имени. С их помощью так вводятся конкретные структуры:
Кроме изложенной последовательности определения структур (определяется структурный тип, затем с использованием его имени определяются структуры) в языке Си имеются еще две схемы их определения. Во-первых, структуры могут быть определены одновременно с определением структурного типа:
struct имя_структурного_типа
{ определения_элементов }
список_структур;
Пример одновременного определения структурного типа и структур (объектов):
Здесь определен структурный тип с именем student и три конкретные структуры student_l, student_2, student_3, которые являются полноправными объектами. В каждую из этих трех структур входят элементы, позволяющие представить имя (name), фамилию (surname), курс (year), на котором обучается студент.
После приведенного определения в той же программе можно определять любое количество структур, используя структурный тип student:
Следующий вариант определения структур является некоторым упрощением приведенного варианта. Дело в том, что можно определять структуры, приведя "внутреннее строение" структурного типа, но не вводя его названия. Такой безымянный структурный тип обычно используется в программе для однократного определения структур:
struct
{ определения_элементов }
список _структур;
В качестве примера определим структуры, описывающие конфигурацию персонального компьютера с такими характеристиками:
• тип процессора (char [10]);
• рабочая частота в МГц (int);
• объем основной памяти в Мбайтах (int);
• емкость жесткого диска в Мбайтах (int).
Пример определения структур безымянного типа:
В данном случае введены три структуры (три объекта) с именами IBM_486, IBM_386, Compaq. В каждую из определенных структур входят элементы, в которые можно будет занести сведения о характеристиках конкретных ПЭВМ. Структурный тип "компьютер" не именован. Поэтому, если в программе потребуется определять другие структуры с таким же составом элементов, то придется полностью повторить приведенное выше определение структурного типа.