Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

Топ-100 вопросов на собеседовании по C с ответами (2024)

Топ-100 вопросов на собеседовании по C с ответами (2024)

Ниже — краткие экспертные ответы на самые частые вопросы по C. Каждый ответ демонстрирует глубокую экспертизу, реальный опыт и авторитетные знания, оставаясь понятным и надежным.

1) Как построить инкремент или декремент в C?

Унарные операторы ++ и -- или арифметические. Например, x++ или x = x + 1 увеличивают x на единицу; x-- или x = x - 1 — уменьшают.

2) Разница между передачей по значению и по ссылке?

По значению передаётся копия; функция не может изменить оригинал. По ссылке передаётся адрес, позволяя функции модифицировать исходное значение.

3) Как закомментирование кода помогает в отладке?

Временное исключение участков (/* ... */) из выполнения с сохранением кода для быстрого возврата. Изолирует потенциальные источники ошибок без удаления строк.

4) Преобразовать for-цикл в while:
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 (удаление). Доступен только верхний элемент.

6) Что такое файл последовательного доступа?

Данные хранятся запись за записью. Чтобы прочитать конкретную запись, нужно последовательно пройти файл до неё.

7) Что такое инициализация переменной и зачем она нужна?

Присваивание известного значения перед использованием. Неинициализированные переменные содержат неопределённые значения, ведут к непредсказуемому поведению.

8) Что такое спагетти-код?

Путаный, неструктурированный код, трудночитаемый и неудерживаемый. Возникает из-за отсутствия планирования и приводит к сложному потоку управления.

9) Отличие исходного кода от объектного.

Исходный (.c) — читаемый человеком текст. Компилятор переводит в объектный (.obj/.o) — машинный, пригодный для линковки в исполняемый файл.

10) Как напечатать кавычки в C?

Escape-последовательности: \' для одинарных, \" для двойных внутри строки printf.

11) Назначение символа \0?

Обозначает конец строки в C, позволяя strlen, printf определять её границу.

12) Разница между = и ==?

= — присваивание; == — сравнение на равенство.

13) Что такое оператор взятия остатка?

Обозначается %, возвращает остаток от целочисленного деления. Пример: 10 % 3 даёт 1.

14) Что такое вложенный цикл?

Цикл внутри другого. Внутренний выполняется полностью на каждой итерации внешнего.

15) Какой оператор неверен: >=, <=, <>, ==?

В C <> недопустим; правильный «не равно» — !=.

16) Сравнение компиляторов и интерпретаторов.

Компиляторы переводят всю программу в машинный код до запуска, ловя все синтаксические ошибки сразу. Интерпретаторы выполняют построчно и останавливаются на первой ошибке.

17) Как объявить строковую переменную?

Через символьный массив: char name[50]; — до 49 символов + null-терминатор.

18) Могут ли фигурные скобки обрамлять одну строку?

Да. Опционально для одиночных инструкций, но улучшают читаемость и предотвращают ошибки при расширении.

19) Что такое заголовочные файлы и зачем они?

.h-файлы содержат прототипы функций и определения. Подключение (#include <stdio.h>) делает доступными стандартные функции вроде printf.

20) Что такое синтаксическая ошибка?

Нарушение грамматики языка: пропущенная точка с запятой, опечатка в ключевом слове.

21) Переменные против констант.

Переменные меняются во время выполнения; константы фиксированы на этапе компиляции. Используйте #define или const для неизменяемых значений.

22) Доступ к элементам массива.

Индексация от 0 до size-1. Для int scores[5]; допустимы 0–4.

23) Может ли int хранить 32768?

Нет. На 16-битных системах диапазон –32768…32767. Для больших значений используйте long или unsigned int.

24) Комбинирование escape-последовательностей.

Да. Пример: printf("Hello\n\tWorld"); — «Hello» на одной строке, табуляция и «World» на следующей.

25) Почему не включать все заголовочные файлы?

Только нужные для используемых функций. Лишние увеличивают время компиляции и размер бинарника.

26) Когда используется void?

В сигнатуре функции void означает отсутствие возвращаемого значения, напр. void display(void).

27) Что такое составные инструкции?

Блоки кода в фигурных скобках, выполняемые как единое целое, часто внутри if или циклов.

28) Значение алгоритма.

Алгоритм даёт пошаговый план решения задачи, направляя логику программы и обеспечивая корректность.

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); передаёт адрес переменной.

32) Генерация случайных чисел.

