Variabili in Linguaggio C

Per memorizzare e manipolare i dati in un programma, è necessario utilizzare le variabili.

In questa lezione vedremo come utilizzare le variabili in linguaggio C. Impareremo a dichiarare, assegnare e utilizzare variabili di tipo int e double.

Variabili

Finora abbiamo implementato semplici programmi che stampavano messaggi a schermo. Raramente i programmi si limitano a far questo. Nella realtà, anche un programma semplice svolge vari calcoli ed elabora dati. Per questo motivo si parla di elaboratore o calcolatore.

Pertanto, se i calcoli o le operazioni da svolgere sono più o meno complessi, sorge l'esigenza di memorizzare i risultati parziali. Un po' come quando risolviamo un problema matematico con carta e penna: scriviamo i risultati intermedi per non dimenticarli.

In informatica, per memorizzare i risultati intermedi o i dati da elaborare, si utilizzano le variabili. Una variabile è una locazione di memoria a cui il programmatore associa un'etichetta, un nome simbolico, per poterla richiamare all'interno del programma. In qualunque momento, il programmatore può assegnare un valore alla variabile e può leggere il valore contenuto in essa.

Il nome variabile deriva proprio dal fatto che il valore contenuto in essa può variare nel tempo.

Definizione

Variabile

Una variabile è una locazione di memoria a cui è associato un nome simbolico.

Le operazioni principali che si possono effettuare su una variabile sono:

  • Dichiarazione: associare un nome simbolico ad una locazione di memoria.
  • assegnazione: scrivere un valore nella variabile.
  • Lettura: leggere il valore contenuto nella variabile.

Tipo di una variabile

Il linguaggio C ha la caratteristica di essere un linguaggio fortemente tipizzato (strongly typed). Questo significa che ad ogni variabile deve essere associato un tipo. Il tipo di una variabile determina che genere di dati essa può contenere e le operazioni che si possono effettuare su di essa.

In C esistono differenti tipi di variabili. Per il momento ci concentreremo soltanto su due tipi: int e double.

I tipi int e double sono tipi numerici; variabili di questi tipi permettono di memorizzare numeri. La scelta tra i due tipi determina l'intervallo di numeri che è possibile rappresentare e la precisione.

Ad esempio, una variabile di tipo int (che è il diminutivo di integer, intero in inglese) può memorizzare numeri interi, cioè numeri senza parte decimale. Una variabile di tipo double può memorizzare numeri con parte decimale ossia numeri reali.

Studieremo nel dettaglio i tipi di variabili nel capitolo apposito. Per ora ci limiteremo a sfruttare il tipo int per i numeri interi e double per i numeri reali.

Definizione

Tipo di una variabile

Il tipo di una variabile determina il genere di dati che essa può contenere e le operazioni che si possono effettuare su di essa.

Dichiarazione di una variabile

Prima di poter essere utilizzata, una variabile deve essere dichiarata. Dichiarare una variabile significa descrivere il suo tipo ed il suo nome al compilatore.

La sintassi per dichiarare una variabile è la seguente:

tipo nome;

Ad esempio:

int numero;
double altezza;

Nel codice sopra, abbiamo dichiarato due variabili:

  • numero di tipo int;
  • altezza di tipo double.

Se vogliamo dichiarare più variabili dello stesso tipo, possiamo farlo in una sola riga separando i nomi con la virgola:

int a, b, c;

Come possiamo vedere, le dichiarazioni di variabili devono terminare con il punto e virgola ;.

A questo punto, possiamo estendere lo schema generale di un programma C che abbiamo visto nella lezione apposita, in questo modo:

direttive

int main() {
    dichiarazioni
    istruzioni
}

In altre parole, abbiamo aggiunto la sezione dichiarazioni in cui dichiareremo le variabili che utilizzeremo nel programma. Ciò è vero per qualsiasi programma C che vogliamo scrivere.

Inoltre, la struttura della funzione main è vera, come vedremo, per qualunque funzione. Dichiariamo sempre le variabili che utilizzeremo e poi scriviamo le istruzioni che vogliamo eseguire.

Definizione

Dichiarazione di una variabile

La dichiarazione di una variabile consiste nel descrivere il suo tipo e il suo nome al compilatore.

La sintassi per dichiarare una variabile è la seguente:

tipo nome;

Assegnazione di una variabile

Possiamo dare un valore ad una variabile, dopo che è stata dichiarata, attraverso l'operazione di assegnazione.

