Вопросы для интервью по программированию на C стали важной частью процесса собеседования почти во всех компаниях MNC. Эта статья в основном посвящена наиболее часто задаваемым и последним обновленным вопросам, которые появляются в большинстве текущих интервью.
- Вопросы для собеседования по программированию на C для начинающих
- Вопросы для интервью по программированию на среднем уровне C
- Вопросы для собеседования по продвинутому программированию на C
Вопросы для собеседования по программированию на C для начинающих
Q1. Какие основные типы данных поддерживаются языком программирования C?
Ответ: Типы данных в языке C можно разделить на 4 категории. Они следующие:
- Основные типы данных
- Производные типы данных
- Перечисленные типы данных
- Пустые типы данных
Основные типы данных, поддерживаемые языком C, следующие:
Q2. Что вы подразумеваете под переменной оборванного указателя в программировании на C?
Ответ: Указатель в программировании на C используется для указания местоположения в памяти существующей переменной. В случае, если эта конкретная переменная удалена, а указатель по-прежнему указывает на ту же ячейку памяти, тогда эта конкретная переменная указателя называется переменной висячего указателя.
Q3. Что вы подразумеваете под областью действия переменной? Какова область видимости переменных в C?
Ответ: Область действия переменной может быть определена как часть области кода, где к переменным, объявленным в программе, можно получить прямой доступ. В C все идентификаторы имеют лексическую (или статическую) область видимости.
Q4. Что такое статические переменные и функции?
Ответ. Переменные и функции, объявленные с использованием ключевого слова Static, рассматриваются как статические переменные и статические функции. Область действия переменных, объявленных с использованием ключевого слова Static, будет ограничена функцией, в которой они объявлены.
Q5. Разница между calloc() и malloc()
Ответ: calloc() и malloc() — это функции динамического выделения памяти. Единственная разница между ними заключается в том, что calloc() загрузит все назначенные ячейки памяти со значением 0, а malloc() — нет.
Q6. Каковы допустимые места, где программист может применить оператор Break Control?
Ответ. Оператор Break Control допустим для использования внутри цикла и операторов управления Switch.
Q7. Как мы можем хранить отрицательное целое число?
Ответ: чтобы сохранить отрицательное целое число, нам нужно выполнить следующие шаги. Вычислите дополнение до двух одного и того же положительного целого числа.
Eg: 1011 (-5)
Шаг 1 – дополнение до единицы от 5: 10 10
Шаг 2. Добавьте 1 к предыдущему, получив 1011, что равно -5.
Q8. Различают фактические параметры и формальные параметры.
Ответ: Параметры, которые отправляются из основной функции в составную функцию, называются Фактическими параметрами, а параметры, объявленные в конце подразделенной функции, называются Формальные параметры.
Q9. Может ли программа C быть скомпилирована или выполнена без main()?
Ответ: программа будет скомпилирована, но не будет выполнена. Для выполнения любой программы на C требуется функция main().
Q10. Что вы подразумеваете под вложенной структурой?
Ответ: когда на элемент данных одной структуры ссылается элемент данных другой функции, такая структура называется вложенной структурой.
Q11. Что такое токен C?
Ответ: Ключевые слова, константы, специальные символы, строки, операторы, идентификаторы, используемые в программе C, называются токенами C.
Q12. Что такое Препроцессор?
Ответ: Директива препроцессора считается встроенной предопределенной функцией или макросом, который действует как директива для компилятора и выполняется до фактического выполнения программы C.
Q13. Почему Си называют Матерью всех языков?
Ответ: C представил множество основных концепций и структур данных, таких как массивы, списки, функции, строки и т. д. Многие языки, разработанные после C, разработаны на основа языка Си. Следовательно, он считается матерью всех языков.
Ответ: printf() используется для вывода значений на экран. Для печати определенных значений и, с другой стороны, scanf() используется для сканирования значений. Нам нужен соответствующий спецификатор формата типа данных как для печати, так и для сканирования. Например,
- %d: это спецификатор формата типа данных, используемый для печати и сканирования целочисленного значения.
- %s: это спецификатор формата типа данных, используемый для печати и сканирования строки.
- %c: это спецификатор формата типа данных, используемый для отображения и сканирования значения символа.
Q14. Расскажите об особенностях языка программирования C.
Ответ:
Q15. Какова цель printf() и scanf() в программе C?
Ответ: printf() используется для вывода значений на экран. Для печати определенных значений и, с другой стороны, scanf() используется для сканирования значений. Нам нужен соответствующий спецификатор формата типа данных как для печати, так и для сканирования. Например,
- %d: это спецификатор формата типа данных, используемый для печати и сканирования целочисленного значения.
- %s: это спецификатор формата типа данных, используемый для печати и сканирования строки.
- %c: это спецификатор формата типа данных, используемый для отображения и сканирования значения символа.
- %f: это спецификатор формата типа данных, используемый для отображения и сканирования значения с плавающей запятой.
Вопрос 16. Что такое массив?
Ответ. Массив – это простая структура данных, в которой несколько элементов одного типа данных хранятся зарезервированным и последовательным образом. Существует три типа массивов, а именно:
- Одномерный массив
- Двумерный массив
- Многомерный массив
Вопрос 17. Что такое символ /0?
Ответ: Упомянутый символ называется Нулевой символ. Он считается завершающим символом, используемым в строках для уведомления компилятора о конце строки.
Q18. В чем основное различие между компилятором и интерпретатором?
Ответ: Компилятор используется на языке C и переводит весь код в машинный код за один раз. С другой стороны, интерпретатор используется в языке программирования Java и других высокопроизводительных языках программирования. Он предназначен для построчной компиляции кода.
Q19. Могу ли я использовать тип данных int для хранения значения 32768?
Ответ: Нет, целочисленный тип данных будет поддерживать диапазон от -32768 до 32767. Любое значение, превышающее это, не будет сохранено. Мы можем использовать float или long int.
Вопросы для интервью по программированию на среднем уровне C
Q20. Как функция объявляется в языке C?
Ответ: Функция на языке C объявляется следующим образом:
return_type function_name(formal parameter list) { Function_Body; }
Q21. Что такое динамическое выделение памяти? Упомяните синтаксис.
Ответ: динамическое выделение памяти — это процесс выделения памяти программе и ее переменным во время выполнения. Процесс динамического выделения памяти включает три функции для выделения памяти и одну функцию для освобождения используемой памяти.
malloc() — выделяет память
Синтаксис:
ptr = (cast-type*) malloc(byte-size);
calloc() — выделяет память
Синтаксис:
ptr = (cast-type*)calloc(n, element-size);
realloc() — выделяет память
Синтаксис:
ptr = realloc(ptr, newsize);
free() — освобождает используемую память
Синтаксис:
free(ptr);
Q22. Что вы подразумеваете под переменной оборванного указателя в программировании на C?
Ответ: Указатель в программировании на C используется для указания местоположения в памяти существующей переменной. В случае, если эта конкретная переменная удалена, а указатель по-прежнему указывает на ту же ячейку памяти, тогда эта конкретная переменная указателя называется переменной висячего указателя.
Вопрос 23. Где мы не можем использовать &(оператор адреса в C)?
Ответ: Мы не можем использовать & для констант и для переменной, которая объявлена с использованием класса register storage.
Вопрос 24. Напишите простой пример структуры на языке C
Ответ: Структура определяется как определяемый пользователем тип данных, предназначенный для хранения нескольких элементов данных разных типов в виде единого блока. Структура будет потреблять память, равную сумме всех элементов данных.
struct employee { char name[10]; int age; }e1; int main() { printf("Enter the name"); scanf("%s",e1.name); printf("n"); printf("Enter the age"); scanf("%d",&e1.age); printf("n"); printf("Name and age of the employee: %s,%d",e1.name,e1.age); return 0; }
Q25. Различие между вызовом по значению и вызовом по ссылке Ответ:
//Пример метода вызова по значению
#include<stdio.h> void change(int,int); int main() { int a=25,b=50; change(a,b); printf("The value assigned to a is: %d",a); printf("n"); printf("The value assigned to of b is: %d",b); return 0; } void change(int x,int y) { x=100; y=200; }
//Вывод
The value assigned to of a is: 25
The value assigned to of b is: 50
//Пример вызова по ссылке
#include<stdio.h> void change(int*,int*); int main() { int a=25,b=50; change(&a,&b); printf("The value assigned to a is: %d",a); printf("n"); printf("The value assigned to b is: %d",b); return 0; } void change(int *x,int *y) { *x=100; *y=200; }
//Вывод
The value assigned to a is: 100
The value assigned to b is: 200
Вопрос 26. Разница между getch() и getche()
Ответ:Обе функции предназначены для чтения символов с клавиатуры, и единственная разница в том, что
getch(): считывает символы с клавиатуры, но не использует никаких буферов. Следовательно, данные не отображаются на экране.
getche(): считывает символы с клавиатуры и использует буфер. Таким образом, данные отображаются на экране.
//Пример
#include<stdio.h> #include<conio.h> int main() { char ch; printf("Please enter a character "); ch=getch(); printf("nYour entered character is %c",ch); printf("nPlease enter another character "); ch=getche(); printf("nYour new character is %c",ch); return 0; }
//Вывод
Please enter a character
Your entered character is x
Please enter another character z
Your new character is z
Вопрос 27. Объясните toupper() на примере.
Ответ. toupper() — это функция, предназначенная для преобразования слов/символов нижнего регистра в верхний регистр.
//Пример
#include<stdio.h> #include<ctype.h> int main() { char c; c=a; printf("%c after conversions %c", c, toupper(c)); c=B; printf("%c after conversions %c", c, toupper(c));
//Вывод:
a after conversions A
B after conversions B
Вопрос 28. Напишите код для генерации случайных чисел на языке C
Ответ: Случайные числа в языке C можно сгенерировать следующим образом:
#include<stdio.h> #include<stdlib.h> int main() { int a,b; for(a=1;a<=10;a++) { b=rand(); printf("%dn",b); } return 0; }
//Вывод
1987384758
2057844389
3475398489
2247357398
1435983905
Вопрос 29. Могу ли я создать собственный головной файл на языке C?
Ответ: Можно создать новый файл заголовка. Создайте файл с прототипами функций, которые необходимо использовать в программе. Включите файл в раздел «#include» в его имени.
Q30. Что вы подразумеваете под утечкой памяти?
Ответ: Утечка памяти может быть определена как ситуация, когда программист выделяет динамическую память для программы, но не может освободить или удалить используемую память после завершения кода. Это вредно, если в программу включены демоны и серверы.
#include<stdio.h> #include<stdlib.h> int main() { int* ptr; int n, i, sum = 0; n = 5; printf("Enter the number of elements: %dn", n); ptr = (int*)malloc(n * sizeof(int)); if (ptr == NULL) { printf("Memory not allocated.n"); exit(0); } else { printf("Memory successfully allocated using malloc.n"); for (i = 0; i<= n; ++i) { ptr[i] = i + 1; } printf("The elements of the array are: "); for (i = 0; i<=n; ++i) { printf("%d, ", ptr[i]); } } return 0; }
//Вывод
Enter the number of elements: 5
Memory successfully allocated using malloc.
The elements of the array are: 1, 2, 3, 4, 5,
Q31. Объясните локальные статические переменные и для чего они нужны?
Ответ: локальная статическая переменная — это переменная, жизнь которой не заканчивается вызовом функции, в которой она объявлена. Он распространяется на срок действия всей программы. Все вызовы функции используют одну и ту же копию локальных статических переменных.
#include<stdio.h> void fun() { static int x; printf("%d ", x); x = x + 1; } int main() { fun(); fun(); return 0; }
//Вывод
0 1
Q32. В чем разница между объявлением файла заголовка с помощью ‹ › и “ “?
Ответ: Если файл заголовка объявлен с использованием ‹ ›, компилятор ищет файл заголовка по встроенному пути. Если заголовочный файл объявлен с использованием " ", то компилятор будет искать заголовочный файл в текущем рабочем каталоге, а если он не будет найден, он будет искать файл в других местах.
Q33. Когда мы должны использовать спецификатор хранения регистра?
Ответ: Мы используем Register Storage Specifier, если определенная переменная используется очень часто. Это помогает компилятору найти переменную, поскольку переменная будет объявлена в одном из регистров процессора.
Q34. Какое утверждение является эффективным и почему? х=х+1; или х++;
Ответ: x++; — наиболее эффективный оператор, поскольку это всего лишь одна инструкция для компилятора, а другая — нет.
Q35. Могу ли я объявить одно и то же имя переменной для переменных с разными областями действия?
Ответ: Да, одно и то же имя переменной может быть объявлено для переменных с разными областями действия переменных, как в следующем примере.
int var; void function() { int variable; } int main() { int variable; }
Q36. Какую переменную можно использовать для доступа к членам данных Union, если переменная Union объявлена как переменная-указатель?
Ответ: Оператор стрелки (-›) можно использовать для доступа к членам данных объединения, если переменная объединения объявлена как переменная-указатель.
Вопрос 37. Упомяните операции с файлами на языке C.
Ответ: Основные методы работы с файлами в C предоставляют основные функции, которые пользователь может выполнять с файлами в системе.
Вопрос 38. Каковы различные спецификаторы класса хранения в C?
Ответ: В языке C доступны следующие спецификаторы хранения:
- авто
- зарегистрироваться
- статический
- внешний
Q39. Что такое приведение типов?
Ответ: Приведение типов — это процесс преобразования одного типа данных в другой, известный как приведение типов. Если мы хотим сохранить значение типа с плавающей запятой в типе int, то мы явно преобразуем тип данных в другой тип данных.
Синтаксис:
(type_name) expression;
Q40. Напишите программу на C, чтобы вывести hello world без использования точки с запятой; Ответ:
#include<stdio.h> void main() { if(printf("hello world")){} }
//Вывод:
hello world
Q41. Напишите программу для замены двух чисел без использования третьей переменной.
Ответ:
#include<stdio.h> #include<conio.h> main() { int a=10, b=20; clrscr(); printf("Before swapping a=%d b=%d",a,b); a=a+b; b=a-b; a=a-b; printf("nAfter swapping a=%d b=%d",a,b); getch(); }
//Вывод
Before swapping a=10 b=20
After swapping a=20 b=10
Вопросы для собеседования по продвинутому программированию на C
Q42. Как напечатать строку с символом % в ней?
Ответ: Для символа % в C не предусмотрена управляющая последовательность. Поэтому, чтобы напечатать %, мы должны использовать «%%», как показано ниже.
printf("there are 90%% chances of rain tonight");
Q43. Напишите код для печати следующего шаблона.
1
12
123
1234
12345
Ответ: Чтобы распечатать приведенный выше шаблон, можно использовать следующий код.
#include<stdio.h> int main() { for(i=1;i<=5;1++) { for(j=1;j<=5;j++) { print("%d",j); } printf("n"); } return 0; }
Q44. Объясните директиву прагмы #.
Ответ. Следующие пункты объясняют директиву Pragma.
- Это директива препроцессора, которую можно использовать для включения или выключения определенных функций.
- Он бывает двух типов: #pragma startup, #pragma exit и pragma warn.
- #pragma startup позволяет указать функции, вызываемые при запуске программы.
- #pragma exit позволяет нам указать функции, вызываемые при выходе из программы.
- #pragma warn указывает компьютеру подавлять любые предупреждения или нет.
Q45. Как можно удалить дубликаты в массиве?
Ответ: Следующая программа поможет вам удалить дубликаты из массива.
#include <stdio.h> int main() { int n, a[100], b[100], calc = 0, i, j,count; printf("Enter no. of elements in array.n"); scanf("%d", &n); printf("Enter %d integersn", n); for (i = 0; i < n; i++) scanf("%d", &a[i]); for (i = 0; i<n; i++) { for (j = 0; j<calc; j++) { if(a[i] == b[j]) break; } if (j== calc) { b[count] = a[i]; calc++; } } printf("Array obtained after removing duplicate elementsn"); for (i = 0; i<calc; i++) { printf("%dn", b[i]); } return 0; }
//Вывод
Enter no. of elements in array. 5
Enter 5 integers
12
11
11
10
4
Array obtained after removing duplicate elements
12
11
10
4
Q46. Что такое алгоритм пузырьковой сортировки? Объясните с помощью программы.
Ответ: Пузырьковая сортировка — это простой алгоритм сортировки, который многократно проходит по списку, сравнивает соседние элементы и меняет их местами, если они расположены в неправильном порядке. Проход по списку повторяется до тех пор, пока список не будет отсортирован.
Следующий код выполняет сортировку пузырьком.
int main() { int array[100], n, i, j, swap; printf("Enter number of elementsn"); scanf("%d", &n); printf("Enter %d Numbers:n", n); for(i = 0; i<n; i++) scanf("%d", &array[i]); for(i = 0 ; i<n - 1; i++) { for(j = 0 ; j < n-i-1; j++) { if(array[j]>array[j+1]) { swap=array[j]; array[j]=array[j+1]; array[j+1]=swap; } } } printf("Sorted Array:n"); for(i = 0; i < n; i++) printf("%dn", array[i]); return 0; }
Q47. Что такое циклический алгоритм? Напишите код для циклического планирования
Ответ: Алгоритм циклического перебора — это один из алгоритмов, используемых планировщиками процессов и сетей в вычислениях для равномерного распределения ресурсов в системе.
Следующий код выполнит циклическое планирование
#include<stdio.h> int main() { int i, limit, total = 0, x, counter = 0, time_quantum; int wait_time = 0, turnaround_time = 0, arrival_time[10], burst_time[10], temp[10]; float average_wait_time, average_turnaround_time; printf("nEnter Total Number of Processes:t"); scanf("%d", &limit); x = limit; for(i = 0; i<limit; i++) { printf("nEnter Details of Process[%d]n", i + 1); printf("Arrival Time:t"); scanf("%d", &arrival_time[i]); printf("Burst Time:t"); scanf("%d", &burst_time[i]); temp[i] = burst_time[i]; } printf("nEnter Time Quantum:t"); scanf("%d", &time_quantum); printf("nProcess IDttBurst Timet Turnaround Timet Waiting Timen"); for(total = 0, i = 0; x != 0;) { if(temp[i] <= time_quantum && temp[i] > 0) { total = total + temp[i]; temp[i] = 0; counter = 1; } else if(temp[i]>0) { temp[i] = temp[i] - time_quantum; total = total + time_quantum; } if(temp[i] == 0 && counter == 1) { x--; printf("nProcess[%d]tt%dtt %dttt %d", i + 1, burst_time[i], total - arrival_time[i], total - arrival_time[i] - burst_time[i]); wait_time = wait_time + total - arrival_time[i] - burst_time[i]; turnaround_time = turnaround_time + total - arrival_time[i]; counter = 0; } if(i == limit - 1) { i = 0; } else if(arrival_time[i + 1] <= total) { i++; } else { i = 0; } } average_wait_time = wait_time * 1.0 / limit; average_turnaround_time = turnaround_time * 1.0 / limit; printf("nnAverage Waiting Time:t%f", average_wait_time); printf("nAvg Turnaround Time:t%fn", average_turnaround_time); return 0; }
//Вывод
Q48. Какая структура используется для связи программы и операционной системы?
Ответ: Ответ можно объяснить следующими моментами:
- Для связи операционной системы с программой используется структура файл.
- Файл определяется в файле заголовка "stdio.h" (стандартный файл заголовка ввода/вывода).
- Он содержит информацию об используемом файле, его текущем размере и его местоположении в памяти.
- Он содержит указатель символа, указывающий на открываемый символ.
- При открытии файла устанавливается связь между программой и операционной системой, определяющая, к какому файлу необходимо получить доступ.
Q49. Каковы ограничения scanf() и как их избежать?
Ответ: Ограничения scanf() следующие:
- scanf() не может работать со строкой символов.
- Невозможно ввести строку состоящую из нескольких слов в одну переменную с помощью функции scanf().
- Чтобы избежать этого, используется функция gets().
- Он получает строку с клавиатуры и завершается при нажатии клавиши enter.
- Здесь допустимы пробелы и табуляции как часть входной строки.
Q50. Различайте макросы и функции.
Ответ: Различия между макросами и функциями можно объяснить следующим образом:
- Вызов Макрос буквально заменяет шаблоны расширением.
- Вызов Macro заставляет программу работать быстрее, но также увеличивает размер программы.
- Макрос простой и позволяет избежать ошибок, связанных с вызовами функций.
- В функции вызов control передается функции вместе с аргументами.
- Это делает функции небольшими и компактными.
- Передача аргументов и получение обратно возвращаемого значения требует времени и заставляет программу работать медленнее.
На этом мы подошли к концу статьи «Вопросы для интервью по программированию на C». Надеюсь, вы поняли важность программирования на C.
Если вы хотите прочитать больше статей о самых популярных на рынке технологиях, таких как искусственный интеллект, DevOps, этический взлом, вы можете обратиться к официальному сайту Edureka.
Первоначально опубликовано на https://www.edureka.co.