Blue Flower

Le basi del linguaggio


Il linguaggio C permette di costruire con precisione ed efficacia un programma ben strutturato.
Il linguaggio C, ideato da Dennis M. Ritchie e da Brian W. Kernighan attorno al 1970, è uno dei più importanti linguaggi per la programmazione strutturata ancora oggi utilizzato.
La versione ufficiale del linguaggio C è quella stabilita nel 1983 dalle specifiche dell’ente americano per gli standard ANSI (American National Standard Institute). Successive revisioni portarono
alla versione del 1989, approvata dall’ente internazionale per gli standard ISO (International Standardization Organization) e denominata normalmente come “ANSI C” o “ISO C”.

Iniziamo con un esempio molto semplice, che ci consente di mettere in evidenza le operazioni più importanti da svolgere per preparare ed eseguire un programma.
Supponiamo di voler scrivere un programma C per calcolare la somma di due numeri.
Il procedimento da seguire consiste nel prendere in ingresso due numeri, che indichiamo con a e b, sommarli e produrre in uscita il risultato, che indichiamo con s: cioè:

s ← a + b

a, b sono i dati di input, s è il dato di output, e l’addizione è l’attività di elaborazione richiesta.


L’algoritmo che risolve il problema in esame è il seguente:


Algoritmo Somma
inizio
       immetti a, b
      calcola s = a + b
      scrivi s
fine
Si noti che nella descrizione del procedimento non si usano numeri, ma lettere che stanno al posto dei numeri, cioè variabili: questo consente di scrivere procedimenti di carattere generale,
offrendo la possibilità di eseguire più volte lo stesso procedimento con dati diversi.
Per far eseguire questo semplice algoritmo a un computer, occorre indicare la sequenza delle istruzioni usando il linguaggio di programmazione.
Oltre alle parole che fanno parte del linguaggio, in un programma compaiono gli identificatoricioè i nomi che il programmatore assegna alle costanti e alle variabili, e che rappresentano i
dati utilizzati nel programma.
In C il procedimento precedente viene scritto in questa forma:


/* Somma.c : somma di due numeri */
#include <stdio.h>
main()
{

int a, b, s;
scanf("%d %d", &a, &b);
s = a + b;
printf("%d", s);
}

La prima riga è un commento, non obbligatorio, solo documentativo e delimitato dalle coppie di caratteri /* e */, che indicano l’inizio e la fine del commento. In questo caso è stato scritto il
nome con il quale il programma è stato salvato su disco (Somma.c), file di testo con l’estensione .c, e una breve descrizione delle funzionalità del programma stesso.
Il linguaggio C non possiede apposite istruzioni per la gestione dell’interazione con l’utente, ma si appoggia sulle funzioni delle librerie standard del linguaggio, dette librerie di I/O (input/output).
Il programma che utilizza operazioni di input e output deve quindi contenere all’inizio un’apposita dichiarazione (direttiva include) per includere in esso la libreria di I/O:


#include <stdio.h>

Il file stdio.h è un file di header (file di intestazione con estensione .h, il cui nome è scritto all’interno di una coppia di parentesi angolari < >), che contiene la descrizione (prototipo) delle funzioni di I/O, richiamabili poi da un qualsiasi punto del programma, in particolare le funzioni scanf per acquisire i dati dalla tastiera e printf per visualizzare i risultati sul video.
Il programma vero e proprio inizia con la parola main seguita da una parentesi graffa aperta, che indica l’inizio della sequenza delle istruzioni da eseguire. La sequenza termina con una parentesi graffa chiusa.
Per inserire le parentesi graffe, usando una tastiera che non riporta esplicitamente il tasto, si può usare una tra le seguenti combinazioni di tasti:

{ Alt + 123 (tastierino numerico) Ctrl + Alt + Shift + [ Shift + AltGr + [
} Alt + 125 (tastierino numerico) Ctrl + Alt + Shift + ] Shift + AltGr + ]

Subito dopo la parola main c’è una coppia di parentesi tonde, perché, come vedremo meglio in seguito, il programma può essere considerato una funzione che può ricevere argomenti: essi, se presenti, vengono indicati tra le parentesi tonde.
La prima riga del programma specifica quali sono le variabili utilizzate nel programma e di che tipo sono (int, cioè numeri interi).
Nelle righe successive vengono scritte le istruzioni da eseguire, in sequenza, nell’ordine in cui sono state scritte: scanf indica la lettura dei dati dalla tastiera (input), l’istruzione s = a + b specifica che il risultato del calcolo a + b deve essere assegnato alla variabile s, e infine printf ordina la visualizzazione del risultato di output (variabile s) sullo schermo del computer.
La lettera f finale nelle due istruzioni specifica che l’input e l’output seguono un formato specificato (input e output formattati): per trattare i dati numerici interi si usa il formato indicato con 
%d (specificatore di formato).
Nell’istruzione scanf, poi, davanti al nome delle variabili a e b, è stato scritto il carattere & (ampersand o e-commerciale): esso indica che il valore acquisito dalla tastiera deve essere registrato all’indirizzo delle variabili a e b in memoria centrale.
Tutte le righe terminano con il punto e virgola, come se fossero le frasi di un testo scritto in un linguaggio naturale, ad eccezione delle righe di commento e della dichiarazione di inclusione #include.
Un programma C può, quindi, essere ricondotto ad uno schema generale, che comprende principalmente
tre sezioni:

  •  intestazione;
  • zona delle dichiarazioni;
  • sezione esecutiva.

Il linguaggio C è un linguaggio case-sensitive, nel senso che distingue tra lettere maiuscole e minuscole, per cui la variabile numero è diversa dalla variabile Numero e dalla variabile NUMERO.
Nella consuetudine della programmazione nel linguaggio C, si usano normalmente i caratteri minuscoli sia per le parole chiave del linguaggio, sia per gli identificatori e le variabili; i nomi composti sono indicati spesso con l’uso delle maiuscole nelle iniziali (per esempio, TriangoloRettangolo).
Vediamo ora più in dettaglio come si rappresentano in un programma C i dati e le istruzioni.
I dati utilizzati all’interno di un programma possono essere:

  • costanti, se non cambiano il loro valore durante l’esecuzione del programma;
  • variabili, se cambiano il valore.

I dati trattati in un programma possono essere:

  • numerici, quali età, importi, stipendi, misure;
  • alfanumerici (o stringhe), quali nomi, descrizioni, codici.

Sui dati di tipo numerico si possono effettuare le usuali operazioni aritmetiche, che vengono rappresentate con gli operatori:


+  per l’addizione;
–  per la sottrazione;
*  per la moltiplicazione;
/   per la divisione;
% per il calcolo del resto della divisione tra interi.