Le 50 migliori domande e risposte per le interviste C nel 2022

Le 50 migliori domande e risposte per le interviste C nel 2022

Nonostante abbia quasi 50 anni, C è ancora al centro della scena della programmazione. Il linguaggio non solo ha un'ampia varietà di applicazioni, ma è anche fonte di ispirazione per una varietà di linguaggi di programmazione moderni e potenti, inclusi Java, C# e Python.

Sebbene al giorno d'oggi ci siano pochissimi profili di lavoro che richiedono solo un alto livello di competenza in C, la maggior parte dei lavori di programmazione richiede una buona comprensione dei concetti fondamentali del linguaggio di programmazione C.

Queste domande e risposte per l'intervista in C coprono molti di questi concetti di programmazione e sono un buon modo per prepararsi a un colloquio che richiede una buona comprensione di C.

Domande e risposte dell'intervista Top C

Domande sull'intervista di base C

1. Quali sono alcune delle caratteristiche più importanti di C?

Alcune delle caratteristiche più importanti di C sono:

  • Estendibilità :può adottare nuove funzionalità.
  • Veloce :il supporto per la programmazione di sistema consente una compilazione e un'esecuzione più rapide rispetto ai popolari linguaggi di alto livello come Java e Python.
  • Gestione della memoria :viene fornito con la gestione della memoria integrata per risparmiare memoria e ottimizzare l'utilizzo della memoria.
  • Linguaggio di programmazione di medio livello :può essere utilizzato sia per la programmazione del sistema che per la programmazione dell'applicazione.
  • Indipendenza/portabilità dalla piattaforma :un programma C scritto per una macchina può essere eseguito su altre macchine con poche o nessuna modifica.
  • Semplicità :segue un approccio strutturato. Facilita la scomposizione di un programma grande e complesso in moduli (sottoprogrammi) più piccoli, indipendenti e facili da gestire.

2. Che cos'è un file di intestazione in C? Cosa succede se includiamo un file di intestazione due volte?

I file di intestazione memorizzano le definizioni e l'insieme di regole che governano le diverse funzioni integrate del linguaggio di programmazione C. Ad esempio, le funzioni printf() e scanf() sono definite nel file di intestazione stdio.h.

Ogni file di intestazione contiene un insieme di funzioni predefinite, destinate a semplificare la programmazione in C. È necessario includere il file di intestazione specifico nel programma C per poter utilizzare le funzioni in esso definite. Non puoi usare le funzioni printf() e scanf() senza includere il file di intestazione stdio.h.

Quando un file di intestazione viene incluso due volte in un programma C, il secondo viene ignorato. In effetti, il #, chiamato include guard, che precede un file di intestazione assicura che venga incluso solo una volta durante il processo di compilazione.

3. Dacci una spiegazione generale di C.

C è uno dei linguaggi di programmazione per computer più comunemente usati. È un linguaggio procedurale che presenta programmazione sistematica, ambito di variabili lessicali e ricorrenza.

4. Perché il C è conosciuto come "la madre dei linguaggi di programmazione"?

C è comunemente chiamato "la madre dei linguaggi di programmazione" in quanto è la base per molti altri linguaggi. È un linguaggio antico ed è stato ampiamente utilizzato per sviluppare alcuni dei più importanti compilatori e kernel.

5. Quali sono i vantaggi di C?

Alcuni dei vantaggi di C sono:

  • Lingua di livello medio: Poiché il C si trova nel mezzo di un linguaggio di alto livello e di un linguaggio di basso livello, ha le caratteristiche di entrambi.
  • Lingua a livello strutturato: C è un linguaggio di programmazione strutturato che permette di dividere un programma complesso in programmi più semplici chiamati funzioni.
  • Lingua con distinzione tra maiuscole e minuscole: È un linguaggio con distinzione tra maiuscole e minuscole, quindi le lettere minuscole e maiuscole vengono trattate in modo diverso.
  • Lingua portatile: C è un linguaggio altamente flessibile che ne consente l'utilizzo per lo scripting di applicazioni di sistema, il che lo rende parte di molti noti sistemi operativi.
  • Lingua potente ed efficiente: È un linguaggio facile da usare e può funzionare efficacemente su giochi, grafica, applicazioni aziendali e applicazioni che richiedono, tra le altre cose, alcuni calcoli.

