- •Структура программы на языке Си. Этапы выполнения программы
- •1.1. Алфавит языка Си
- •1.3. Идентификаторы и ключевые слова
- •1.4. Знаки операций
- •2. Переменные и константы. Типы данных
- •2.1. Основные типы данных
- •2.2. Декларация (объявление) объектов
- •2.4. Целочисленные константы
- •2.5. Константы вещественного типа
- •2.6. Символьные константы
- •2.7. Строковые константы
- •3. Обзор операций
- •3.2. Арифметические операции
- •3.3. Операции сравнения
- •3.4. Логические операции
- •4.1. Операция присваивания
- •Примеры недопустимых выражений:
- •4.2. Сокращенная запись операции присваивания
- •4.3. Преобразование типов операндов бинарных операций
- •4.4. Преобразование типов при присваивании.
- •4.5. Операция явного приведения типа
- •4.6. Операция «,» (запятая)
- •5.3. Консольные функции вывода данных на экран
- •5.4. Консольные функции ввода информации
- •6. Операторы языка с.
- •7.1. Условные операторы
- •If (выражение) оператор;
- •If (выражение) оператор 1 ;
- •If (выражение 1) оператор 1;
- •If (выражение 2) оператор 2;
- •If (выражение 3) оператор 3;
- •7.2. Оператор выбора альтернатив (переключатель)
- •7.3. Условная операция «? :»
- •8. Составление циклических алгоритмов
- •8.1. Оператор с предусловием while
- •8.2. Оператор цикла с постусловием do – while
- •8.3. Оператор цикла с предусловием и коррекцией for
- •9. Операторы передачи управления.
- •9.1. Оператор безусловного перехода goto
- •9.2. Операторы continue, break и return
- •10. Массивы
- •10.1. Одномерные массивы
- •10.2. Примеры алгоритмов, использующих одномерные массивы.
- •10.3. Многомерные массивы
- •11.5. Операция sizeof
- •11.6. Побитовые логические операции. Операции над битами
- •12.1. Строки как нуль-терминированные массивы char.
- •12.4. Преобразования строковых типов.
- •13. Функции пользователя и классы памяти.
- •13.1. Сущность и предназначение функций.
- •13.2. Определение и вызов функции.
- •13.3. Прототип функции.
- •13.4. Область видимости.
- •13.5. Классы памяти объектов в языке Cи.
- •13.6. Разбиение программы на модули.
- •14. Структуры и объединения
- •14.1. Понятие структуры
- •14.2. Декларация структурного типа данных
- •14.3. Объявление структурных переменных
- •14.4. Обращение к полям структуры
- •14.5. Операции со структурой как единым целым
- •14.6. Вложенные структуры
- •14.7. Массивы структур
- •14.8. Размещение структурных переменных в памяти
- •14.10. Объединения
- •16. Файлы в языке с
- •16.1. Типы файлов.
- •16.2. Открытие файла
- •16.3. Закрытие файла
- •16.4. Запись - чтение информации
- •А) Посимвольный ввод-вывод
- •Б) Построчный и форматированный ввод-вывод
- •В) Блоковый ввод-вывод
- •Int fflush(file *stream);
- •16.5. Текстовые файлы
- •16.6. Перенаправление стандартного ввода-вывода
- •16.7. Бинарные файлы
- •16.8. Дополнительные полезные функции
- •16.9. Простейший пример создания собственной базы данных
- •17. Указатели
- •17.1. Определение указателей
- •17.2. Связь указателей и массивов.
- •17.3. Операции над указателями (косвенная адресация)
- •17.4. Операции над указателями (косвенная адресация)
- •17.5. Массивы указателей.
- •17.6. Указатели на указатели.
- •17.7 . Указатели как параметры функций.
- •Void f1(int, const double *);
- •17.8 . Указатели на структуры
- •17.10. Указатели на функции
- •Id_функции(список аргументов);
- •18.1. Динамическое выделение и освобождение памяти.
14.3. Объявление структурных переменных
Как уже отмечалось само описание структуры не приводит к выделению под нее места в ОП. Теперь необходимо создать нужное количество переменных с приведенной структурой и сделать это можно двумя способами.
Способ 1. В любом месте программы для декларации структурных переменных, массивов, функций и т.д., используется объявленный в шаблоне структурный тип, например:
struct Stud_type student; - структурная переменная;
Stud_type Stud[100]; - массив структур;
int Fun(Stud_type W); - прототип функции с параметром структурного типа,
(Слово struct в первом примере является необязательным, и в остальных примерах оно опущено).
Способ 2: в шаблоне структуры между закрывающейся фигурной скобкой и символом «;» указывают через запятые идентификаторы структурных данных.
Для нашего примера, используя, можно записать:
struct Stud_type {
char Number[10], Fio[40];
double S_b;
} student, Stud[100];
Если дальше в программе не понадобится вводить новые данные объявленного структурного типа, имя типа «Stud_type» можно не указывать.
При декларации структурных переменных возможна их одновременная инициализация
Например:
struct Stud_type {
char Number[10], Fio[40];
double S_b;
} student = {“123456”, “Иванов И.И.”, 6.53 };
или:
Stud_Type stud1 = {“123456”, “Иванов И.И.” };
Отметим, что если список инициализации будет короче, то оставшиеся поля структурной переменной будут заполнены нулями.
14.4. Обращение к полям структуры
Обращение к полю структуры производится при помощи составных имен, которые образуются с использованием операции принадлежности (.) в виде:
ID_структуры . ID_поля
Пример обращения для объявленного ранее шаблона:
Stud_Type s1, s2;
Обращение к полям этих структур будет иметь вид:
s1. Number, s1. Fio, s1. S_b;
s2. Number, s2. Fio, s2. S_b;
Примеры операторов с обращением к их полям:
s1.S_b=7;
s2.S_b=6.5;
int k=strcmp(s1. Number, s2. Number);
14.5. Операции со структурой как единым целым
Для структур одинакового типа допустимы следующие операции:
Присваивание: s1=s2;
Сравнение на равенство и неравенство: s1==s2 либо s1!=s2
Подстановка в качестве аргумента на место параметра функции:
int Fun(Stud_type W);
...
int d=Fun(S1);
14.6. Вложенные структуры
Структуры могут быть вложенными, т.е. поле структуры может cамо быть структурой, описание которой должно предшествовать описанию внешней структуры.
Например, в структуре person, содержащей сведения - Ф.И.О., дата рождения, можно сделать дату рождения внутренней структурой date по отношению к структуре person. Тогда шаблон такой конструкции будет выглядеть так:
struct date {
int day, month, year;
};
struct person {
char fio[40];
struct date f1;
} ;
Объявляем переменную такой структуры:
struct person a;
Тогда, обращение к полям структурной переменной a будет выглядеть следующим образом:
a .fio a.f1.day a.f1.month a.f1.year