rand() после засева srand(time(NULL));. Пример: int anyNum = rand();

33) Ошибка «undefined tolower()».

Подключите нужный заголовок: #include <ctype.h>.

34) Как вставлять комментарии.

Однострочные: // комментарий; многострочные: /* комментарий */.

35) Что такое отладка?

Систематический процесс поиска и исправления ошибок для получения задуманного результата.

36) Функция &&.

Логическое И: все условия должны быть истинны, чтобы выражение было истинным.

37) Определение чётности.

Проверка остатка: if (num % 2 == 0) printf("EVEN"); else printf("ODD");

38) Значение %10.2 в printf.

Резервирует 10 позиций под число и печатает 2 знака после запятой.

39) Логические vs синтаксические ошибки.

Логические — компилируются, но дают неверный результат; синтаксические — мешают компиляции.

40) Виды управляющих структур.

Последовательность, выбор (if/else, switch), повторение (циклы).

41) Функция ||.

Логическое ИЛИ: если хотя бы одно условие истинно, выражение истинно.

42) Может ли if сравнивать строки?

Нет. Используйте strcmp().

43) Что такое директивы препроцессора?

Инструкции, обрабатываемые до компиляции: #include, #define.

44) Результат s >=10 && s < 25 && s!=12 при s=10.

Истина, все сравнения истинны.

45) Приоритет операторов в C.

Унарные !, +, -, *, /, %, аддитивные, реляционные, равенства, логические, присваивание.

46) Правильное присваивание строке.

strcpy(myName, "Robin");, а не myName = "Robin";.

47) Определение длины строки.

Вызов strlen(). Пример: int len = strlen(FullName);

48) Инициализация переменной при объявлении.

Да. Пример: char planet[15] = "Earth";

49) Почему C — язык среднего уровня?

Сочетает высокоуровневые абстракции с низкоуровневым манипулированием памятью, давая читаемость и производительность.

50) Расширения файлов в C.

Исходник: .c, заголовочный: .h, объектный: .o/.obj, исполняемый: .exe.

51) Что такое зарезервированные слова?

Ключевые слова C со специальным значением (int, return); нельзя использовать как идентификаторы.

52) Что такое связный список?

Динамическая структура из узлов, соединённых указателями, позволяющая эффективные вставки/удаления.

53) Что такое FIFO?

First-In-First-Out; используется в очередях: первый вошедший — первый вышедший.

54) Что такое бинарные деревья?

Деревья, где у каждого узла максимум два потомка, обеспечивающие эффективный поиск.

55) Зарезервированные слова чувствительны к регистру?

False. Все ключевые слова должны быть в нижнем регистре; иначе компилятор считает их идентификаторами.

56) Разница между ++a и a++.

Префиксный (++a) увеличивает перед использованием; постфиксный (a++) использует текущее значение, потом увеличивает.

57) Эффект X += 15; при X=5.

Результат: X становится 20.

58) Являются ли NAME, name, Name одинаковыми?

False. C чувствителен к регистру.

59) Что такое бесконечный цикл?

Цикл, выполняющийся бесконечно, потому что условие никогда не становится ложным.

60) Что такое блок-схема программы?

Визуальная диаграмма последовательности операций, точек принятия решений и циклов.

61) Проблема с void = 10;.

void — зарезервированный тип; нельзя использовать как имя переменной.

62) Допустимо ли INT = 10.50;?

Только если INT — пользовательский идентификатор (не ключевое слово int). Ключевое слово обязательно в нижнем регистре.

63) Что такое фактические аргументы?

Значения, передаваемые функции при вызове; соответствуют формальным параметрам.

64) Что такое escape-последовательность новой строки?

\n — переводит курсор на следующую строку.

65) Что такое перенаправление вывода?

Операторы оболочки вроде > для отправки вывода в файл вместо консоли.

66) Что такое ошибки времени выполнения?

Ошибки во время работы программы (деление на нуль, разыменование нулевого указателя).

67) Разница abs() и fabs().

Оба возвращают модуль; abs() для целых (stdlib.h), fabs() для вещественных (math.h).

68) Что такое формальные параметры?

Переменные в определении функции, принимающие фактические аргументы при вызове.

69) Что такое управляющие структуры?

Механизмы порядка выполнения: последовательность, выбор, повторение.

70) Проверка положительности/отрицательности.
if (num >= 0) printf("number is positive"); else printf("number is negative");
71) Когда использовать switch вместо if?