6. Quali sono alcuni dei limiti di C?

Di seguito sono riportati alcuni degli svantaggi di C:

  • Mancanza di OOP: C non fa uso di OOP in quanto si basa sull'approccio procedurale.
  • Nessun controllo di runtime: C non esegue il controllo del runtime, il che significa che gli errori non vengono rilevati dopo ogni riga di codice.
  • Nessun spazio dei nomi: C non consente spazi dei nomi, quindi non possono esserci due variabili con lo stesso nome nel programma C.
  • Mancanza di gestione delle eccezioni: Il linguaggio non mostra l'importante caratteristica della gestione delle eccezioni. La funzionalità di gestione delle eccezioni non consente all'utente di rilevare errori e bug durante la compilazione del codice.
  • Livello insufficiente per l'astrazione: C non ha una capacità di gestione dei dati molto ampia, il che rappresenta una minaccia per la sicurezza del linguaggio.

Stai ancora imparando C? Segui questo corso

Programmazione C per principianti - Padroneggia il linguaggio C

7. Qual è l'obiettivo della funzione principale () in C?

La funzione principale () in C all'ingresso del programma C. È il punto di ingresso da cui inizia il processo di esecuzione del programma. Quando inizia l'esecuzione del programma C, il controllo del programma è diretto verso la funzione main(). È obbligatorio che ogni programma C abbia una funzione main(). Sebbene sia la funzione che indica il processo di programmazione, non è la prima funzione ad essere eseguita.

8. Cosa sono le variabili e le costanti?

In C, sia le costanti che le variabili sono ampiamente utilizzate durante la progettazione di un programma. La principale differenza tra variabili e costanti è che le variabili possono modificare il valore assegnato in qualsiasi punto del programma.

Il valore della costante rimane invece inalterato durante l'intero programma. Il valore della costante è bloccato durante l'esecuzione del programma.

Ad esempio, il valore di pi può essere impostato come costante durante l'intero corso del programma.

9. Distinguere tra un file di intestazione tra parentesi angolari e uno tra virgolette.

Se il file di intestazione viene inserito tra parentesi angolari <>, il compilatore rileva il file di intestazione specifico solo all'interno del percorso di inclusione integrato. Ma se il file di intestazione viene inserito tra virgolette doppie, il compilatore tenta di individuare il file di intestazione specifico principalmente nella directory di lavoro corrente e, se non può trovarsi lì, cerca nel percorso incluso incluso.

10. Un programma C viene compilato senza la funzione main()? E la sua esecuzione?

Sì, un programma C può essere compilato anche senza aggiungere la funzione main(). Tuttavia, non verrà eseguito senza la funzione main().

11. Quali sono i tipi di dati di base in C?

Ci sono 5 tipi di dati di base in C:

  1. int :memorizza un numero intero
  2. galleggiante :Memorizza un numero decimale
  3. doppio :Memorizza un numero decimale con la massima precisione
  4. carattere :Memorizza un singolo carattere
  5. vuoto :non memorizza alcun valore

12. Cosa sono le parole chiave riservate e quante sono?

Le parole che sono limitate per un uso generale durante la scrittura di un programma, cioè per l'uso come nome di una variabile, funzione, struttura, ecc., sono chiamate parole chiave riservate. Le parole chiave riservate, dette anche nomi riservati, hanno significati speciali, cioè sono già definite per qualcosa.

Il linguaggio di programmazione C ha le seguenti 32 parole chiave riservate:

  1. automatico
  2. pausa
  3. caso
  4. carro
  5. costi
  6. continua
  7. predefinito
  8. fai
  9. doppio
  10. altro
  11. enum
  12. esterno
  13. galleggiante
  14. per
  15. vai a
  16. se
  17. int
  18. lungo
  19. registrati
  20. ritorno
  21. breve
  22. firmato
  23. dimensione di
  24. statico
  25. struttura
  26. cambia
  27. definizione tipo
  28. unione
  29. non firmato
  30. vuoto
  31. volatile
  32. mentre

