Come sono fatte le espressioni per rappresentare valori
di un qualche tipo, sia esso T
una descrizione di un valore di tipo T, cioè una costante di
tale tipo;
in C, per esempio,
-3.334, '@' e 33333 sono tre semplici espressioni di tipo rispettivamente float, char
e int.
una variabile (o meglio il nome simbolico di tale variabile) dichiarata
di tipo T che
indica il valore contenuto al suo interno;
in C, per esempio,
se X2, Y_Z e CC
sono tre variabili dichiarate di tipo rispettivamente float, char
e int, allora
X2, Y_Z e CC
sono tre espressioni di tali tre tipi.
un'operazione applicata ad espressioni aventi i tipi opportuni che
ritorna un elemento di tipo T;
in C, per
esempio,
3333 + CCsin(X2)'@' ==
Y_Z dove CC, X2 e Y_Z sono variabili
rispettivamente di tipo int, float
e char
sono tre espressioni corrette di tipo rispettivamente
int, float
e int; ricordare che in C non esiste il tipo booleano, e che le
operazioni di confronto ritornano un intero.
QUESTIONI
Controllo dei tipi nel formare espressioni
Per ogni operazione di un tipo di dato
è definito il numero ed il tipo degli argomenti,
pertanto
non è possibile formare espressioni applicando un'operazione ad un numero
diverso di argomenti o ad argomenti di tipo diverso,
sin('@') e sin(3.2, 4.4) sono errate.
Casi particolari:
conversioni implicite di tipo: se un'operazione vuole un reale e invece
arriva un intero viene automaticamente convertito, e questo non dovrebbe
creare problemi.
Il C fa molto di più, per esempio, se un'operazione
vuole un intero e arriva un
carattere il carattere viene convertito;
usare questa possibilità solo in casi particolari,
poichè può dare origine a problemi.
Sintassi funzionale e infissa delle operazioni
Notare il differente modo di formare le espressioni usando
+ e sin, il primo usa una sintassi infissa,
mentre il secondo una funzionale.
La sintassi infissa può creare ambiguità, es. cosa indica
3 + 4 * 5 ?
Per superare questo problema, si può
usare delle parentesi (come al solito nella matematica)
(3 + 4) * 5
o
3 + (4 * 5)
oppure definire le precedenze tra le operazioni (ogni linguaggio elenca le
sue)
es, - unario precedenza su + e - binario
quindi
3 - 5 + 4 è 3 +(- 5) + 4
e non 3 - (5 + 4)
ESERCIZI
Assumendo che alcune variabili siano state dichiarate come segue:
int X1, TT, FF;
char CC, CQ, C33 ;
float X, Y, Z;
dire quali delle seguenti assegnazioni C sono corrette
Y = 0E0;
X = 0e-1;
TT = 1;
FF = 0;
X1 = TT;
TT = (X == Y) == X1;
CC = '|';
C33 = 2* (CC - 1);
X = X1;
X1 = X;
Z = (X/Y)*(Y/X);
Usando le variabili dichiarate sopra, scrivere 3 assegnazioni corrette
e 3 errate.