- •1. Основные операции языка Си.
- •3. Язык Си: указатели и массивы. Определения, примеры.
- •4. Язык Си: объявления функций, передача аргументов. Примеры.
- •5. Язык Си: строки и указатели. Определения, примеры.
- •8. Язык Си: структуры. Пример.
- •9 . Язык Си: битовые поля и объединения. Примеры.
- •10. Язык Си: оператор определения типа. Примеры.
- •11.Язык Си: препроцессор. Директивы препроцессора, примеры
- •12.Язык Си: программный стек. Пример работы стека.
- •13. Линейные списки. Операции с линейными списками.
- •14 Hash-таблицы
- •15 Двоичные деревья
- •17. Язык Си: ссылочные типы. Пример.
- •18. Язык Си: защита указателей и объектов, неявное изменение объектов.
- •19. Язык Си: организация ввода/вывода. Пример: слияние файлов. Организация ввода/вывода
- •Открытие файла
- •Закрытие файла
- •Ввод из файла
- •Вывод в файл
- •Особые ситуации
- •Пример: слияние файлов
- •20. Язык Си: произвольный доступ к файлам. Пример.
- •22. Язык Си: примеры реализаций функций ввода/вывода (getc,putc).
- •23. Язык Си: примеры реализаций функций ввода/вывода (fgets, fputs).
- •24. Язык Си: работа с файловой системой. Пример.
- •25. Основные понятия ооп: абстракция, инкапсуляция, наследование, полиморфизм.
- •27. Объекты классов: статические,автоматические, динамические. Примеры.
- •28. Управление доступом к элементам классов. Пример.
- •29. Шаблоны функций и шаблоны классов. Примеры.
- •30. Наследование. Пример.
- •31. Множественное наследование. Пример.
- •П оскольку классы-потомки наследуют все данные и методы классов-предков, в итоге имеем следующую картину:
- •32. Виртуальные функции. Раннее и позднее связывание.
- •33. Абстрактные классы. Их назначение, пример.
- •34. Полиморфный контейнер (пример).
- •36. Конструкторы, их виды, примеры. Вызов конструкторов при наследовании.
- •37. Деструкторы. Их назначение, примеры.
- •39. Перегруженные операции. Примеры.
- •40. Обработка нештатных ситуаций. Объекты-исключения. Примеры.
- •Вопрос 1: какова дальнейшая судьба этих ресурсов, будут ли они освобождены?
- •Вопрос 2: как распознавать подобные ситуации и корректно их обрабатывать?
- •41. Модели жизненного цикла программного обеспечения. Модели жизненного цикла по
- •Спиральная модель жизненного цикла по.
- •42. Проектирование программного обеспечения и uml.
- •Uml (основные понятия)
- •Канонические диаграммы языка uml 2.X
- •43. Диаграммы прецедентов. Нотация, семантика, примеры.
- •Основные обозначения на диаграммах прецедентов:
- •44. Сценарии выполнения прецедентов (пример).
- •45. Диаграммы классов. Нотация, семантика, отношения.
- •46. Атрибуты на диаграммах классов. Нотация и семантика. Примеры.
- •47. Операции на диаграммах классов. Нотация и семантика. Примеры.
- •48. Отношения ассоциации на диаграммах классов.
- •Отношения ассоциации
- •Предприятие
- •Сотрудник
- •Отношения обобщения
- •Отношения композиции
- •53. Язык c#: сборки, манифесты, домены, компоненты.
- •55. Java как язык ооп для машинно-независимых приложений.
- •56. Обзор Java-технологий NetBeans ide.
- •57. Компонентные технологии разработки программного обеспечения.
- •59.Обёртки в языках c# и Java.
- •60. Архитектурный паттерн mvc. Область применения, схема взаимодействия.
5. Язык Си: строки и указатели. Определения, примеры.
Строка есть массив символов, оканчивающийся символом ‘\0’. Пусть есть такое описание: static char s[] = “abcdef…z”;
char *sp = s;
Имя строки есть синоним адреса её первого элемента
Пример в/в строк:
используем две функции: char* gets (char*) и puts (char*)
{
char buffer[81], *p;
p = gets (buffer);
puts (buffer);
puts (p);
}
Пример: вычисление длины строки
int strlen (char* s) используем первый принцип адресной
арифметики
{
int n;
for (n = 0; *s != ‘/0’; s++) n++; просто подсчитаем
количество символов
return n;
}
или можно так:
int strlen (char* s) используем второй принцип адресной
арифметики
{
char* p = s;
while (*p) p++; признак конца строки ‘\0’
return(p - s); есть арифметический ноль, он же «ложь»
}
Пример: копирование строк
int strcpy (char* to, char* from) указатель to должен
{ адресовать область памяти,
while ( ( *to = *from ) != ‘\0’ ) достаточную для размещения
{ to++; from++; } исходной строки, которая
} адресуется указателем from
или можно проще
int strcpy (char* to, char* from)
{ признак конца строки ‘\0’
while ( *to++ = *from++ ) есть арифметический ноль,
} он же есть «ложь»
Здесь опять использован тот принцип, что в языке Си любое индексное выражение вида
<выражение-1> [<выражение-2>]
интерпретируется как
* (<выражение-1> + <выражение-2> )
6. Язык Си: аргументы командной строки. Пример.
Запуская исполняемый файл в DOS, можно указать для него ряд аргументов, например:
a.exe один два три
Операционная система сформирует массив указателей на строки символов (лексемы), которые появились в командной строке, и передаст их в функцию main. Количество лексем - это аргумент argc, массив указателей на лексемы - аргумент argv.
В нашем случае:
argv [0] -> “a.exe”
argv [1] -> “один”
argv [2] -> “два”
argv [3] -> “три”
Пример обработки аргументов командной строки:
main ( int argc, char* argv [] )
{
while (--argc )
printf (“ %s%c ”, *++argv, (argc > 1) ? ‘ ’ : ‘\n’ );
}
7. Язык Си: указатели на функции. Пример.
Указатели на функции
Рассмотрим три описания:
Char *f(); char(*g) (); char *(*(*h)()) [];
Здесь f- функция, g – указатель на функцию , h – тоже указатель на функцию, которая возвращает
Указатель на массив указателей на символы.
Пример:
#include <math.h> Double solve (double (*f) (double ), double guess) { double x; итерационная формула: do {x = guess; guess = x – (*f)(x); } xn+1=xn-f(xn)- f’(xn) while (fabs (x-guess)> 1.0e -10); пока |xn+1 – xn|>e return guess; } для простоты положили f’ (xn )=1
Void main () решим уравнения { sin(x) = 0 и cos (x) =0 Printf(“%f %f \n” , solve (sin, 0.1), solve(cos, 1.0)); } |
Решение нелинейного уравнение f(x) =0 упрощенным методом Ньютона
Резюме. Имя функции есть синоним адреса точки входа в функцию