13. In che modo le variabili globali sono diverse dalle variabili statiche?

Le variabili globali sono variabili con ambito globale, ovvero sono accessibili in tutto il programma, a meno che non siano ombreggiate. Queste variabili sono definite all'esterno di una funzione o di un blocco di codice.

Le variabili statiche sono variabili allocate staticamente, ovvero il loro valore non può essere modificato. È fisso per l'intera esecuzione di un programma. Possono essere definite funzioni sia esterne che interne. Inoltre, è possibile accedervi da qualsiasi punto all'interno del programma.

14. Spiega l'allocazione della memoria statica e l'allocazione della memoria dinamica.

Nell'allocazione dinamica della memoria, la memoria può essere aumentata durante l'esecuzione del programma. Questo non è il caso; tuttavia, con l'allocazione di memoria statica in cui non è disponibile l'opzione di aumentare la memoria durante l'esecuzione del programma.

L'allocazione di memoria statica richiede più spazio di memoria rispetto all'allocazione di memoria dinamica. Gli array utilizzano l'allocazione di memoria statica mentre gli elenchi collegati utilizzano l'allocazione di memoria dinamica. L'allocazione della memoria statica avviene in fase di compilazione, mentre l'allocazione della memoria dinamica avviene in fase di esecuzione.

15. Cosa sono le perdite di memoria? Perché dovrebbe essere affrontato?

Una perdita di memoria si verifica quando una memoria creata in un heap rimane non eliminata. Ciò può comportare un ulteriore utilizzo della memoria e, di conseguenza, influire sulle prestazioni di un programma. Questo è esattamente il motivo per cui è necessario affrontare il problema delle perdite di memoria.

16. Che cos'è while(0) e while(1)?

while(0) è una condizione di ciclo che sarà sempre falsa, ovvero il codice all'interno del ciclo while non verrà eseguito. while(1) è un ciclo infinito. Funziona continuamente fino a quando non si imbatte in una dichiarazione di interruzione menzionata esplicitamente.

Nota :Qualsiasi numero intero diverso da zero all'interno delle parentesi del ciclo while darà un ciclo infinito. Ad esempio, while(-22) e while(24) produrranno entrambi un ciclo infinito.

17. Qual è il ruolo di uno specificatore di accesso protetto?

La privacy di una parola chiave protetta si trova da qualche parte tra le parole chiave private e public. Se una classe è contrassegnata come protetta, è possibile accedervi dalle sue funzioni membro, classi derivate con accesso pubblico o protetto, classi derivate privatamente e amici della classe che ha dichiarato questi membri.

18. A cosa serve la parola chiave volatile?

Volatile impedisce al compilatore di ottimizzare la variabile o l'oggetto in questione. Qualsiasi codice può modificare il valore della variabile al di fuori dell'ambito del codice corrente in qualsiasi momento. Ciò implica che il compilatore deve mantenere il valore di una variabile volatile in tutte le copie locali della variabile.

19. Spiega lo scopo dell'operatore "cancella".

Elimina rimuove tutti gli oggetti creati dalla nuova espressione, ovvero libera memoria nello spazio dell'heap. Gli oggetti dell'array vengono eliminati utilizzando l'operatore []:

delete[] array;
NULLorvoid Pointer can be deleted as:
delete ptr;

Lo stesso vale anche per i tipi di dati definiti dall'utente. Ad esempio,

int *var = newint;
delete var;

20. Spiega lo scopo dell'identificatore di archiviazione esterno.

L'identificatore di archiviazione esterno aiuta a dichiarare oggetti che possono essere utilizzati da molti file di origine. Descrive una variabile definita esternamente. La definizione può apparire all'inizio di un blocco o all'esterno di una funzione. C'è solo una dichiarazione della variabile extern. Se viene trovata un'altra istanza, viene considerata uguale alla prima. Le variabili esterne possono avere un ambito di blocco o un ambito di file a seconda di dove sono definite.

21. Che cos'è il preprocessore?

Un preprocessore è un programma che produce un output che viene utilizzato da qualche altro programma come input.

