Как устроен экзамен по блоку 1 «Язык C и базовые алгоритмы» и как к нему подготовиться
| Что | Условие |
|---|---|
| Допуск | практические работы №1–11 сданы не ниже «удовлетворительно» (50 баллов из 100) |
| Тест | 20 вопросов из банка по разделам 1–13, 30 минут, 40 % оценки |
| Практическая задача | одна задача по билету на материале практических работ №2–11, 45 минут, 60 % оценки; после сдачи — короткое устное объяснение |
| Оценка за блок | тест (0–100) · 0,4 + задача (0–100) · 0,6 |
| Итог | Оценка |
|---|---|
| 85–100 | «отлично» |
| 70–84 | «хорошо» |
| 50–69 | «удовлетворительно» |
| менее 50 | «неудовлетворительно» |
Та же шкала 85 / 70 / 50, что у каждой практической работы. Так же устроены экзамены по блокам 2 и 3; в конце курса — дифференцированный зачёт по всему курсу.
Вопросы — такие же, как в тестах разделов: «что выведет фрагмент», выбор верного утверждения, соответствие. Лучшая подготовка — пройти ещё раз тесты разделов 1–13 и разобрать свои ошибки.
| Разделы | Главное для теста |
|---|---|
| 1–3 | этапы сборки и сообщения на каждом, error и warning, модель задачи и тесты, типы и их диапазоны, переполнение, погрешность double, беззнаковые |
| 4, 5 | целое деление и остаток, приоритеты, i++ и неопределённое поведение, форматы printf и scanf, результат scanf, сокращённое вычисление, цепочка else if, switch и break |
| 6, 7 | число итераций и проверок, while и do while, конечность цикла, начальные значения накопителей, параметры по значению, прототип, ошибки компоновщика |
| 8, 9 | индексы и границы, массив в функции, двоичный поиск, O-нотация, число сравнений и инверсии в сортировках, устойчивость, диагонали и транспонирование |
| 10–13 | адрес и разыменование, разность указателей, '\0' и размер под строку, fgets и переполнение буфера, strcmp, маски и множества, ->, режимы fopen, ошибка while (!feof) |
По три билета на каждую практическую работу №2–11 — задачи разного типа на одном материале. Студенты одной подгруппы получают билеты по разным работам.
| Материал | Билеты и темы |
|---|---|
| ПЗ №2, линейные программы | 1 — время в пути; 11 — платёж по кредиту (pow, округление до копеек); 12 — секунды в дни и часы (выбор типа) |
| ПЗ №3, ветвления | 2 — вид треугольника (допуск для вещественных); 13 — следующая дата (високосный год, switch); 14 — стоимость доставки (switch, округление веса вверх) |
| ПЗ №4, цикл с предусловием | 3 — цифровой корень; 15 — последовательность Коллатца (тип для максимума); 16 — несократимая дробь (алгоритм Евклида, знак) |
| ПЗ №5, цикл с постусловием | 4 — двоичная запись с повтором ввода; 17 — «угадай число»; 18 — меню-накопитель |
| ПЗ №6, цикл с параметром | 5 — таблица функции с целым счётчиком; 19 — совершенные числа (делители до √n); 20 — ромб из символов (вложенные циклы) |
| ПЗ №7, одномерные массивы | 6 — циклический сдвиг за O(n); 21 — удаление повторов на месте; 22 — самый длинный возрастающий участок за один проход |
| ПЗ №8, двумерные массивы | 7 — побочная диагональ и транспонирование; 23 — седловые точки; 24 — обход по спирали |
| ПЗ №9, строки | 8 — палиндром; 25 — число слов и самое длинное слово; 26 — шифр Цезаря |
| ПЗ №10, множества | 9 — общие буквы двух слов; 27 — решето Эратосфена на битах; 28 — подмножество с заданной суммой перебором масок |
| ПЗ №11, текстовые файлы | 10 — ниже среднего балла; 29 — частоты букв в файле; 30 — слияние двух упорядоченных файлов |
Полные условия, примеры и критерии — на портале. Задача — одна программа, решаемая за 45 минут; разрешено пользоваться страницами курса и своими практическими работами. Поэтому главная подготовка — иметь под рукой свои работы в порядке и помнить, где что лежит: read_int (раздел 7), read_line (раздел 11), сортировки и поиск (раздел 8), parse_student (раздел 13).
Билет: ввести n (0…109); заменять число суммой его цифр, пока оно не станет однозначным; вывести результат и число замен. Пример: 9875 → 9 + 8 + 7 + 5 = 29 → 2 + 9 = 11 → 1 + 1 = 2, ответ 2, шагов 3.
while (value > 0) с % 10 и / 10 (раздел 6, пункт 02), внешний цикл — пока число не меньше 10. int value = n, steps = 0;
while (value >= 10) { /* конечен: сумма цифр числа >= 10 меньше самого числа */
int sum = 0;
while (value > 0) {
sum += value % 10;
value /= 10;
}
value = sum;
steps++;
}
| Тест | Ожидается | Что проверяет |
|---|---|---|
| 9875 | Root 2, steps 3 | пример билета |
| 7, 0 | Root 7, steps 0; Root 0, steps 0 | внешний цикл не выполняется ни разу |
| 1000000000 | Root 1, steps 1 | верхняя граница |
| −5, abc | сообщение об ошибке, код 1 | проверка ввода |
Устный вопрос преподавателя может быть таким: «Что изменится, если внешний цикл написать как do while?» — для однозначного n появится лишний шаг, ответ «steps 1» будет неверным (раздел 6, пункт 04).