La sintassi è molto semplice:

nome = valore;

Quindi, ad esempio, se abbiamo una variabile numero di tipo int, possiamo assegnarle il valore 42 in questo modo:

numero = 42;

Il numero che si trova alla destra del simbolo = prende il nome di costante letterale.

In C, per poter assegnare un valore ad una variabile, è necessario che la variabile sia stata dichiarata. Non è possibile, infatti, assegnare un valore ad una variabile che non è stata ancora dichiarata in quanto, dal punto di vista del compilatore, in quel momento la variabile non esiste.

Per cui, possiamo scrivere:

/* Corretto */
int numero;
numero = 42;

Ma non possiamo scrivere:

/* Errato */
numero = 42;
int numero;

Per quanto riguarda le variabili di tipo double, possiamo assegnare loro un valore decimale:

double altezza;
altezza = 1.75;
Definizione

Assegnazione di una variabile

L'assegnazione di una variabile consiste nel dare un valore ad una variabile.

La sintassi per assegnare un valore ad una variabile è la seguente:

nome = valore;

Utilizzo di una variabile

Una volta che abbiamo dichiarato una variabile e gli abbiamo assegnato un valore possiamo utilizzarla all'interno del programma.

Per utilizzare, o meglio, leggere il contenuto di una variabile è sufficiente scrivere il nome della variabile stessa.

Fortunatamente, il linguaggio C è stato progettato per supportare formule matematiche che prendono il nome di espressioni. Per cui possiamo scrivere espressioni in cui compaiono variabili e costanti e combinarle tra loro attraverso gli operatori aritmetici.

Ad esempio, supponiamo di avere due variabili:

int a, b;

Possiamo scrivere un'espressione come:

a = 5;
b = a + 10;

Nel codice di sopra, abbiamo prima assegnato alla variabile a il valore 5. Poi, ne abbiamo utilizzato il valore in una espressione per assegnare alla variabile b il valore a + 10, cioè 5 + 10.

Studieremo nel dettaglio le espressioni nel capitolo apposito. Per ora, ci basta sapere che possiamo scrivere espressioni matematiche in C usando variabili, costanti e i seguenti operatori aritmetici:

  • + per l'addizione;
  • - per la sottrazione;
  • * per la moltiplicazione;
  • / per la divisione.

Possiamo anche scrivere espressioni più complesse:

int a, b, c;
a = 5;
b = 10;
c = a + b * 2;

Le espressioni in C supportano anche le parentesi, che permettono di modificare l'ordine di valutazione delle operazioni:

int a, b, c;
a = 5;
b = 10;
c = (a + b) * 2;
Definizione

Utilizzo di una variabile

Per utilizzare una variabile, basta scrivere il suo nome all'interno di un'espressione.

Inizializzazione

Il linguaggio C è un linguaggio di basso livello. Con questo si intende che il programmatore ha il controllo totale sulla memoria del computer.

Ciò ha anche delle conseguenze. Ad esempio, quando dichiariamo una variabile non possiamo fare assunzioni sul valore contenuto in essa. In altre parole, il valore contenuto in una variabile appena dichiarata è indefinito.

Supponiamo di dichiarare una variabile numero di tipo int:

int numero;

Il valore contenuto in numero è indefinito. Potrebbe essere 0, 1, -1, 42, 1000, 123456789, ... o qualsiasi altro valore. Il compilatore C non inizializza le variabili per noi ad un valore predefinito.

Pertanto, se scriviamo il codice che segue:

int numero;
int doppio;

doppio = numero * 2;

Il valore di doppio sarà sconosciuto e potrebbe variare da esecuzione a esecuzione del programma.

Bisogna sempre, pertanto, assegnare un valore alle variabili dopo che sono state dichiarate. Ad esempio:

int numero;
int doppio;

numero = 5;
doppio = numero * 2;

In questo modo, il valore di doppio sarà sempre 10.

Per semplificare la scrittura di un programma, in C è possibile inizializzare una variabile al momento della dichiarazione. La sintassi è la seguente:

tipo nome = valore_iniziale;

Ad esempio:

int numero = 5;
int doppio = numero * 2;

In questo modo, abbiamo ridotto il numero di righe di codice e reso il programma più leggibile.

Definizione

Inizializzazione di una variabile

L'inizializzazione di una variabile consiste nel dare un valore iniziale ad una variabile al momento della dichiarazione.