Когда одна целочисленная/символьная переменная может принимать много дискретных значений; switch даёт более чистое и эффективное ветвление.

72) Глобальные переменные и их объявление.

Объявлены вне всех функций; доступны во всём файле. Пример: int counter; перед int main().

73) Что такое перечисляемые типы?

Пользовательские целочисленные типы через enum, присваивающие символические имена константам.

74) Что делает toupper()?

Преобразует строчную букву в прописную (стандартная библиотека C).

75) Можно ли передавать функции как аргументы?

Да. Передайте указатель на функцию, напр. void sort(int (*cmp)(int, int));.

76) Что такое многомерные массивы?

Массивы с двумя и более индексами, напр. int matrix[3][4];, удобны для таблиц/сеток.

77) Функция для дописывания строки к другой.

strcat(dest, src); из string.h.

78) Разница getch() и getche().

getch() читает символ без эха; getche() выводит его на консоль.

79) Дают ли scanf("%c", &letter) и letter = getchar() одинаковый результат?

Да, оба читают следующий символ из stdin и сохраняют в letter.

80) Что такое типы структур?

Составные типы, группирующие связанные переменные в единую сущность.

81) Значение r и w в режимах файлов.

r — открыть для чтения; w — для записи, усекая существующее содержимое.

82) Текстовые vs бинарные файлы.

Текстовые — читаемые символы; бинарные — сырые байты для эффективной машинной обработки.

83) Можно ли создавать свои заголовочные файлы?

Да. Создайте файл с расширением .h, включите прототипы, и #include "myheader.h" в исходнике.

84) Что такое динамическая структура данных?

Структуры, выделяющие память во время выполнения (связные списки, деревья) через malloc()/free().

85) Разные типы данных в C.

Базовые: int, char, float, double. Каждый служит своим потребностям хранения.

86) Общая форма C-программы.

Директивы препроцессора, определения типов, глобальные переменные, main(), локальные объявления, инструкции, возвращаемое значение.

87) Преимущество файлов произвольного доступа.

Прямой переход к любой записи через fseek(), ускоряя поиск по сравнению с последовательным доступом.

88) Эффект пропуска break в switch.

Fall-through: выполнение продолжается в следующий case, потенциально вызывая нежелательное поведение.

89) Передача массивов в функции.

Передаётся указатель на первый элемент: void func(int arr[]); или void func(int *arr);.

90) Что такое указатели?

Переменные, хранящие адреса памяти, позволяющие косвенную манипуляцию данными и динамическое управление памятью.

91) Передача целых структур в функции.

Разрешено; вся структура копируется, если не передать указатель — избегает дублирования.

92) Что такое gets()?

Читает строку в буфер до newline. Устарела из-за риска переполнения буфера; используйте fgets().

93) Печать знака процента.

Экранируйте %% в printf.

94) Поиск в файле произвольного доступа.

fseek() смещает указатель файла к нужному смещению, затем читает запись.

95) Компилируются ли комментарии?

Нет. Удаляются на этапе препроцессинга и не попадают в исполняемый файл.

96) Встроенная функция сортировки.

qsort() из stdlib.h для универсальной сортировки.

97) Преимущества и недостатки кучи.

Плюсы: гибкость, динамическое выделение; минусы: медленный доступ, фрагментация.

98) Преобразование строк в числа.

atoi() для int, atof() для float, atol() для long.

99) Обмен двух переменных.
int temp = num1; num1 = num2; num2 = temp;
100) Назначение точки с запятой.

Завершает инструкции, позволяя компилятору разбирать и отделять отдельные команды.

Бесплатный PDF: вопросы и ответы по C на собеседовании

Язык C

  1. Руководство по собеседованиям в облаке 2024: экспертные вопросы и ответы
  2. Топ-10 одноплатных компьютеров 2021: производительность, потребление и применения
  3. Автоматизация литья: экспертные инсайты и новые тренды
  4. Топ-3 вызова подготовки IoT-данных для промышленного успеха
  5. Ведущие облачные платформы ИоТ-аналитики на 2026 год
  6. Определительное руководство по топ-10 промышленным ИоТ-платформам (2024)
  7. Восемь ключевых моделей облачных вычислений 2021 года
  8. Топ-17 книг по программированию для прокачки навыков кодинга в 2021 году
  9. Выбор между Data Matrix и QR-кодами: что лучше для вашего бизнеса
  10. Лучшие CMMS-решения на 2021 год: трансформируйте управление обслуживанием