Percorso: ilMac.net > Scuola di Mac > Corsi > Il linguaggio C


Il linguaggio C

Espressioni

In questo articolo verranno trattati alcuni degli aspetti un po’ piu’ matematici della programmazione in C. Forse sarà il caso di andare a spolverare i libri di algebra delle superiori...:-)
E’ una lezione prettamente teorica e probabilmente richiederà piu’ tempo e piu’ attenzione per essere ben compresa rispetto alle altre, è d’obbligo che alcune cose (mi raccomando le tabelle e gli operatori!) vadano imparate a memoria.
Ho cercato di tagliare le parti piu’ noiose, spero che sia di facile apprendimento.

Espressioni aritmetiche

Definizione di espressione aritmetica: è un insieme di variabili, costanti e funzioni connessi da operatori aritmetici. Il risultato di un’espressione aritmetica è SEMPRE un valore numerico.

All’interno delle espressioni aritmetici bisogna sempre tenere ben presente che gli operatori e le parentesi non devono essere disposti a caso. Tutto segue una rigorosa gerarchia che deve essere rispettata, pena il malfunzionamento del programma.
Ecco quindi la gerarchia degli operatori aritmetici.

1. negazione ( - )

2. moltiplicazione ( * ) , divisione ( / ), modulo (%)

3. somma ( + ), sottrazione ( - )

4. assegnamento ( = )

Faccio un esempio:
Se y = 8, l’espressione -y sara’ uguale a -8

Mentre:
2 * - ( y - 9 ) sarà uguale a +2
All’interno delle espressioni aritmetiche, la priorità degli operatori segue le regole dell’algebra (ed ecco perché vi ho consigliato quei libri :-), nel secondo caso viene applicata la regola “meno per meno fa piu’”.

A livello di compilatore, la valutazione delle espressioni avviene esaminandola da sinistra a destra piu’ e piu’ volte. Le prime ad essere eseguite sono le operazioni di negazione , quindi l’espressione è esaminata nuovamente per eseguire tutte le moltiplicazioni, divisioni e le operazioni modulo (%). L’ultima scansione esegue le addizioni e le sottrazioni. Nel C si usano solo le parentesi tonde nelle espressioni (le graffe sono usate altrove nei listati). Vengono valutate per prime le operazioni all’interno delle parentesi tonde piu’ interne.

NB: attenzione a non confondere il simbolo di assegnamento ( = ) con quello di uguaglianza ( == ).
Infatti, come visto si usa il simbolo di assegnamento ad esempio per attribuire un valore ad una variabile:
y = 9;
Mentre, se dobbiamo fare un confronto (supponiamo tra una variabile e un numero),
con l’utilizzo di un concetto di uguaglianza quindi, con un istruzione del tipo: “se x è uguale a 2 allora scrivi ‘esatto’” scriveremo:
if( x == 2)
printf(“esatto”);

Espressioni logiche e operatori relazionali

Un’espressione logica genera come risultato un valore VERO (1) o FALSO (0) . Da ricordare che qualsiasi valore diverso da zero verrà considerato VERO.
Un semplice esempio di espressione logica puo’ essere quello di una variabile, il cui valore puo’ essere considerato vero, se diverso da zero, falso se uguale a zero.
Per confrontare i valori all’interno di un’espressione logica utilizziamo gli operatori relazionali, cioè: > (maggiore di), >= (maggiore o uguale), < (minore di), <= (minore o uguale), == (uguale a), != (diverso da).
La gerarchia di questi operatori è la seguente:

1. > (maggiore di), >= (maggiore o uguale), < (minore di), <= (minore o uguale)

2. == (uguale a), != (diverso da)

Come avrete notato i primi quattro operatori hanno la medesima priorità che è maggiore
solo a == e a != , gli ultimi ad essere trattati in un’espressione logica.

Per capire meglio, prendiamo l’espressione:
a<b == x>z
il compilatore valuta prima le espressioni a<b e x>z poiché come detto < e > hanno priorità maggiore. Solo successivamente verrà valutata l’espressione nel suo insieme
(a<b) == (x>z)

Eccone l’applicazione in un listato:

#include <stdio.h>
main()

{
int x = (5*5*5)/5 ;

if(x) printf("x è diverso da 0");

}

Analizziamo la variabile x , il Mac, una volta eseguita l’operazione (5*5*5)/5, che risulta 25, attribuira’ a x il valore 5. Poniamo un if per il confronto dell’espressione logica, che in questo caso è semplicissima (x = 5). Questa espressione è VERA (1) poiché il suo valore è diverso da zero. Cosi’ il Mac passerà all’esecuzione del comando printf.
Il contrario accade nel listato che segue. X risulterà valere zero, e il comando printf preceduto dall’if non verrà mai eseguito in quanto l’espressione è FALSA (0).

#include <stdio.h>
main()

{
int x = ((5*5*5)/5)*0 ;

if(x) printf("x è diverso da 0");

}

Gli operatori logici

Un gruppo di espressioni logiche puo’ inoltre essere concatenato mediante gli operatori logici. Essi sono in grado di negare il risultato di un’espressione logica. In ordine di priorità abbiamo:

1. ! (NOT logico)
2. && (AND logico)
3. || (OR logico)

Quest’ultimo si noti che non é composto da due “I” maiuscole. Per ottenere il simbolo premere “alt” - “slash” (/).

Ecco come operano questi operatori nella seguente tabella della verità. Ecco concatenate due espressioni x e y.

x y x&&y x||y !x
0 0 0 0 1
0 1 0 1 1
1 0 0 1 0
1 1 1 1 0

Partiamo dal connettivo AND (&&). Esso restituisce VERO se e solo se il valore di entrambe le espressioni è VERO.
Il connettivo OR (||) restuisce VERO se almeno una delle due espressioni logiche è VERA. Restituisce FALSO se entrambe le espressioni sono false.
Infine il l’operatore (non è un connettivo, lavora solo su una espressione) NOT (!) nega sempre il valore di un’espressione, infatti se x è FALSA restituisce VERO e viceversa.



Data di pubblicazione: 27-04-2000
L'intero contenuto di questo sito dal 1998 del Team di ilMac.net, vietata ogni riproduzione senza il consenso scritto da parte degli autori.