Вопросы для интервью по программированию на 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.

1. Программа на C для поиска корней квадратного уравнения

2. Ряд Фибоначчи в C

Первоначально опубликовано на https://www.edureka.co.