Ad esempio, la traduzione è una fase di preelaborazione dopo la quale il codice viene inviato per la compilazione.

22. Cosa sono gli argomenti della riga di comando?

Per controllare un programma dall'esterno, forniamo il parametro dell'argomento della riga di comando al programma quando viene invocato il metodo main. La sintassi è:

intmain(int argc, char *argv[]) 

dove argc, argv sono argomenti della riga di comando.

23. Elencare le differenze tra riferimento e Puntatore?

Riferimento

Puntatore

È un nome alternativo per una variabile.

Memorizza l'indirizzo di una variabile.

Dichiarato utilizzando * :int *ptr.

Dichiarato utilizzando &:int &refvar.

Non può avere valori nulli.

Può avere valori null assegnati.

Accessibile tramite pass by value.

Gli usi passano per riferimento.

Deve essere inizializzato al momento della dichiarazione, ad es. int &ref; darà un errore.

Non è necessaria l'inizializzazione durante la dichiarazione stessa, ovvero int *ptr è corretto.

Condivide lo stesso indirizzo di memoria della variabile originale e occupa un po' di spazio nello stack.

Ha le sue dimensioni e l'indirizzo di memoria nello stack.

24. Scrivi un programma per stampare Hello World! Senza usare il punto e virgola.

Possiamo farlo usando l'istruzione if senza la condizione:

#include <stdio.h>
#include <conio.h>
void main()
{
if
(
printf("Hello World!")
)
}

Uscita:Ciao mondo!

25. Quali sono le differenze tra new() e malloc()?

nuovo()

malloc()

È un operatore.

È una funzione.

Restituisce un tipo di dati.

Restituisce un puntatore nullo.

La memoria viene allocata con valori predefiniti tramite il costruttore.

La memoria non è inizializzata; il valore predefinito è spazzatura.

Il nuovo può essere sovraccaricato.

Non può essere sovraccaricato.

Le allocazioni non possono essere ridimensionate.

Le allocazioni possono essere ridimensionate utilizzando realalloc.

26. Spiega la differenza tra eliminare ed eliminare[]?

Delete rimuove un singolo oggetto dalla memoria, mentre delete[] viene utilizzato per la disallocazione della memoria di un array di oggetti. L'importanza di avere delete[] è che se abbiamo un puntatore (diciamo ptr) a un array di dimensione 10 (new myarr[10]) e diamo semplicemente delete ptr, poiché non sappiamo a quanti oggetti punta ptr , e quindi delete cancellerà solo il primo elemento. I restanti 9 elementi non verranno eliminati. Ciò causerà una perdita di memoria. Esempio:

// delete
int *var = new int;
delete var;
// delete[]
int *arr = new int[1];
delete[] arr;

27. Qual è la differenza tra incremento del prefisso e incremento del postfisso?

Nell'incremento del prefisso, il valore della variabile viene incrementato prima dell'esecuzione del programma. La variabile viene incrementata dopo l'esecuzione del programma con incremento suffisso.

++a <- Incremento prefisso

a++ <- Incremento suffisso

Domande sul colloquio di livello intermedio C

28. Che cos'è un puntatore penzolante?

Un puntatore che punta a una posizione di memoria che è già stata eliminata è chiamato puntatore penzolante. Secondo un'altra definizione, un puntatore penzolante è un puntatore che punta a una posizione di memoria dereferenziata. Un puntatore funge da puntatore penzolante in tre casi:

  1. Distribuzione della memoria
  2. Quando la variabile locale non è statica
  3. Quando la variabile esce dall'ambito

29. In che modo il puntatore null è diverso da un puntatore void?

Un puntatore viene inizializzato come NULL quando il suo valore non è noto al momento della dichiarazione. In genere, i puntatori NULL non puntano a una posizione valida. A differenza dei puntatori NULL, i puntatori void sono puntatori generici a cui non è associato alcun tipo di dati. I puntatori Void possono contenere l'indirizzo di qualsiasi tipo di variabile. Quindi, il tipo di dati a cui punta un puntatore void può essere qualsiasi cosa.

