- •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
- •Интерфейсы
19. Строки. Операции над строками. Указатели на строки.
Строка это последовательность символов, принадлежащих конечному множеству символов (алфавиту).
В языке Си строковый тип не предусмотрен, строкой служит массив данных символьного типа char, определяется как char S[n], где n – максимальный размер строки типа unsigned. Заметим, что в прототипах стандартных функций Си используется другое определение этого типа: typedef unsigned size_t. Конец строки определяется нулевым символом (байт, все биты которого нулевые), текущая длина строки равна числу символов до символа исключая его.
Создание и инициализация строкиСтрока определяется как массив данных символьного типа, например char S[80].Строка может быть инициализирована при ее определении: char S[40]="ЭTO стро-ка данных"; здесь оставшиеся свободными байты инициализируются нулями. Од-нако нельзя присвоить та¬кой строке новое значение оператором присваивания, например, оператор S="Hовая строка" является ошибочным.Можно определить динамическую строку: char* S1; Sl=(char*) calloc(40,sizeof(char))
Только такой строке в любой момент оператором присваивания можно присвоить значение строковой константы: S1="Иванов Иван Иванович".
Определение длины строки S. Осуществляемся последовательным просмотром и подсчётом символов S[i], пока не встретится символ конца строки. Прототип функции: size_t strlen(const char *S): результат (возвращаемое значение) - длина строки в байтах.
Заполнение строки заданным символом. Осуществляется только в пределах текущей длины строки, т.е. все символы строки от начала до конечного символа заменяются заданным символом, при этом длина строки остается прежней. Прототип функции: char* strset(char *S, int с), результат — указатель на начале строки S.
Заполнение части строки заданным символом. Отличается тем что заполняется только заданное число n символов, но в пределах текущей длины строки. Прото-тип функции: char* strnset(char *S, int c, size_t n).
Копирование строки S2 в строку S1. Строка S1 заполняетcя символами из строки S2, включая символ конца строки. Контроль выхода за пределы массива под строку S1 не осуществляется, это возлагается на программиста. Прототип функции: char* strcpy(char *S1, char *S2), результат — указатель на строку S1.
Соединение (конкатенация) строк S1 и S2. К концу строки S1 начиная с символа конца строки копируется строка S2. Строка S2 сохраняется. Длина строки S1 становится равной сумме длин строк S1 и S2, поэтому память, выделенная под S1, должна быть не меньше этой длины. Прототип функции: char* strcat(char S1, const char* S2), возвращаемое значение указатель на строку S1.
Сравнение двух строк S1 и S2.Осуществляется посимвольным сравнением строк. Так как длины строк L1 и L2 могут отличаться, то число сравниваемых символов ограничивается значением min(L1,L2)+l. В этом случае последними сравниваются символ из более длинной строки и нулевой символ замыкающий короткую строку. Сравнение строк заканчивается, когда будут исчерпаны все сравниваемые символы либо при неравенстве очередной пары символов. Результат операции определяется результатом последнего сравнения:
S1[i] == S2[i]) - равен нулю.
S1[i] < S2[i]) - меньше нуля.
S1[i] > S2[i]) - больше нуля.
Прототип функции:int strcmp(const char *S1, const char *S2).
Поиск и выделение лексических единиц в строке.char* strtok(char *S1, const char *S2); в строке S1 осуществляется поиск до первого любого символа-ограничителя, заданного строкой S2. Найденный символ-ограничитель в строке S1 заменяется символом конца строки . Возвращаемое значение — указатель на начало строки.
Поиск заданного символа в строке. Имеет две разновидности. Поиск первого вхождения символа oпределяет позицию, в которой встретился заданный символ при последовательном просмотре символов с начала строки. Поиск последнего вхождения отличается тем, что просмотр символов идет от конца строки к ее началу. Прототипы функций:char* strchr(const char *S, int с) и char* strrchr(const char *S, int c), возвращаемое значение указатель на найденный символ или NULL, если символ не найден.
Поиск в основной строке S1 символов, заданных в строке S2.Имеются три разновидности операции. Первая из них — поиск в строке S1 первого вхождения одного из символов, заданных в строке S2. Осуществляется просмотр символов Sl[i], начиная с начала строки и до ее конца. Если очередной символ Sl[i] совпадает с любым из символов строки S2, то поиск прекращается. Возвращаемое значение —указатель на найденный символ или NULL, если в строке не оказалось символов из строки S2. Прототип функции:char* strpbrk(const char *S1, const char *S2).
Вторая операция отличается от первой только тем, что определяется длина начальной части строки S1, в которой нет символов из строки S2. Прототип функции:size_t strspn(const char *S1, const char *S2).
Третья операция отличается от второй тем, что определяется длина начальной части строки S1, в которой содержатся только такие символы, которые принадлежат множеству символов из строки S2. Прототип функции:size_t strcspn(const char *S1, const char *S2).
