- •1. Лексические основы языка Си. Константы и модификаторы3. Выражения
- •2. Структура программы на языке Си. Функция main.
- •3. Функции. Структура функций. Разновидности. Особенности использования.
- •4. Типы данных. Классификация типов.
- •5. Базовые типы данных. Определение имени типа. Перечисление.
- •6. Представление данных в памяти компьютера.
- •7. Явное / Неявное преобразование типов. Абстрактный описатель.
- •8. Операторы. Классификация операторов. Приоритеты операторов и порядок их выполнения.
- •9. Инструкции языка Си, их классификация. Простые инструкции.
- •10. Инструкции языка Си, их классификация. Составные инструкции.
- •11. Производные типы данных. Статические массивы. Особенности использования массивов в функциях.
- •Статические массивы
- •12. Динамические массивы. Особенности обработки динамических массивов.
- •13. Производные типы данных. Указатели. Особенности использования. Адресная арифметика.
- •14. Операции над указателями. Указатели и модели памяти. Модификаторы.
- •15. Массивы и указатели. Передача и возврат параметров в функцию.
- •16. Указатели на функции. Особенности использования.
- •17. Указатели на указатели. Косвенная адресация. Многоуровневые ссылки.
- •18. Динамические структуры данных. Списки. Особенности использования.
- •19. Строки. Операции над строками. Указатели на строки.
- •20. Структурные типы данных: структуры. Особенности использования.
- •21. Структуры и объединения. Особенности использования.
- •22. Структуры. Массивы структур. Передача массивов структур в функции.
- •23. Указатели и структуры. Передача структур по указателю.
- •24. Структура битовых полей. Особенности использования.
- •25. Основы файловой системы: файл, каталог, дисковод, полное имя файла, внутреннее представление информации в файле. Типы файлов.
- •26. Файлы. Особенности обработки файлов последовательного доступа.
- •27. Файлы. Особенности обработки файлов произвольного доступа.
- •28. Память. Классы памяти. Модификаторы классов памяти. Область видимости, время жизни и место размещения объекта в памяти.
- •29. Передача параметров в функцию main. Аргументы командной строки. Директивы препроцессора.
- •30. Функции с переменным списком параметров. Механизмы передачи параметров в функции с переменным списком параметров.
- •Void va_start(arg_ptr,prav_param);
- •Va_list arg_ptr;
- •31. Перегрузка функций. Встроенные функции.
- •32. Передача в функции аргументов по умолчанию.
- •33. Шаблоны функций. Особенности и использования.
- •1. Достоинства, отличительные особенности и сравнительная характеристика языка программирования Си.
- •8. Точка входа в программу.
- •9. Создание файла проекта. Заголовочные файлы и файлы реализации. Законы видимости идентификаторов.
- •Назначение
- •10. Создание файла проекта. Объектные файлы. Раздельная компиляция. Make-файлы.
- •11. Оптимизация кода – алгоритмы, методы и приемы программирования.
- •12. Этапы сборки приложения с использованием компилятора gcc в среде разработки Linux / qt Creator.
- •13. Особенности сборки программы в среде разработки qt-Creator.
- •14. Контроль ошибок в процессе сборки программы: ошибки сборки, ошибки компиляции, утечки памяти, выход за границы,…
- •Пример использования
- •15. Интеграция программ. Использование ассемблерных вставок, вставок для мк. Си-код для гаджетов.
- •16. Особенности использования, преимущества и недостатки кроссплатформенной среды разработки qt creator.
- •17. Особенности использования, преимущества и недостатки компилятора gcc.
- •18. Основные принципы и подходы технологии событийного программирования.
- •19. Особенности среды визуального программир
- •Модель программирования Windows Forms
- •Приложение "Hello World" с Windows Forms
- •20.Управляемый код и данные. Особенности создания приложений в среде Framework .Net - единый каркас среды разработки
- •__Gc arrays
- •__Value
- •Интерфейсы
21. Структуры и объединения. Особенности использования.
Массивы структур
Обычно создание в программе одной переменной структурного типа не имеет особого смысла. Чаще структурами пользуются, когда необходимо описать множество похожих объектов, имеющих разные значения признаков. Значения каждого объекта следует объединить вместе (в структуру) и тем самым отделить от значений других объектов. Например, описание ряда книг или множества людей. Таким образом мы можем организовать массив, где каждый элемент представляет собой отдельную структуру, а все элементы принадлежат одному и тому же структурному типу.
Пример:
struct computer { char *type; char *proc; int qty; };
void viewer (struct computer *);
void changer (struct computer *);
main () {
struct computer comps[N]= {
"Desktop", "earlier then P4", 10,
"Desktop", "P4", 30 ,
"Desktop", "Core", 20 ,
"Desktop", "AMD", 2 ,
"Notebook", "Core", 1 };
viewer(comps);
changer(comps);
viewer(comps);
}
void viewer (struct computer *comp) {
int i;
for (i=0; i < N; i++, comp++)
printf("%2d) %-8s - %-15s: %3d\n", i+1, comp->type, comp->proc, comp->qty);
}
void changer (struct computer *comp) {
int i, differ;
printf("Введите номер модели: ");
scanf("%d", &i); i--;
printf("На сколько уменьшить или увеличить: ");
scanf("%d", &differ);
(comp+i)->qty += differ;
}
Массив структур инициализируется при его объявлении.
Функции viewer() и changer() принимают указатели на структуру computer.
В теле viewer() указатель инкрементируется в заголовке цикла; таким образом указывая на следующий элемент массива, т.е. на следующую структуру.
В выражении (comp+i)->qty скобки необходимы, т.к оператор -> имеет более высокий приоритет. Скобки позволяют сначала получить указатель на i-ый элемент массива, а потом обратиться к его полю.
Декрементирование i в функции changer() связано с тем, что индексация начинается с нуля, а номера элементов массива, которые пользователь видит на экране, с единицы.
Для того, чтобы уменьшить количество компьютеров, при запросе надо ввести отрицательное число.
22. Структуры. Массивы структур. Передача массивов структур в функции.
Структурой в языке C называется совокупность логически связанных переменных различных типов, сгруппированных под одним именем для удобства дальнейшей обработки.
Структура – это способ связать воедино данные разных типов и создать пользовательский тип данных.
Общий вид:
struct my_struct
{
<тип> <имя 1-го элемента>;
<тип> <имя 2-го элемента>;
…………
<тип> <имя последнего элемента>;
} [<имя переменной типа заданной структуры (возможно массива)>];
Массив структур - обыкновенный массив элементов типа определённой нами структурой (подобный массиву любого другого типа), например
my_struct first[99];
даст нам массив first из 100 элементов типа my_struct. Как можно отсюда заметить, индексируется массив структур с 0.
Чтобы передать массив структур в функцию, необходимо в вызове функции написать имя массива (оно является указателем на первый его элемент). Причём неважно, как задан массив:
void main()
{
[какой-то код]
my_struct example1[N];
my_struct *example2;
int N = 10, M = 20; // размеры массивов
print(example1, N); // N нужно передать, чтобы функция знала
init(example2, N); // размер массива
[какой-то код]
}
void print(my_struct *st, int N)
{
// печать массива структур
}
void init(my_struct *st, int M)
{
// инициализация массива
}
