- •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
- •Интерфейсы
1. Достоинства, отличительные особенности и сравнительная характеристика языка программирования Си.
ДОСТОИНСТВА ЯЗЫКА СИ |
|
|
Сравнительная характеристика языков С и С++
C++ — это объектно-ориентированный язык программирования, фундаментом которого является С. Язык С — это подмножество C++ и, следовательно, C++ — надмножество С.
В общем случае, компилятор C++ можно использовать для компиляции программы, написанной на С. Поскольку C++ основан на стандарте С89, при написании программы С, рассчитанной на компилятор C++, допускается использование только тех возможностей языка, которые предусмотрены в С89.
При написании программы на С, рассчитанной на компилятор C++, необходимо правильно указывать расширение файла, содержащего текст программы. Согласно действующему соглашению, файлы программ, написанных на С имеют расширение .С, а написанных на C++ — .СРР. Присвоение расширения .СРР файлу программы, написанной на С, недопустимо, потому как эти языки все же существенно отличаются друг от друга, и компилировать программу на С так, будто это программа на C++, нельзя. Расширение .С указывает транслятору на то, что он должен компилировать программу, написанную именно на С.
|
Си |
Си++ |
|
Java |
||
Объектное ориентирование |
+ |
+ |
+ |
+ |
||
Создание объектов на стеке |
+ |
+ |
+/- |
- |
||
Инструкция goto |
+ |
+ |
+ |
- |
||
Поддержка try/catch |
- |
+ |
+ |
+ |
||
Инструкции break без метки |
+ |
+ |
+ |
+ |
||
Инструкции break c меткой |
- |
- |
- |
+ |
||
Многомерные массивы |
+ |
+ |
+ |
+ |
||
Динамические массивы |
- |
+ |
+ |
+ |
2. Особенности отладки программ в среде Visual C++ Studio .NET.
3. Этапы разработки программы на языке Си в среде Visual C++ Studio .NET.
4. Основные принципы и подходы структурного программирования:.
5. Идеология модульного программирования, уровни абстракции.
6. Базовые структуры управления, сквозной структурный контроль.
7. Модульное программирование. Структура модуля. Законы видимости
идентификаторов.
Суть модульного программирования состоит в разбиении сложной задачи на некоторое число более простых подзадач и составлении программ для решения достаточно независимо друг от друга. Модульность является одним из основных принципов построения программных проектов. В общем случае модуль - отдельная функционально законченная программная единица, некоторым образом идентифицируемая и объединяемая с другими, средство определения логически связанной совокупности объектов, средство их выделения и изоляции. Модуль является средством декомпозиции не только структур управления, но и структур данных. Этому в значительной мере способствовало развитие понятия "тип данных".
Модуль является единицей компиляции, хранения, а также единицей проектирования и раздельной разработки программного проекта коллективом разработчиков. Таким образом, модуль понимается как средство определения логически связанной совокупности объектов, средство их выделения и изоляции.
Создание модулей и использование их объектов в программах является одним из приемов экономичного программирования что обуславливается следующими обстоятельствами.
Во-первых, в модуле обычно определяются объекты, являющиеся носителями базовых понятий некоторой "предметной" области, так что модуль задает контекст этой предметной области. Поэтому программы, которые будут выполнять различные алгоритмы обработки в этой области, смогут воспользоваться готовыми и, что важно, одинаковыми определениями базовых объектов.
Во-вторых, и модули, и использующие их программы компилируются независимо (модуль должен быть откомпилирован раньше использующей его программы). Благодаря этому время компиляции большой программы использующей готовые модули, существенно сокращается, что важно при отладке программ, когда приходится их компилировать многократно.
Третьим важным свойством модуля является то, что он скрывает, "инкапсулирует" представление и реализацию экспортируемых им объектов, так что их возможные изменения в модуле (при его настройке или адаптации к новым аппаратным возможностям) не требуют никаких переделок пользовательских программ.
Все модули используют мнемонические имена для определяемых ими объектов (констант, переменных, типов и подпрограмм), что облегчает понимание их назначения и запоминание, удовлетворяет требованию наглядности текста программ.
Языки программирования, поддерживающие модульный подход, описывают модуль как программную единицу, состоящую из двух основных частей - спецификации (интерфейса) и реализации. В спецификации приводятся такие характеристики объектов модуля, которые необходимы и достаточны для использования этих объектов в других модулях и программах. Это позволяет использовать объекты модулей только на основе информации об их интерфейсе (не ожидая их полного описания). В реализационной части модуля описывается представление и алгоритмы обработки, связанные с теми или иными объектами модуля.
Модуль является одним из средств, облегчающих верификацию программ. Модуль, как средство создания абстракции, выделяет спецификацию и локализует сведения о реализации.
Модули служат также целям создания проблемно-ориентированного контекста и локализации машинной зависимости.
Концепция модульного программирования
Концепцию модульного программирования можно сформулировать в виде нескольких понятий и положений:
Функциональная декомпозиция задачи - разбиение большой задачи на ряд более мелких, функционально самостоятельных подзадач - модулей. Модули связаны между собой только по входным и выходным данным.
Модуль - основа концепции модульного программирования. Каждый модуль в функциональной декомпозиции представляет собой "черный ящик" с одним входом и одним выходом. Модульный подход позволяет безболезненно производить модернизацию программы в процессе ее эксплуатации и облегчает ее сопровождение. Дополнительно модульный подход позволяет разрабатывать части программ одного проекта на разных языках программирования, после чего с помощью компоновочных средств объединять их в единый загрузочный модуль.
Реализуемые решения должны быть простыми и ясными. Если назначение модуля непонятно, то это говорит о том, что декомпозиция начальной или промежуточной задачи была проведена недостаточно качественно. В этом случае необходимо еще раз проанализировать задачу и, возможно, провести дополнительное разбиение на подзадачи. При наличии сложных мест в проекте их нужно подробнее документировать с помощью продуманной системы комментариев. Этот процесс нужно продолжать до тех пор, пока действительно не удастся добиться ясного понимания назначения всех модулей задачи и их оптимального сочетания.
Назначение всех переменных модуля должно быть описано с помощью комментариев по мере их определения.
Структура модуля.
СписокИнструкцийПрепроцессора
СписокОператоров
Макроопределение
Оператор
Оператор
Оператор
Оператор
#define Идентификатор СтрокаЛексем
ОбъявлениеПеременной
ОбъявлениеФункции
ОпределениеФункции
ОпределениеФункции
#define IdHello "Hello…"
int *pIntVal[5];
/*
Объявлена переменная типа массив указателей размерности 5 на объекты типа int с именем pIntVal.
*/
СпецификаторОбъявления Описатель;
СпецификаторОбъявления Описатель ТелоФункции
СпецификаторОбъявления Описатель ТелоФункции
#define IdHello "Hello…"
int *pIntVal[5];
int Описатель (СписокОбъявленийПараметров);
float Описатель (СпецификаторОбъявления Имя ) ТелоФункции
unsigned int MyFun2 (int Param1, ...) СоставнойОператор
#define IdHello "Hello…"
int *pIntVal[5];
int MyFun1 (
СпецификаторОбъявления ,
СпецификаторОбъявления АбстрактныйОписатель Инициализатор,
);
float MyFun2 (СпецификаторОбъявления ИмяОписатель)
ТелоФункции
unsigned int MyFun3 (int Param1, ...) {СписокОператоров}
#define IdHello "Hello…"
int *pIntVal[5];
int MyFun1 (float, int *[5] = pIntVal);
/*
Объявление функции. В объявлении второго параметра используется
абстрактный описатель - он описывает нечто абстрактное, а, главное,
безымянное, вида *[5]. Судя по спецификатору объявления int,
расположенному перед описателем, "нечто" подобно массиву указателей
на объекты типа int из пяти элементов (подробнее о массивах после).
И эта безымянная сущность инициализируется с помощью инициализатора.
*/
float MyFun2 (char chParam1)
{
СписокОператоров
}
unsigned int MyFun3 (int Param1, …)
{СписокОператоров}
#define IdHello "Hello…"
int *pIntVal[5];
int MyFun1 (float, int *[5] = pIntVal); // Объявление функции.
// Определены две функции…
float MyFun2 (char chParam1)
{
extern int ExtIntVal;
char *charVal;
}
unsigned int MyFun3 (int Param1, …)
{
const float MMM = 233.25;
int MyLocalVal;
}
Итак, наш программный модуль представляет собой множество инструкций препроцессора и операторов. Часть операторов играет роль объявлений. С их помощью кодируется необходимая для транслятора информация о свойствах объектов. Другая часть операторов является определениями и предполагает в ходе выполнения программы совершение разнообразных действий (например, создание объектов в различных сегментах памяти).
После трансляции модуля предложения языка преобразуются во множество команд процессора. При всём различии операторов языка и команд процессора, трансляция правильно написанной программы обеспечивает точную передачу заложенного в исходный текст программы смысла (или семантики операторов). Программист может следить за ходом выполнения программы по операторам программы на C++, не обращая внимания на то, что процессор в это время выполняет собственные последовательности команд.
С процессом выполнения программы связана своеобразная система понятий. Когда говорят, что в программе управление передаётся какому-либо оператору, то имеют в виду, что в исполнительном модуле процессор приступил к выполнению множества команд, соответствующих данному оператору.