#include <stdio.h>
#include <conio.h>
void main()
{
int a = 22;
int *notnullpointer = &a;
int *nullpointer1; // Null because there is no initialization.
int *nullpointer2 = 0; // Null because initialized with 0.
if (notnullpointer == 0) printf ("\nNot null pointer is null.");
else printf ("\nNot null pointer is not null.");
if (nullpointer1 == 0) printf ("\nNull pointer 1 is null.");
else printf ("\nNull pointer 1 is not null.");
if (nullpointer2 == 0) printf ("\nNull pointer 2 is null.");
else printf ("\nNull pointer 2 is not null.");
printf ("\nNot null pointer has stored the address %d.", &notnullpointer);
printf ("\nNull pointer 1 has no valid address.");
printf ("\nNull pointer 2 has no valid address.");
}

Risultato :

Il puntatore non nullo non è nullo.

Il puntatore nullo 1 è nullo.

Il puntatore nullo 2 è nullo.

Il puntatore non nullo ha memorizzato l'indirizzo 2054804456.

Il puntatore nullo 1 non ha un indirizzo valido.

Il puntatore nullo 2 non ha un indirizzo valido.

A differenza dei puntatori NULL, i puntatori void sono puntatori generici a cui non è associato alcun tipo di dati. I puntatori Void possono contenere l'indirizzo di qualsiasi tipo di variabile. Quindi, il tipo di dati a cui punta un puntatore void può essere qualsiasi cosa. Ad esempio:

int x = 22;
char b = 'a';
void *vp = &x; // Here the void pointer is holding address of int x
vp = &b; // Here the void pointer is holding address of char b

30. Quali sono le funzioni calloc() e malloc()?

calloc() e malloc() sono funzioni di libreria utilizzate per allocare la memoria in modo dinamico, ovvero la memoria viene allocata durante il runtime dal segmento dell'heap. In caso di allocazione della memoria riuscita, viene restituito un puntatore al blocco di memoria. Negli scenari in cui l'allocazione non riesce, le due funzioni restituiscono un valore NULL.

31. In che modo il passaggio per valore è diverso da un passaggio per riferimento?

Passa per valore e passa per riferimento sono anche chiamati chiamata per valore e chiamata per riferimento. In call by value, i valori vengono inviati/passati alla funzione come parametri. Viene utilizzato quando è necessario non modificare i parametri effettivi. Le modifiche apportate agli argomenti nella funzione chiamata non vengono riflesse nella funzione chiamante in un valore di passaggio.

Passa per riferimento viene utilizzato quando è necessario modificare i parametri effettivi. Gli indirizzi relativi ai parametri effettivi vengono inviati/passati alla funzione nella chiamata per riferimento. Le modifiche apportate agli argomenti nella funzione chiamata si riflettono nella funzione chiamante in un passaggio per riferimento.

32. Quando viene utilizzata la parola chiave register?

L'identificatore di memorizzazione del registro, ovvero la parola chiave register, viene utilizzato per memorizzare una variabile nel registro macchina. Questo è in genere utilizzato per variabili molto utilizzate come una variabile di controllo del ciclo. L'intento dietro l'utilizzo della parola chiave register è di velocizzare il programma riducendo al minimo il tempo di accesso variabile.

33. Cosa intendi per valore e ivalore?

L'espressione a sinistra dell'operatore di assegnazione (=) è chiamata ivalue. Un rvalue è un'espressione sul lato destro dell'operatore di assegnazione ed è assegnato a un ivalue.

Ad esempio,

int a = 25;

int a è l'ivalue nell'esempio sopra menzionato mentre 25 è il rvalue. Mentre un ivalue persiste oltre una singola espressione, rvalue non persiste oltre l'espressione che lo utilizza.

34. In che modo i parametri effettivi sono diversi dai parametri formali?

I parametri effettivi sono quelli che vengono inviati alla funzione alla fine della chiamata. I parametri formali, tuttavia, sono quelli ricevuti durante la definizione della funzione. Un parametro formale è un identificatore utilizzato in alcune funzioni per rappresentare il valore passato alla funzione da un chiamante. Questo valore effettivo che viene passato alla funzione da un chiamante è il parametro effettivo.

