- •Языки программирования. Классификация. Яп Си. Место Си в различных классификациях. Преимущества и недостатки.
- •2 Базовые конструкции яп. 3 вида констант *целочисленные, действительные, строковые). Правило составления идентификатора. Зарезервированные слова.
- •Константы
- •3 Общая структура программы на Си. Понятие функции. Функция main. Лексема.
- •Int main() // главная функция
- •5. Схема создания исполняемой программы
- •6. Понятие типа данных. Базовые типы данных языка Си и их характеристика.
- •7. Размещение программы в памяти. 4 цели использования памяти. 6 моделей памяти
- •8 Понятие переменной и 3 ее характеристики. Статические и динамические переменные. Операция присваивания.. Область действия переменной.
- •10 Внешняя память. Понятие глобальной и локальной переменной. Объявление с различными классами памяти.
- •11 Функции. Определение. Имя функции. Независимость. Возвращаемое значение. Прототип. Синтаксис прототипа функции. Оператор return.
- •Int func(int, double, int); // описание прототипа функции
- •12 Структурное программирование. Преимущества структурного программирования. Обработка вызова функции.
- •13 Различия между аргументами и параметрами функции. Передача в функцию адресов переменных.
- •14 Идентификатор, объявленный как функция. Правила определения области видимости функции. Формат вызова функции.
- •16 Понятие массива. Объявление массива. Случаи, в которых константное выражение может быть опущено. Сечение массива.
- •17 Пример объявления символьного массива. Вычисление адреса элемента массива. Связь между массивами и указателями.
- •19 Массивы указателей типа char(указатели и строки). Инициализация символьных массивов. Действия оператора «*».
- •20 Указатели на функцию. Объявление. Инициализация и использование указателя на функцию.
- •21 Передача указателя как аргумента в функцию. Встраиваемые функции. Ключевое слово inline.
- •22 Передача массивов в функцию (2 способа).
- •23 Функции с переменным числом параметров. Подключение stdarg.H. Средства работы и макросы
- •Va_start (ptr, последний_явный_параметр);
- •24 Массивы и динамическая память. Функции malloc, calloc, realloc, free- прототипы и краткий анализ.
- •25 Структуры. Понятие. Объявление. Определение. Обращение к полям структуры.
- •26 Сложные структуры. Структуры, содержащие массивы
- •28 Структуры и указатели. Указатели, как поля структур. Создание указателей на структуры. Указатели и массивы структур. Передача структур в функции.
- •29 Объединения. Определение. Создание. Инициализация. Обращение к отдельным объектам объединения. Создание структурных типов с помощью спецификатора typedef.
- •30 Создание динамически связанных структурных типов. Линейный список. Двусвязный список.
- •31 Потоки ввода-вывода. Понятие потока. Текстовые и двоичные потоки. Стандартные потоки.
- •32 Файлы. Имена файлов. Открытие файла. Ситуации, считающиеся ошибочными, в результате которых функция возвращает значение 0.
25 Структуры. Понятие. Объявление. Определение. Обращение к полям структуры.
Структура — составной объект, в который входят элементы нескольких типов.
Объявление структуры:
struct <имя_структуры>{<определение_элементов>};
Пример
struct date
{
int year;
char month;
char day;
};
Обращение к элементам структуры производится через точку. Например:
str.name="Иванов";
Определение структуры не создаёт объекта, а определяет новый тип, который может использоваться в будущем для определения объектов.
Пример:
#include ...
struct point
{
int x,y;
};
double dist(struct point A, struct point B)
{
dobule d;
d = sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y));
return d;
}
void main()
{
struct point A,B;
cin >> A.x >> A.y;
cin >> B.x >> B.y;
cout << "AB=" << dist (A,B);
}
26 Сложные структуры. Структуры, содержащие массивы
Структурный тип данных может включать в себя другие структуры или массивы в качестве элементов.
Например:
struct rectangle
{
struct point topleft;
struct point bottomright;
} mybox;
mybox.topleft.x=10;
mybox.topleft.y=10;
mybox.bottomright.x=100;
mybox.bottomright.y=120;
27 Массивы структур. Инициализация структур.
После объявление структуры ставится знак = и в фигурных скобках записывается список значений, разделённый запятыми
Структуры часто образуют массивы. Чтобы объявить массив структур, вначале необходимо определить структуру, а затем объявить переменную массива этого же типа.
Как и в других массивах переменных, в массивах структур индексирование начинается с 0.
Инициализация структуры в языке си ( c ) происходит так же, как и при инициализации массива. Вот пример инициализации структуры:
struct klass a = {"Sergey", 'B', 4.5 };
Т.е. мы создаем переменную типа struct klass и присваиваем всем трем полям, которые у нас определенны в структуре, значения. Порядок очень важен при инициализации структуры, так как компьютер сам не может отсортировывать данные. Если какое-либо поле у вас будет не заполненным, то оно автоматом заполнится 0 - для целочисленных типов; NULL - для указателей; \0 (ноль-терминатор) - для строковых типов.
struct student
{
char name[25];
int score;
group[8];
} stud1 = {"Ivanov I.I.", 34, "VIS-21"};
28 Структуры и указатели. Указатели, как поля структур. Создание указателей на структуры. Указатели и массивы структур. Передача структур в функции.
№28 Структура – это сложный тип данных представляющий собой упорядоченное в памяти множество элементов различного типа. Каждый элемент в структуре имеет свое имя и называется полем. Указатель – это переменная, значением которой является адрес, по которому располагаются данные. Указатели — поля структуры объявляются так же, как и в других местах
struct data
{
int *value;
int *date;
} first;
Инициализирование можно выполнить, присвоив полям структуры адреса подходящих переменных.Пусть есть две переменных:
int a,b;
first.value = &a;
first.data = &b;
Создание указателей на структуры. указатель на структуру объявляется с помощью звездочки *, которую помещают перед именем переменной структуры. Например, для ранее определенной структуры addr следующее выражение объявляет addr_pointer указателем на данные этого типа (то есть на данные типа addr): struct addr *addr_pointer; Указатели на структуры используются главным образом в двух случаях: когда структура передается функции с помощью вызова по ссылке, и когда создаются связанные друг с другом списки и другие структуры с динамическими данными, работающие на основе динамического размещения. В этой главе рассматривается первый случай. У такого способа, как передача любых структур функциям, имеется один большой недостаток: при выполнении вызова функции, чтобы поместить структуру в стек, необходимы существенные ресурсы.Надо передавать не саму структуру, а указатель на нее. Когда функции передается указатель на структуру, то в стек попадает только адрес структуры. Указатели и массивы структур Чтобы объявить массив структур, вначале необходимо определить структуру (то есть определить агрегатный тип данных), а затем объявить переменную массива этого же типа. Например, чтобы объявить 100-элементный массив структур типа addr, который был определен ранее, напишите следующее: struct addr addr_list[100];Это выражение создаст 100 наборов переменных, каждый из которых организован так, как определено в структуре addr. Передача структур в функции- При передаче функции члена структуры передается его значение, притом не играет роли то, что значение берется из члена структуры. Проанализируйте, например, следующую структуру:
struct fred
{
char x;
int y;
float z;
char s[10];
} mike;
func(mike.x); /* передается символьное значение x */
для передачи целой структуры используется обычный способ вызова по значению
Создание указателей на структуры
В языке Си можно объявлять и использовать указатели на структуры точно так же, как и другие типы данных
struct student st;
struct student *ptr;
ptr = &st;
ptr — указатель на st
*ptr — сама структура st
Обращение к полям: (*ptr).score = 1000;
Другой способ доступа к полям, используя указатель — стрелка. Так называемое косвенное обращение к элементам структуры.
Вышеуказанный пример будет:
ptr->score = 1000;