prof. Nunzio Brugaletta | Programmazione e linguaggio C |
Si supponga di voler calcolare l'area di un rettangolo i cui lati hanno valori interi. Entrano in gioco due variabili, la base e l'altezza, il cui prodotto è ancora un valore intero, l'area appunto.
#include <stdio.h> /* Calcolo area rettangolo */ main(){ int base; int altezza; int area; base = 3; altezza = 7; area = base*altezza; printf("%d",area); }
Per rendere evidente la funzione espletata dal programma si è inserito un commento:
/* Calcolo area rettangolo */
I commenti possono estendersi su più linee e apparire in qualsiasi parte del programma, devono essere preceduti da /* e seguiti da */, tutto ciò che appare nelle zone così racchiuse non viene preso in considerazione dal compilatore e non ha alcuna influenza sul funzionamento del programma, è però importantissimo per chi legge il programma: è infatti nelle righe di commento che viene specificato il senso delle istruzioni che seguiranno. Cosa, questa, non immediatamente comprensibile se si leggono semplicemente le istruzioni del linguaggio.
Subito dopo main() sono presenti le dichiarazioni delle variabili intere necessarie:
int base; int altezza; int area;
La parola chiave int specifica che l'identificatore che lo segue si riferisce ad una variabile di tipo intero; dunque base, altezza e area sono variabili di questo tipo.
Anche le dichiarazioni così come le altre istruzioni devono terminare con un punto e virgola. Nell'esempio, alla dichiarazione del tipo della variabile corrisponde anche la sua definizione che fa sì che le venga riservato uno spazio in memoria centrale.
Il nome di una variabile la identifica, il suo tipo ne definisce la dimensione e l'insieme delle operazioni che vi si possono effettuare. La dimensione può variare rispetto all'implementazione; il più piccolo e il più grande valore ammessi sono visualizzabili, come si vedrà più avanti, stampando il contenuto di opportune costanti. Tra le operazioni permesse fra int vi sono: la somma (+), la sottrazione (-), il prodotto (*) e la divisione (/).
Effettuata la dichiarazione, la variabile può essere utilizzata. L'istruzione
base = 3;
assegna alla variabile base il valore 3; cioè inserisce nello spazio di memoria riservato a tale variabile il valore indicato. Effetto analogo avrà altezza=7. L'assegnamento è dunque realizzato mediante l'operatore = .
Nel linguaggio C è possibile assegnare lo stesso valore a più variabili contemporaneamente. Per esempio se le dimensioni riguardavano un quadrato, si sarebbe potuto scrivere:
base = altezza = 5;
In questo caso prima verrebbe assegnato il valore 5 alla variabile altezza e quindi, il risultato dell’assegnazione (cioè 5), viene assegnato alla variabile base.
L'istruzione:
area = base * altezza;
assegna alla variabile area il prodotto dei valori di base e altezza .
L'operatore asterisco effettua l'operazione di prodotto tra la variabile che lo precede e quella che lo segue, è dunque un operatore binario.
L'ultima istruzione
printf("%d",area);
visualizza 21, il valore della variabile area. Tra i doppi apici, il simbolo di percentuale % specifica che il carattere che lo segue definisce il formato di stampa della variabile area; d (decimale) indica che si tratta di un intero del quale si desidera la visualizzazione nel sistema decimale.
Le dichiarazioni delle variabili dello stesso tipo possono essere scritte in sequenza separate da una virgola:
int base,altezza,area;
Dopo la dichiarazione di tipo sono specificati gli identificatori di variabile, che possono essere in numero qualsiasi, separati da virgola e chiusi da un punto e virgola. In generale quindi la dichiarazione di variabili ha la seguente forma:
tipo lista_di identificatori;
Esistono inoltre delle regole da rispettare nella costruzione degli identificatori: devono iniziare con una lettera o con un carattere di sottolineatura _ e possono contenere lettere, cifre e _. Per quanto riguarda la lunghezza occorre tenere presente che soltanto i primi trentadue caratteri sono significativi, anche se nelle versioni del C meno recenti questo limite scende a otto caratteri. Sarebbe comunque opportuno non iniziare il nome della variabile con il carattere di sottolineatura ed è bene tenere presente che le lettere accentate, permesse dalla lingua italiana, non sono considerate lettere ma segni grafici e le lettere maiuscole sono considerate diverse dalle rispettive minuscole.
Oltre a rispettare le regole precedentemente enunciate, un identificatore non può essere una parola chiave del linguaggio, né può essere uguale ad un nome di funzione libreria o scritta dal programmatore.
Allo scopo di rendere più chiaro l'effetto ottenuto dal programma dell'esempio precedente, si possono visualizzare i valori delle variabili base e altezza.
printf("%d ",base); printf("%d ",altezza); printf("%d",area);
Nelle prime due printf si è inserito all'interno dei doppi apici, di seguito all'indicazione del formato di stampa %d, uno spazio, in modo che venga riportato, in fase di visualizzazione, dopo il valore della base e dell'altezza, così da ottenere
3 7 21
e non
3721
È opportuno, per motivi di chiarezza, far precedere la visualizzazione dei valori da una descrizione. In questo caso è sufficiente inserirla tra doppi apici.
printf("Base: %d ",base); printf("Altezza: %d ",altezza); printf("Area: %d",area);
Quello che si ottiene in esecuzione è
Base: 3 Altezza: 7 Area: 21
Per ottenere una distanza maggiore tra il valore di base e altezza e le seguenti descrizioni si possono aggiungere ulteriori spazi
printf("Base: %d",base); printf("\tAltezza: %d",altezza); printf("\tArea: %d",area);
così da avere
Base: 3 Altezza: 7 Area: 21
Per far in modo che ad ogni visualizzazione corrisponda un salto riga si deve inserire \n prima della chiusura dei doppi apici:
printf("Base: %d\n",base); printf("Altezza: %d\n",altezza); printf("Area: %d\n",area);
Si possono effettuare più output con la stessa istruzione. Per esempio:
printf("Base: %d Altezza: %d Area: %d",base,altezza,area);
visualizzerebbe:
Base: 3 Altezza: 7 Area: 21
In questo caso figura una lista di variabili da mandare in output. In sede di esecuzione ogni simbolo di formato si riferisce ad una variabile (il primo %d si riferisce a base, il secondo ad altezza ecc…). Ovviamente si sarebbero potuti pure inserire diversi caratteri di formato per formattare, a seconda delle preferenze, l’output (per es \n per andare a capo e \t per distanziare).
Il prossimo listato mostra il programma C modificato seguendo alcune delle caratteristiche introdotte.
#include <stdio.h> /* Calcolo area rettangolo */ main(){ int base,altezza,area; base = 3; altezza = 7; area = base*altezza; printf("Base: %d Altezza: %d\n Area: %d",base,altezza,area); }
L'esecuzione del programma avrà il seguente effetto:
Base: 3 Altezza: 7 Area: 21
Mentre int è una parola chiave del C e fa parte integrante del linguaggio, base, altezza e area sono identificatori di variabili scelti a nostra discrezione. Lo stesso effetto si sarebbe ottenuto utilizzando al loro posto altri nomi generici quali x, y e z solo che il programma sarebbe risultato meno comprensibile.
La forma grafica data al programma è del tutto opzionale; una volta rispettata la sequenzialità e la sintassi, la scrittura del codice è libera. In particolare più istruzioni possono essere scritte sulla stessa linea. E indubbio che il programma risulterà notevolmente meno leggibile del precedente.
Lo stile grafico facilita enormemente il riconoscimento delle varie parti del programma e consente una diminuzione di tempo nelle modifiche, negli ampliamenti e nella correzione degli errori. In generale è inoltre bene dare alle variabili dei nomi significativi, in modo che, quando si debba intervenire, a distanza di tempo, sullo stesso programma, si possa facilmente ricostruire l'uso che si è fatto di una certa variabile.
http://ennebi.solira.org | ennebi@solira.org |