I parametri formali sono vincolati a un valore reale finché la loro funzione è attiva. I parametri formali non memorizzano alcun valore quando la funzione ritorna al suo chiamante. Ad esempio:

#include <stdio.h>
#include <conio.h>
int totalsum(int a, int b, int c) // Formal parameters
{
int total;
total = a + b +c;
return total;
}
int main()
{
int sum;
int a = 22; int m = 24; int p = 28; // Actual parameters
sum = totalsum(a, m, p);
printf ("The total sum is %d.", sum);
}

Risultato :

La somma totale è 74.

Un'altra importante distinzione tra parametri effettivi e parametri formali è che mentre i secondi sono sempre variabili, i primi possono essere espressioni, chiamate di funzione o anche numeri. Ad esempio, nell'esempio precedente, sono validi anche i seguenti parametri effettivi (nella funzione call to totalsum):

sum = totalsum (10+15, 12*2, 56/2); // Actual parameters are expressions.
sum = totalsum (a, (int) sqrt(576), p); // One of the actual parameters is a function call.
sum = totalsum (22, 24, 28); // Actual parameters are numbers.

35. Che cos'è una struttura autoreferenziale?

Una struttura autoreferenziale contiene la stessa variabile del puntatore della struttura del suo elemento.

In altre parole, è una struttura di dati in cui il puntatore punta alla struttura dello stesso tipo di dati.

Una struttura autoreferenziale viene utilizzata in grafici, heap, elenchi collegati, alberi, ecc.

36. Che cos'è la programmazione modulare?

Un approccio modulare alla programmazione prevede la divisione di un intero programma in sottoprogrammi indipendenti e intercambiabili, ovvero funzioni e moduli per ottenere la funzionalità desiderata. Ciascuna delle funzioni o dei moduli coinvolti nella programmazione modulare ha tutto il necessario per eseguire un singolo aspetto della funzionalità desiderata dell'intero programma.

37. Cosa sono i token?

I token sono le unità più piccole e indivisibili di un programma C con significati distinti. Di seguito sono riportati i vari tipi di token:

  • Costanti :valori fissi che non possono essere modificati durante l'esecuzione del programma.
  • Identificatori :Si riferisce al nome di funzioni, variabili, array, strutture, ecc.
  • Parole chiave/Nomi riservati :Parole predefinite con significati speciali che non possono essere utilizzate come nomi di variabili.
  • Operatori :simboli che indicano al compilatore C di eseguire specifiche operazioni logiche, matematiche o relazionali.
  • Personaggi speciali :tutti i caratteri, esclusi gli alfabeti e le cifre, sono caratteri speciali.

38. Cosa sono i campi di bit?

I campi di bit sono variabili definite con una larghezza (dimensione) predefinita all'interno di una struttura. La sintassi generale di un campo di bit è:

struct {
type [member_name] : width ;
};

tipo :tipo intero, come int e signed int, che determina come viene interpretato il valore di un campo di bit.

nome membro :Nome del campo bit.

larghezza :Numero di bit nel campo dei bit. Deve essere minore o uguale alla larghezza in bit del tipo intero specificato.

39. Quali sono le varie modalità di apertura dei file?

I file vengono aperti in un programma C utilizzando la funzione fopen(). È definito nel file di intestazione stdio.h. La sintassi generale di fopen() è:

ptr = fopen (“file address”, “mode”);

È possibile aprire un file nelle seguenti 12 diverse modalità di apertura in un programma C:

  1. r - Apre un file per la lettura.
  2. rb - Apre un file per la lettura in modalità binaria.
  3. con - Apre un file per la scrittura.
  4. wb - Apre un file per la scrittura in modalità binaria.
  5. a - Apre un file per l'aggiunta, ovvero l'aggiunta di dati alla fine del file.
  6. ab - Apre un file da aggiungere in modalità binaria.
  7. r+ - Apre un file sia per la lettura che per la scrittura.
  8. rb+ - Apre un file sia per la lettura che per la scrittura in modalità binaria.
  9. w+ - Apre un file sia per la lettura che per la scrittura.
  10. wb+ - Apre un file sia per la lettura che per la scrittura in modalità binaria.
  11. a+ - Apre un file sia per la lettura che per l'aggiunta.
  12. ab+ - Apre un file sia per la lettura che per l'aggiunta in modalità binaria.

