Язык программирования Си
1 курс, 1 семестр Язык: русский
Описание
Данный курс посвящен:
- Изучению языка программирования Си с углублением в темы, связанные с системным программированием (реализация программ, ABI, окружение исполнения)
- Знакомству с культурой программирования: стили кодирования, статические и динамические анализаторы кода, автоматическое тестирование, ревью кода
Преподаватель
-
Соловьёв Владимир Валерьевич
Организация курса
Курс читается в течение одного учебного семестра (16 недель, 3 академических часа в неделю). В течение всего курса студенты решают практические задания, в середине курса проводится контрольная работа по теории, в конце курса - зачёт по теории.
Система оценки
Для оценки успеваемости используется балльно-рейтинговая система. За практические задания студенты получают от 1 до 6 баллов в зависимости от сложности задания (в сумме 70 баллов максимум). За контрольную работу студенты получают 5 баллов максимум.
Таким образом в течение семестра можно получить 75 баллов. Если студент получает 67 баллов, он получает оценку отлично автоматом. Если студент получает 50 баллов, он может, при желании, получить оценку удовлетворительно автоматом.
Студент, не получивший оценку автоматом, либо не согласный с ней, приглашается на зачёт по теории. В ходе него студент может получить 25 баллов. Итоговая оценка определяется следующими границами:
- 85 - отлично
- 70 - хорошо
- 50 - удовлетворительно
Если студент не может получить 50 баллов даже после зачёта по теории, количество дополнительных вопросов на зачёте увеличивается с целью достижения 50 баллов, но не более 54 возможных.
Практические задания
Все практические задания сдаются посредством системы GitHub Classroom. На каждое задание даётся фиксированное время выполнения (от 1 до 3 недель), за которое студент должен пройти все этапы, включающие:
- Контроль стандарта кодирования
- Контроль компиляции с высшим уровнем предупреждений
- Контроль санитайзерами
- Автоматические тесты
- Контроль корректности решения (решение корректно, если не содержит грубых ошибок, пропущенных тестами и санитайзерами, специальных конструкций для прохождения конкретных тестов и плагиата)
Сложные задания также включают в себя этапы:
- Прохождения ревью кода
- Защиту решения на семинаре
Плагиат недопустим. При обнаружении плагиата балл получает только студент, первым приславший решение.
Контрольная работа
Контрольная работа проходит в форме теста из 50 вопросов по 0.1 балла каждый, которые нужно решить в течение 45 минут. Темы вопросов включают весь теоретический материал первой половины курса. Результаты контрольной, помимо балла, также заносятся в ведомость контрольной недели.
Зачёт по теории
Зачёт по теории проводится на зачётной неделе в форме экзамена. Студент получает 3 случайных билета из списка, и подготавливает ответы на них с использованием любой литературы в течение часа. Затем студент получает 2 билета из того же списка по выбору преподавателя и отвечает на них без подготовки и без использования литературы. Каждый ответ оценивается на 5 баллов максимум.
Если студенту необходимо набрать больше 25 баллов на зачёте по теории для получения удовлетворительной оценки, количество билетов без подготовки увеличивается до необходимого.
Зачёт по теории можно пересдать дважды в течение экзаменационной сессии.
Презентации лекций
Все презентации лекций можно найти здесь (google slides)
| # | Лекция | Описание | Презентация |
|---|---|---|---|
| 1 | How This Course is Organized | Содержимое курса, формат работы, условия оценки | pdf, slides |
| 2 | History of the C Programming Language | История языка программирования Си, цель создания, виды поведения программ | pdf, slides |
| 3 | Hello, World! | Программа “Hello, World!”, реализация языка программирования, IDE | pdf, slides |
| 4 | How to Solve Homework | Руководство по сдаче решений практических заданий | pdf, slides |
| 5 | Data Storage | Хранение данных, биты и байты, адресное пространство | pdf, slides |
| 6 | Data Types and Encoding | Типы данных, размеры типов, проблемы и способы кодировки данных | pdf, slides |
| 7 | Integer Types | Целые типы данных | pdf, slides |
| 8 | Standard Screwdriver Set | Базовый набор инструментов (функция main, глобальные переменные, ввод и вывод данных, операторы) | pdf, slides |
| 9 | Functions | Функции, локальные переменные, параметры, возвращаемые значения, детали реализации | pdf, slides |
| 10 | Pointers | Указатели, передача параметров по адресу, значения указателей | pdf, slides |
| 11 | Arrays | Одномерные массивы, практики работы с массивами, адресная арифметика, VLA | pdf, slides |
| 12 | Dynamic Memory | Динамическая память, эффективная реализация динамического массива | pdf, slides |
| 13 | Multidimensional Arrays | Плоские многомерные массивы, VM type, зубчатые многомерные массивы | pdf, slides |
| 14 | Characters & Strings | Символы и строки, стандартная библиотека работы со строками | pdf, slides |
| 15 | Labels & Jumps | Метки и переходы, оператор switch, способы реализации | pdf, slides |
| 16 | Errors Handling | Обработка ошибок, прерывание программы, коды ошибок, нелокальные переходы | pdf, slides |
| 17 | Structures | Композиция, структуры, выравнивание, сложные типы данных | pdf, slides |
| 18 | Extended Screwdriver Set | Расширенный набор инструментов (typedef, перечисления, объединения, вещественные числа, функции с переменным числом аргументов, битовые поля, указатели на функции, аргументы командной строки, файлы) | pdf, slides |
| 19 | Preprocessor | Препроцессор, макросы, условная компиляция, вставка файлов, генерация кода макросами | pdf, slides |
| 20 | Practice Guideline (Task 25, Allocator) | Практическое руководство по заданию “Аллокатор” | pdf, slides |
| 21 | Practice Guideline (Task 28, Fork - Exec) | Практическое руководство по заданию “Fork - Exec” | pdf, slides |
| 22 | Practice Guideline (Task 29, Cooperative Multitasking) | Практическое руководство по заданию “Кооперативная многозадачность” | pdf, slides |
| 23 | Static Linking | Статическая линковка | pdf, slides |