Язык программирования Си
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 |