Domande & Risposte

Cos’è un compilatore?

Un compilatore è un software. Si occupa di tradurre del codice sorgente in codice eseguibile.


Qual è la differenza tra codice sorgente e codice eseguibile?

Il codice sorgente è del codice scritto in un linguaggio di programmazione a scelta (ad esempio, C). Il codice sorgente è comprensibile per un programmatore umano, incomprensibile per un computer.

Il codice macchina - anche detto codice eseguibile - è del codice scritto in binario, comprensibile dal computer.


Informatica 101: che differenza c’è tra bit e byte?

Un byte è costituito da 8 bit. Ergo, “byte” e “bit” non sono sinonimi (!!!).


Da cosa è caratterizzata una variabile nel linguaggio C?

Nel linguaggio C, una variabile è caratterizzata da:

Notare che le istruzioni di dichiarazione servono a fissare l’identificatore, il tipo e l’indirizzo in memoria di una variabile, ma non ne definiscono il valore. Quali istruzioni posso definire o modificare il valore di una variabile?


Qual è la differenza tra i termini assegnazione e inizializzazione?

L’assegnazione è l’operazione con cui si attribuisce un valore a una variabile. La prima assegnazione di valore a una variabile è più propriamente detta inizializzazione (della variabile).


Se, nel linguaggio C, eseguo l’istruzione int a = 10;, a cosa mi riferisco scrivendo a? A cosa mi riferisco scrivendo &a?

La scrittura a fa riferimento al valore contenuto nella variabile con identificatore a. Ovvero, nell’esempio: 10.

La scrittura &a fa riferimento all’indirizzo in memoria in cui la variabile identificata come a è salvata durante l’esecuzione del programma.


Costruisci una tabella in cui, per ogni tipo di dato del linguaggio C da te conosciuto, indichi il numero di byte tipicamente occupato nella memoria di un sistema a 64 bit.*

Tipo di variabile Byte occupati su sistemi x64
short int 2
int 4
long int 8
unsigned short int 2
unsigned int 4
unsigned long int 8
float 4
double 8
long double 16
char 1
bool 1

Nel linguaggio C, quale differenza c’è, ad esempio, tra i tipi int e unsigned int?*

I tipi di variabile int e unsigned int occupano entrambi lo stesso spazio in memoria: tipicamente, su un sistema a 64 bit, entrambi occupano 4 byte (== 32 bit) di spazio.

Tuttavia, int si può utilizzare per rappresentare valori interi sia positivi sia negativi (all’incirca nell’intervallo [-231, 231), mentre unsigned int si può utilizzare per rappresentare solo valori non negativi (all’incirca nell’intervallo [0, 232]).


Nel linguaggio C, come posso conoscere il numero di byte occupato da una variabile?

Puoi usare la funzione sizeof(). Inserendo tra le parentesi tonde l’identificatore a, otterrai il numero di byte occupati dalla variabile a. Ovviamente, essa deve essere dichiarata prima di poter utilizzare sizeof(a) 😇

Qui trovi un programma C con il quale puoi vedere il numero di byte occupato dai principali tipi di variabile sul tuo computer.


Prof., può farmi una tabella in cui, per ogni tipo del linguaggio C, indica lo specificatore di conversione da usare?

Ecco qui:

Tipo Specificatore di conversione
short int %hd
int %d
long int %ld
unsigned short int %hu
unsigned int %u
unsigned long int %lu
float %f
double %lf
long double %Lf
char %c

Prof., può farmi una tabella in cui, per ogni tipo intero del linguaggio C, mi indica il valore minimo e il valore massimo che esso può custodire? Così, se mi capita di ottenere numeri privi di senso, posso vedere se il problema sta nel non aver rispettato questi limiti!

Ecco qui. La tabella riporta i valori minimi e massimi sul mio computer, ma probabilmente sono gli stessi del tuo. Comunque, puoi verificare i tuoi esatti limiti utilizzando questo programma C.

Tipo Minimo Massimo
short int -32768 32767
int -2147483648 2147483647
long int -9223372036854775808 9223372036854775807
unsigned short int 0 65535
unsigned int 0 4294967295
unsigned long int 0 18446744073709551615

Prof., come faccio a calcolare la radice quadrata di un numero?

La radice quadrata di un numero, nel linguaggio C, si calcola utilizzando la funzione sqrt(). Ad esempio, l’istruzione sqrt(10) restituisce come risultato la radice quadrata di 10.

Per poter utilizzare la funzione sqrt(), è dapprima necessario importare nel nostro file la libreria di funzioni math.h. In altri termini, in cima al nostro file, dobbiamo aggiungere l’istruzione:

#include <math.h>

Ma non finisce qui! Quando compiliamo il file, in fondo al comando gcc ... dobbiamo lasciare uno spazio e scrivere -lm. Per esempio, se il nostro file C si chiama es07.c, il comando per la compilazione apparirà così:

gcc es07.c -o es07 -lm

A questo punto, la funzione sqrt() sarà riconosciuta, il file eseguibile creato, e potrete calcolare la radice quadrata di un numero 😊