Fatta eccezione per le modalità r, rb, r+ e rb+; il file viene creato se non viene trovato quando si tenta di aprire in altre modalità. Il fopen() restituisce NULL se il file non esiste in queste 4 modalità di apertura del file.

40. Che cos'è la ricorsione?

La ricorsione è il processo in cui una funzione chiama se stessa, direttamente o indirettamente. Tale funzione è chiamata funzione ricorsiva. Ci sono due fasi coinvolte con una funzione ricorsiva:

  1. Fase di avvolgimento :inizia quando la funzione ricorsiva si richiama e termina una volta raggiunta la condizione.
  2. Fase di svolgimento :Inizia al raggiungimento della condizione, cioè al termine della fase di avvolgimento, e termina quando il controllo ritorna alla chiamata originaria.

41. Scrivi un programma C per verificare se il numero inserito è un numero primo.

#include <stdio.h>
#include <conio.h>
void main()
{
int a, i, b=0, flag=0;
printf("Enter a number: ");
scanf("%d",&a);
b=a/2;
for(i=2;i<=b;i++)
{
if(a%i==0)
{
printf("The number you entered is not a prime number!");
flag=1;
break;
}
}
if(flag==0)
printf("The number you entered is a prime number.");
getch();
}

Esempio di output:

Inserisci un numero:22

Il numero che hai inserito non è un numero primo!

42. Scrivi un programma per scoprire il fattoriale di un dato numero usando la ricorsione.

#include <stdio.h>
#include <conio.h>
long factorial (int n)
{
if (n==0)
return 1;
else
return (n * factorial(n-1)); //recursion
}
void main()
{
int number;
long fact;
printf("Enter a number: ");
scanf("%d", &number);
fact = factorial(number);
printf("The factorial of %d is %ld!\n", number, fact);
getch();
}

Esempio di output:

Inserisci un numero:5

Il fattoriale di 5 è 120!

Domande sul colloquio di livello avanzato C

43. Che cos'è un puntatore lontano?

Un puntatore lontano è un puntatore a 32 bit in grado di accedere a tutti i 16 segmenti, ovvero all'intera memoria di residenza della RAM. Può accedere alle informazioni al di fuori della memoria del computer in un determinato segmento. Per utilizzare il puntatore lontano, è necessario:

  • Assegna il registro di settore per memorizzare l'indirizzo dei dati nel segmento e
  • Memorizza un altro registro di settore all'interno del settore più recente

44. Qual è la parola chiave automatica?

auto è la classe di archiviazione predefinita di tutte le variabili dichiarate all'interno di un blocco di codice o di una funzione. Le variabili locali possono anche essere chiamate variabili automatiche o automatiche. Se nessun valore è memorizzato in una variabile automatica, ottiene un valore spazzatura. Le variabili automatiche sono chiamate così perché queste variabili allocano e deallocano memoria all'ingresso e all'uscita dal blocco di codice o dalla funzione in cui sono dichiarate, rispettivamente. In genere, non è necessario menzionare esplicitamente la parola chiave auto.

45. Perché utilizziamo la funzione sprintf()?

La funzione sprintf() è chiamata string print. Usiamo la funzione sprintf() per memorizzare l'output su un buffer di caratteri specificato nella funzione, ovvero trasferire i dati al buffer. La sintassi generale della funzione è:

intsprintf
(char *str, constchar*string,.....);

La funzione sprintf() restituisce il numero totale di caratteri presenti nella stringa. Ecco un esempio che dimostra l'uso della funzione sprintf(): 

#include <stdio.h>
#include <conio.h>
int main()
{
char buffer[25];
sprintf(buffer, "This string is now stored in the buffer."); /* Using the sprintf() function for storing the string in the buffer.*/
printf("%s", buffer);
int n = sprintf(buffer, "This string is now stored in the buffer.");
printf("\nThe total number of characters in the string is %d.", n); // The sprintf() function returns the total number of characters in the stored string.
return 0;
}