La sintassi per inizializzare una variabile è la seguente:

tipo nome = valore_iniziale;

Bisogna fare attenzione quando si dichiarano più variabili dello stesso tipo in una sola riga. In tal caso bisogna inizializzare ogni variabile singolarmente.

Ad esempio:

int a = 5, b = 10, c = 20;

Se avessimo scritto:

int a, b, c = 20;

Avremmo inizializzato soltanto la variabile c a 20. Le variabili a e b sarebbero rimaste non inizializzate.

Definizione

Inizializzazione multipla

Quando si dichiarano più variabili dello stesso tipo in una sola riga, bisogna inizializzare ogni variabile singolarmente.

La sintassi è la seguente:

tipo nome1 = valore1, nome2 = valore2, ..., nomeN = valoreN;

Stampare il valore di una variabile

Una delle operazioni più comuni che si effettuano in un programma è la stampa del valore di una variabile a schermo. Quando si scrive un programma che effettua calcoli, è necessario mostrare i risultati parziali o finali.

Per stampare il valore di una variabile a schermo, si utilizza la funzione printf che abbiamo già usato per stampare dei messaggi.

La funzione printf è molto versatile. Per capire come usarla, analizziamo l'esempio che segue:

int numero = 42;
printf("Il valore di numero è %d\n", numero);

Notiamo alcune cose cose:

  1. Abbiamo passato due argomenti alla funzione printf. Il primo argomento è una stringa, una sequenza di caratteri racchiusa tra doppi apici.
  2. Il secondo argomento è il valore della variabile numero.
  3. La stringa contiene il testo che vogliamo stampare a schermo. Inoltre, essa contiene un segnaposto indicato con %d. Questo segnaposto verrà sostituito con il valore del secondo argomento.

Il nome tecnico del segnaposto %d è specificatore di formato. Ne esistono diversi e li analizzeremo in dettaglio nelle prossime lezioni.

Quando la funzione printf viene eseguita, sostituisce il segnaposto %d con il valore della variabile numero e stampa il risultato a schermo. Pertanto otterremo il seguente output:

Il valore di numero è 42

Se invece, avessimo voluto stampare il valore di una variabile di tipo double, avremmo dovuto usare lo specificatore di formato %f:

double altezza = 1.75;
printf("Il valore di altezza è %f\n", altezza);

In questo caso, l'output sarebbe stato:

Il valore di altezza è 1.750000

Infine, al posto del nome di una variabile avremmo potuto usare un'espressione:

int a = 5, b = 10;
printf("La somma di a e b è %d\n", a + b);

In generale, non esiste un limite al numero di argomenti che possiamo passare alla funzione printf. Possiamo passare qualsiasi numero di argomenti e qualsiasi tipo di argomenti. L'importante è che nella stringa ci siano tanti segnaposti quanti sono gli argomenti successivi.

Come esempio, vediamo il programma che segue che calcola l'area di un rettangolo:

#include <stdio.h>

int main() {
    double base = 5.0;
    double altezza = 3.0;

    double area = base * altezza;

    printf("L'area del rettangolo di base %f e altezza %f è %f\n",
            base, altezza, area);

    return 0;
}

In questo programma abbiamo usato tre specificatori di formato %f per stampare tre valori di tipo double. Inoltre, abbiamo suddiviso l'istruzione printf su più righe per renderla più leggibile. Questo non è un problema in C, possiamo scrivere le istruzioni su più righe senza problemi. L'importante è che l'istruzione sia terminata con il punto e virgola ;.

In Sintesi

In questa lezione abbiamo introdotto il fondamentale concetto di variabile in linguaggio C. Abbiamo visto che:

  • Una variabile è una locazione di memoria a cui è associato un nome simbolico.
  • Ad ogni variabile è associato un tipo che determina il genere di dati che essa può contenere e le operazioni che si possono effettuare su di essa.
  • Per poter essere utilizzata, una variabile deve essere dichiarata.
  • Dopo che una variabile è stata dichiarata, possiamo assegnarle un valore.
  • Una variabile può essere utilizzata all'interno di un'espressione.
  • Il valore contenuto in una variabile appena dichiarata è indefinito.
  • Possiamo inizializzare una variabile al momento della dichiarazione.
  • Per stampare il valore di una variabile a schermo, usiamo la funzione printf.

Nella prossima lezione vedremo come richiedere all'utente di inserire un valore da tastiera e memorizzarlo in una variabile.