- •1.2. Правила записи программ на языке с
- •1.3 Правила формального описания синтаксиса языка программирования
- •1.5.3. Описание данных в языке с
- •1.5.4 Правила записи констант различных типов
- •1.5.5. Символьные строки
- •Глава 2. Понятие функции
- •2.1. Стандартная функция printf
- •2.2. Стандартная функция scanf
- •Перед каждым аргументом, не являющимся строкой (адресом) ставится знак & и трактуется как вычисление адреса.
- •2.3. Стандартные математические функции
- •2.4. Простейшие функции, определяемые программистом
- •3.5. Дополнительные арифметические операции
- •3.6. Дополнительные операции присваивания
- •3.7. Битовые операции
- •3.8. Операторы отношения
- •Глава 4. Структурное программирование и язык с
- •4.2. Операторы языка с
- •4.3. Оператор цикла while
- •4.4. Оператор цикла do – while (цикл с постусловием)
- •4.5. Условный оператор и условная операция
- •4.6. Оператор цикла for (цикл с известным числом повторений)
- •4.7. Запись алгоритмов при помощи диаграмм Несси-Шнейдермана
- •4.8. Оператор прерывания цикла
- •4.9. Оператор продолжения цикла (continue)
- •4.10. Множественный выбор
- •Глава 5. Типовые приемы в программировании
- •5.1. Использование счетчиков
- •5.2. Вычисление суммы и произведения.
- •5.3. Вычисление минимума и максимума последовательностей.
- •5.4. Использование флагов
- •Глава 6. Простейшая графика
- •6.1.Графические режимы
- •6.2. Идеология bgi и WinBgi
- •6.3.Основные графические функции
- •6.3.1. Управление графическими режимами
- •6.3.2. Графические примитивы
- •6.3.3. Установки и их проверка
- •6.3.4. Работа с текстом
- •Глава 7. Модульное программирование
- •7.2. Библиотеки функций
- •Глава 8. Массивы
- •8.1. Описание массива
- •8.2. Ввод – вывод массивов
- •8.3. Инициализация массива
- •8.6. Двумерные массивы
- •8.6.1. Инициализация двумерного массива
- •8.7. Многомерные массивы
- •Глава 9. Работа с файлами
- •9.1. Открытие и закрытие файлов
- •Глава 10. Структуры языка с
- •10.1. Описание структур
- •10.2. Трактовка имени структуры
- •10.2.1. Доступ к полям структуры
- •10.3. Инициализация структур
- •10.4. Структуры и функции
- •10.5. Поля бит в структурах
- •10.6. Объединение
- •Глава 11. Дополнительные сведения о функциях
- •11.1. Области видимости.
- •Глава 12. Анимация
- •Глава 13. Рекурсия
- •13.1. Понятие рекурсии
- •13.2. Вычисление факториала
- •13.3. Числа Фибоначчи
- •13.4. Замена итерационных алгоритмов рекурсивными
- •13.5. Применение рекурсии в графике
Глава 10. Структуры языка с
Под структурой понимают совокупность данных разного типа, лежащих в непрерывной области памяти и объединенных общим именем. Общие черты с массивом – расположение элементов в непрерывной области памяти и общее имя для всей конструкции. Отличие – элементы могут быть различных типов.
Необходимость в структурах возникает тогда, когда объект характеризуется величинами разного типа. Например, товар на складе. Например, у него имеется название, цена, остаток.
10.1. Описание структур
1. Ключевое слово
struct
{
char name[21];
float prise;
int kolvo;
}
tovar;
Описана структурированная переменная tovar, которой будет выделено 21+4+4=29 байт.
2.struct _Goods
{
char name[21];
float prise;
int kolvo;
};
…
struct _Goods a;//описание переменной а
Описан пользовательский структурированный тип Goods. Переменные не описаны, память не выделялась.
3. Объединяет первый и второй
struct _Goods
{
char name[21];
float prise;
int kolvo;
}
good1,good2;
Тут описан тип и две переменные этого типа. Причем это не отменяет возможности описывать переменные другим способом.
4.
typedef char string[41];
string a,b,c;
typedef struct Googs
{
char name[21];
float prise;
int kolvo;
};
...
Goods x,y,z;
5.Только в С++.
В С++ разрешено вторым способом описанный тип при создании переменных не уточнять ключевым словом struct.
10.2. Трактовка имени структуры
Имя структуры обозначает всю область памяти, связанную со структурой. Поэтому можно целиком присвоить одну структуру другой такого же типа.
good1=good2;
Составные части структуры называются полями. Поля располагаются в памяти, в том порядке, в каком они описаны в структуре.
10.2.1. Доступ к полям структуры
Для доступа к полям структуры используется операция точка. . – селектор.
good1.prise //имя структурированной переменной и уточнение с помощью селектора. Имя переменной, имя поля и селектор.
Составное имя, полученное из имени структуры, селектора и имени поля обозначает значение соответствующего поля в соответствующей структуре.
На структуру можно описать указатели.
Goods *p;
p=&good1;
p->prise=8;
Для указателя на структуру используется селектор стрелочка.
10.3. Инициализация структур
Структуры могут быть проинициализированы подобно массивам.
Goods a={“Televizor”,15999.99,10}
При этом надо следить, чтобы порядок инициализирующих значений соответствовал порядку полей в описании структуры.
10.4. Структуры и функции
Структуры можно целиком передавать как аргументы и возвращать как значения функций. Пример: рассмотрим применение преобразование полярных координат в декартову без применения структур. Получить от функции декартовый координаты, передав им полярные, не получится, т.к. возвращаемое значение у функции может быть только одно. Поэтому в качестве аргументов передаются адреса пользовательских аргументов, куда следует записать результат.
void ToDecart(double a, double R, double *x, double *y);
{
*x=R*cos(a);
*y=R*sin(a);
}
double a,b;
ToDecart(0,3,&a,&b);
С помощью структур это можно реализовать следующим образом:
struct Polar
{
double a,b;
};
struct Decart
{
double x,y;
};
Decart ToDecart(Polar(p))
{
Decard d;
d.x=p.r*cos(p.a);
d.y=p.r*sin(p.a);
return d;
}
Polar c={3,0}
Передача структуры полностью может оказаться накладной. Поэтому часто в функцию передают адрес структуры.