Output:questa stringa è ora archiviata nel buffer.

Il numero totale di caratteri nella stringa è 40.

46. Qual è la differenza tra le funzioni getch() e getche()?

Entrambe le funzioni getch() e getche() vengono utilizzate per leggere un singolo carattere dalla tastiera. La differenza tra i due, tuttavia, sta nella visualizzazione dell'output. La funzione getche() mostra i dati, il carattere immesso, sullo schermo di output mentre la funzione getch() no. Usa Alt+F5 per vedere il carattere inserito.

47. Qual è la differenza tra puntatori vicini, lontani ed enormi?

Qualsiasi indirizzo virtuale ha il selettore e l'offset. Mentre un puntatore vicino non ha un selettore esplicito, i puntatori lontani ed enormi lo fanno. L'esecuzione dell'aritmetica del puntatore sul puntatore lontano non comporta la modifica del selettore. Lo fa, tuttavia, nel caso di un puntatore enorme.

48. Che cos'è il typecasting?

Il typecasting è il processo di conversione di un tipo di dati in un altro. Ne esistono di due tipi:

  1. Cast di tipo implicito Nota anche come conversione automatica, la conversione implicita del tipo viene eseguita automaticamente dal compilatore C, ovvero non richiede un operatore di cast. Ad esempio:
#include <stdio.h>
#include <conio.h>
void main ()
{
int x = 22;
float b = x; //implicit type conversion
printf(“%f”, b);
}

Uscita:22.000000

  1. Cast di tipo esplicito :a differenza della conversione del tipo implicito, il cast del tipo esplicito viene eseguito dal programmatore. Un operatore di cast del tipo viene utilizzato per indicare al compilatore di convertire (cast) un tipo di dati in un altro. Ad esempio:
#include <stdio.h>
#include <conio.h>
void main ()
{
float x = 22.22;
int b = (int) x; //explicit type conversion
printf(“%d”, b);
}

Uscita:22

Qui, (int) è l'operatore di typecasting.

49. Scrivi un programma C per verificare se un numero inserito è palindromo.

Un numero palindromo è uno che legge lo stesso, sia in avanti che all'indietro.

#include<stdio.h>
#include<conio.h>
void main()
{
int n, r, sum=0, temp;
printf("Enter a number: ");
scanf("%d",&n);
temp=n;
while(n>0)
{
r=n%10;
sum=(sum*10)+r;
n=n/10;
}
if(temp==sum)
printf("It is a palindrome number!");
else
printf("It is not a palindrome number!");
getch();
}

Risultato di esempio:

Inserisci un numero:12321

È un numero palindromo!

50. Che cos'è il preprocessore #undef?

Come per il linguaggio di programmazione C, l'obiettivo principale della direttiva #undef è che funge da guida per il preprocessore per eliminare tutte le definizioni per la particolare macro. Se una macro non è specifica, e la direttiva #ifdef su quella macro specificata mostrerà il risultato come falso.

Conclusione

Questo riassume la nostra lista delle principali domande dell'intervista in C. Se vuoi perfezionare le tue abilità di programmazione in C prima del colloquio, dai un'occhiata a questi migliori tutorial in C e a questo corso Udemy di programmazione in C per principianti.

Domande frequenti

1. Quali sono le domande di base del colloquio C?

Le domande del colloquio di programmazione C che abbiamo elencato sopra coprono le basi e altro ancora. Aspettati di tutto, dalle domande sui tipi di dati ai vantaggi e svantaggi di C.

2. A cosa serve C comunemente usato?

C viene utilizzato per un'ampia varietà di scopi, dalla progettazione di sistemi operativi ai giochi. Le domande dell'intervista sul linguaggio C sopra elencate lo spiegano in modo più dettagliato.

Le persone stanno anche leggendo:

  • Migliori certificazioni C
  • I migliori corsi C
  • Differenza tra Passa per riferimento e Passa per puntatore
  • Differenza tra Float e Double
  • Ordinamento rapido in C
  • Confronto testa a testa tra C e C++
  • Binary Search in C
  • Best MVC Interview Questions
  • Best JSP Interview Questions