- •Часть 1
- •Общие сведения Сведения об эумк
- •Методические рекомендации по изучению дисциплины
- •Рабочая учебная программа
- •Часть 2 184
- •Пояснительная записка
- •Содержание дисциплины
- •Индивидуальные практические работы, их характеристика
- •Контрольные работы, их характеристика
- •Литература
- •Основная
- •Дополнительная
- •Перечень компьютерных программ, наглядных и других пособий, методических указаний и материалов и технических средств обучения
- •Учебно-методические пособия
- •Алфавит языка
- •Лексемы
- •Идентификаторы
- •Ключевые слова
- •Знаки операций
- •Константы
- •Комментарии
- •Тема 2. Типы данных Концепция типа данных.
- •Простые типы данных
- •Целый тип int
- •Символьный тип char
- •Типы с плавающей точкой: float, double, long double
- •Тема 3. Выражения
- •Переменные
- •Именованные константы
- •Операции
- •Операции присваивания
- •Инкремент и декремент
- •Унарный плюс и унарный минус (строка 2)
- •Явное преобразование типа
- •Операция определения размера sizeof
- •Деление и остаток от деления
- •Логические операции не, и, или (!, &&, ||)
- •Условная операция (?:)
- •Операция запятая (,)
- •Операции взятия адреса и разадресации
- •Тема 4. Операторы
- •Структура программы
- •Тема 5. Базовые конструкции структурного программирования
- •Операторы ветвления
- •1. Условный оператор if
- •2. Оператор switch
- •Операторы цикла
- •1. Цикл с предусловием while
- •2. Цикл с постусловием do-while
- •3. Цикл с параметром for
- •Тема 6. Массивы
- •Тема 7. Указатели и массивы
- •Тема 8. Строки символов
- •Тема 9. Структуры
- •Массивы структур
- •Битовые поля
- •Объединения
- •Перечисления
- •Тема 10. Функции
- •Глобальные, локальные и статические переменные
- •Параметры функции
- •Передача массивов в качестве параметров функции
- •Функция main, ее параметры
- •Функции стандартной библиотеки
- •Функции форматного вывода и ввода printf и scanf
- •Тема 11. Файлы
- •Тема 12. Работа с динамической памятью
- •Тема 13. Динамические структуры данных
- •Очереди
- •Линейные списки
- •Бинарные деревья
- •Практический раздел Общие указания Указания по выбору варианта
- •Порядок оформление итогового отчета
- •Индивидуальные практические работы Индивидуальная практическая работа 1 Методические указания
- •Варианты заданий.
- •Индивидуальная практическая работа 2 Методические указания
- •Варианты заданий
- •Контрольные работы Контрольная работа 1 Методические указания
- •Варианты заданий
- •Контрольная работа 2 Методические указания
- •Варианты заданий
Тема 9. Структуры
В отличие от массива, все элементы которого однотипны, структура может содержать элементы разных типов. Элементы структуры называются полями структуры и могут иметь любой тип, кроме типа этой же структуры, но могут быть указателями на него.
Сначала структуру нужно объявить (декларировать). Объявление структуры начинается с ключевого слова struct и содержит список описаний, заключенный в фигурные скобки, например:
struct point
{
int x, y;
char color[20];
};
где point – это имя структуры.
Имена полей структуры, а также ее имя могут совпадать с именами обычных переменных программы, т.к. они всегда различимы по контексту. Более того, одни и те же имена полей могут встречаться в разных структурах.
Объявив структуру, мы, тем самым, создаем новый, составной тип данных, который далее можно использовать обычным образом, например, запись:
struct point A, B, C;
с точки зрения синтаксиса аналогична записи:
int a, b, c;
и описывает 3 переменные структурного типа с именами A, B, C. Одновременно можно выполнить инициализацию полей структур:
struct point A = {50, 50, “Red”}, B, C = {100, 100, “Green”};
Можно совместить объявление структуры с описанием переменных структурного типа:
struct point
{
int x, y;
chat color[20];
} A = {50, 50, “Red”}, B, C;
Более того, если кроме A, B и C нам больше не нужны переменные этого типа, то имя point можно опустить.
Доступ к отдельному полю структуры выполняется посредством конструкции вида:
ИмяСтруктуры.ИмяПоля
Например, введем с клавиатуры данные в поля структуры B, а затем выведем эти данные на экран:
scanf("%d%d%s", &B.x, &B.y, &B.color);
printf("(%d, %d) %s", B.x, B.y, B.color);
Если описать указатель на структуру, то с его помощью можно также получить доступ к полям структуры посредством конструкции вида:
УказательНаСтруктуру->ИмяПоля
Например:
struct point *p;
p = &B;
scanf("%d%d%s", &p->x, &p->y, &p->color);
printf("(%d, %d) %s\n", p->x, p->y, p->color);
Если членом структуры является другая структура, то доступ к ее членам выполняется с помощью двух операций точечного выбора:
struct rect //задает прямоугольник, стороны которого ||-ы осям координат
{ // pt1 и pt2 – угловые точки, лежащие на диагонали прямоугольника
struct point pt1;
struct point pt2;
} R;
R.pt1.x = R.pt1.y = 50;
R.pt1.color = “Red”;
R.pt2.x = R.pt2.y = 100;
R.pt2.color = “Green”;
Массивы структур
В практике программирования большое распространение получили массивы структур, т.е. массивы, элементами которых являются переменные структурного типа. Например, оператор
struct point mas[3];
описывает массив, состоящий из трех элементов типа struct point. Описание можно дополнить инициализацией:
struct point mas[ ] = {{10, 10, “Red”}, {20, 20, “Green”}, {30, 30, “Blue”}};
Если инициализаторы – простые константы или строки символов, и все они имеются в наличии, во внутренних скобках нет необходимости:
struct point mas[ ] = {10, 10, “Red”, 20, 20, “Green”, 30, 30, “Blue”};
Ввод данных в массив структур с клавиатуры и вывод их на экран можно выполнить следующим образом:
int i;
for(i=0; i<3; i++)
{
scanf(“%d%d%s”, &mas[i].x, &mas[i].y, &mas[i].color);
printf("(%d, %d) %s", mas[i].x, mas[i].y, mas[i].color);
}
То же самое с использованием механизма указателей:
struct point *p;
p = mas;
for(i=0; i<3; i++)
{
scanf("%d%d%s", &(p+i)->x, &(p+i)->y, &(p+i)->color);
printf("(%d, %d) %s", (p+i)->x, (p+i)->y, (p+i)->color);
}