Топ-100 вопросов на собеседовании по C с ответами (2024)
Топ-100 вопросов на собеседовании по C с ответами (2024)
Ниже — краткие экспертные ответы на самые частые вопросы по C. Каждый ответ демонстрирует глубокую экспертизу, реальный опыт и авторитетные знания, оставаясь понятным и надежным.
1) Как построить инкремент или декремент в C?Унарные операторы ++ и -- или арифметические. Например, x++ или x = x + 1 увеличивают x на единицу; x-- или x = x - 1 — уменьшают.
По значению передаётся копия; функция не может изменить оригинал. По ссылке передаётся адрес, позволяя функции модифицировать исходное значение.
3) Как закомментирование кода помогает в отладке?Временное исключение участков (/* ... */) из выполнения с сохранением кода для быстрого возврата. Изолирует потенциальные источники ошибок без удаления строк.
for (a = 1; a <= 100; a++) printf("%d\n", a * a);
Ответ:
a = 1; while (a <= 100) { printf("%d\n", a * a); a++; }
5) Что такое стек?
Структура данных LIFO (последним пришёл — первым ушёл). Операции: PUSH (добавление) и POP (удаление). Доступен только верхний элемент.
Данные хранятся запись за записью. Чтобы прочитать конкретную запись, нужно последовательно пройти файл до неё.
7) Что такое инициализация переменной и зачем она нужна?Присваивание известного значения перед использованием. Неинициализированные переменные содержат неопределённые значения, ведут к непредсказуемому поведению.
8) Что такое спагетти-код?Путаный, неструктурированный код, трудночитаемый и неудерживаемый. Возникает из-за отсутствия планирования и приводит к сложному потоку управления.
9) Отличие исходного кода от объектного.Исходный (.c) — читаемый человеком текст. Компилятор переводит в объектный (.obj/.o) — машинный, пригодный для линковки в исполняемый файл.
10) Как напечатать кавычки в C?Escape-последовательности: \' для одинарных, \" для двойных внутри строки printf.
\0?
Обозначает конец строки в C, позволяя strlen, printf определять её границу.
= и ==?
= — присваивание; == — сравнение на равенство.
Обозначается %, возвращает остаток от целочисленного деления. Пример: 10 % 3 даёт 1.
Цикл внутри другого. Внутренний выполняется полностью на каждой итерации внешнего.
15) Какой оператор неверен:>=, <=, <>, ==?
В C <> недопустим; правильный «не равно» — !=.
Компиляторы переводят всю программу в машинный код до запуска, ловя все синтаксические ошибки сразу. Интерпретаторы выполняют построчно и останавливаются на первой ошибке.
17) Как объявить строковую переменную?Через символьный массив: char name[50]; — до 49 символов + null-терминатор.
Да. Опционально для одиночных инструкций, но улучшают читаемость и предотвращают ошибки при расширении.
19) Что такое заголовочные файлы и зачем они?.h-файлы содержат прототипы функций и определения. Подключение (#include <stdio.h>) делает доступными стандартные функции вроде printf.
Нарушение грамматики языка: пропущенная точка с запятой, опечатка в ключевом слове.
21) Переменные против констант.Переменные меняются во время выполнения; константы фиксированы на этапе компиляции. Используйте #define или const для неизменяемых значений.
Индексация от 0 до size-1. Для int scores[5]; допустимы 0–4.
int хранить 32768?
Нет. На 16-битных системах диапазон –32768…32767. Для больших значений используйте long или unsigned int.
Да. Пример: printf("Hello\n\tWorld"); — «Hello» на одной строке, табуляция и «World» на следующей.
Только нужные для используемых функций. Лишние увеличивают время компиляции и размер бинарника.
26) Когда используетсяvoid?
В сигнатуре функции void означает отсутствие возвращаемого значения, напр. void display(void).
Блоки кода в фигурных скобках, выполняемые как единое целое, часто внутри if или циклов.
Алгоритм даёт пошаговый план решения задачи, направляя логику программы и обеспечивая корректность.
29) Преимущество массивов над отдельными переменными.Массивы позволяют эффективно хранить и манипулировать связанными данными под одним идентификатором и индексом, уменьшая объём кода.
30) Цикл для печати возрастающих чисел:for (int a = 1; a <= 5; a++) { for (int b = 1; b <= a; b++) printf("%d", b); printf("\n"); }
31) Ошибка в scanf("%d", whatnumber);
Пропущен амперсанд: scanf("%d", &whatnumber); передаёт адрес переменной.
rand() после засева srand(time(NULL));. Пример: int anyNum = rand();
tolower()».
Подключите нужный заголовок: #include <ctype.h>.
Однострочные: // комментарий; многострочные: /* комментарий */.
Систематический процесс поиска и исправления ошибок для получения задуманного результата.
36) Функция&&.
Логическое И: все условия должны быть истинны, чтобы выражение было истинным.
37) Определение чётности.Проверка остатка: if (num % 2 == 0) printf("EVEN"); else printf("ODD");
%10.2 в printf.
Резервирует 10 позиций под число и печатает 2 знака после запятой.
39) Логические vs синтаксические ошибки.Логические — компилируются, но дают неверный результат; синтаксические — мешают компиляции.
40) Виды управляющих структур.Последовательность, выбор (if/else, switch), повторение (циклы).
41) Функция||.
Логическое ИЛИ: если хотя бы одно условие истинно, выражение истинно.
42) Может лиif сравнивать строки?
Нет. Используйте strcmp().
Инструкции, обрабатываемые до компиляции: #include, #define.
s >=10 && s < 25 && s!=12 при s=10.
Истина, все сравнения истинны.
45) Приоритет операторов в C.Унарные !, +, -, *, /, %, аддитивные, реляционные, равенства, логические, присваивание.
strcpy(myName, "Robin");, а не myName = "Robin";.
Вызов strlen(). Пример: int len = strlen(FullName);
Да. Пример: char planet[15] = "Earth";
Сочетает высокоуровневые абстракции с низкоуровневым манипулированием памятью, давая читаемость и производительность.
50) Расширения файлов в C.Исходник: .c, заголовочный: .h, объектный: .o/.obj, исполняемый: .exe.
Ключевые слова C со специальным значением (int, return); нельзя использовать как идентификаторы.
Динамическая структура из узлов, соединённых указателями, позволяющая эффективные вставки/удаления.
53) Что такое FIFO?First-In-First-Out; используется в очередях: первый вошедший — первый вышедший.
54) Что такое бинарные деревья?Деревья, где у каждого узла максимум два потомка, обеспечивающие эффективный поиск.
55) Зарезервированные слова чувствительны к регистру?False. Все ключевые слова должны быть в нижнем регистре; иначе компилятор считает их идентификаторами.
56) Разница между++a и a++.
Префиксный (++a) увеличивает перед использованием; постфиксный (a++) использует текущее значение, потом увеличивает.
X += 15; при X=5.
Результат: X становится 20.
NAME, name, Name одинаковыми?
False. C чувствителен к регистру.
59) Что такое бесконечный цикл?Цикл, выполняющийся бесконечно, потому что условие никогда не становится ложным.
60) Что такое блок-схема программы?Визуальная диаграмма последовательности операций, точек принятия решений и циклов.
61) Проблема сvoid = 10;.
void — зарезервированный тип; нельзя использовать как имя переменной.
INT = 10.50;?
Только если INT — пользовательский идентификатор (не ключевое слово int). Ключевое слово обязательно в нижнем регистре.
Значения, передаваемые функции при вызове; соответствуют формальным параметрам.
64) Что такое escape-последовательность новой строки?\n — переводит курсор на следующую строку.
Операторы оболочки вроде > для отправки вывода в файл вместо консоли.
Ошибки во время работы программы (деление на нуль, разыменование нулевого указателя).
67) Разницаabs() и fabs().
Оба возвращают модуль; abs() для целых (stdlib.h), fabs() для вещественных (math.h).
Переменные в определении функции, принимающие фактические аргументы при вызове.
69) Что такое управляющие структуры?Механизмы порядка выполнения: последовательность, выбор, повторение.
70) Проверка положительности/отрицательности.if (num >= 0) printf("number is positive"); else printf("number is negative");
71) Когда использовать switch вместо if?
Когда одна целочисленная/символьная переменная может принимать много дискретных значений; switch даёт более чистое и эффективное ветвление.
Объявлены вне всех функций; доступны во всём файле. Пример: int counter; перед int main().
Пользовательские целочисленные типы через enum, присваивающие символические имена константам.
toupper()?
Преобразует строчную букву в прописную (стандартная библиотека C).
75) Можно ли передавать функции как аргументы?Да. Передайте указатель на функцию, напр. void sort(int (*cmp)(int, int));.
Массивы с двумя и более индексами, напр. int matrix[3][4];, удобны для таблиц/сеток.
strcat(dest, src); из string.h.
getch() и getche().
getch() читает символ без эха; getche() выводит его на консоль.
scanf("%c", &letter) и letter = getchar() одинаковый результат?
Да, оба читают следующий символ из stdin и сохраняют в letter.
Составные типы, группирующие связанные переменные в единую сущность.
81) Значениеr и w в режимах файлов.
r — открыть для чтения; w — для записи, усекая существующее содержимое.
Текстовые — читаемые символы; бинарные — сырые байты для эффективной машинной обработки.
83) Можно ли создавать свои заголовочные файлы?Да. Создайте файл с расширением .h, включите прототипы, и #include "myheader.h" в исходнике.
Структуры, выделяющие память во время выполнения (связные списки, деревья) через malloc()/free().
Базовые: int, char, float, double. Каждый служит своим потребностям хранения.
Директивы препроцессора, определения типов, глобальные переменные, main(), локальные объявления, инструкции, возвращаемое значение.
Прямой переход к любой записи через fseek(), ускоряя поиск по сравнению с последовательным доступом.
break в switch.
Fall-through: выполнение продолжается в следующий case, потенциально вызывая нежелательное поведение.
89) Передача массивов в функции.Передаётся указатель на первый элемент: void func(int arr[]); или void func(int *arr);.
Переменные, хранящие адреса памяти, позволяющие косвенную манипуляцию данными и динамическое управление памятью.
91) Передача целых структур в функции.Разрешено; вся структура копируется, если не передать указатель — избегает дублирования.
92) Что такоеgets()?
Читает строку в буфер до newline. Устарела из-за риска переполнения буфера; используйте fgets().
Экранируйте %% в printf.
fseek() смещает указатель файла к нужному смещению, затем читает запись.
Нет. Удаляются на этапе препроцессинга и не попадают в исполняемый файл.
96) Встроенная функция сортировки.qsort() из stdlib.h для универсальной сортировки.
Плюсы: гибкость, динамическое выделение; минусы: медленный доступ, фрагментация.
98) Преобразование строк в числа.atoi() для int, atof() для float, atol() для long.
int temp = num1; num1 = num2; num2 = temp;100) Назначение точки с запятой.
Завершает инструкции, позволяя компилятору разбирать и отделять отдельные команды.
Бесплатный PDF: вопросы и ответы по C на собеседовании
Язык C
- Руководство по собеседованиям в облаке 2024: экспертные вопросы и ответы
- Топ-10 одноплатных компьютеров 2021: производительность, потребление и применения
- Автоматизация литья: экспертные инсайты и новые тренды
- Топ-3 вызова подготовки IoT-данных для промышленного успеха
- Ведущие облачные платформы ИоТ-аналитики на 2026 год
- Определительное руководство по топ-10 промышленным ИоТ-платформам (2024)
- Восемь ключевых моделей облачных вычислений 2021 года
- Топ-17 книг по программированию для прокачки навыков кодинга в 2021 году
- Выбор между Data Matrix и QR-кодами: что лучше для вашего бизнеса
- Лучшие CMMS-решения на 2021 год: трансформируйте управление обслуживанием