linguaggio c - sezione dichiarativa: costanti e...
Post on 17-Oct-2019
6 Views
Preview:
TRANSCRIPT
Dipartimento di Elettronica ed Informazione Politecnico di Milano
Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani
A.A. 2008/2009
Linguaggio C - sezione
dichiarativa: costanti e variabili
La presente dispensa e’ da utilizzarsi ai soli fini didattici previa autorizzazione dell’autore. E’ severamente vietata la
riproduzione anche parziale e la vendita.
08/10/2008
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 1
Costanti
•! Esistono due tipi di costanti –!Esplicite: esprimono direttamente dei valori
•! 24 costante di tipo int •! 24L costante di tipo long •! 3.145 costante di tipo double •! ‘A’ costante di tipo char
–!Simboliche •! Sono nomi simbolici che il programmatore adotta per
indicare dei valori prefissati (maggiore leggibilità) •!Hanno un tipo espresso implicitamente nel valore •!Devono essere precedentemente dichiarate
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 2
Dichiarazione di costanti
•! Dichiarare una costante significa associare un simbolo ad un valore
•! A differenza delle variabili tale valore non cambierà mai durante tutto il programma
•! Esistono due modi per dichiarare una costante: –!Attraverso la direttiva #define –!Attraverso la parola chiave const
•! In ogni caso una costante NON occupa alcuna zona di memoria
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 3
Direttiva #define
•! Associa un nome ad un valore di qualunque tipo •! Esempi
–! #define nmaxp 10 –! #define vmax 150.0 –! #define FALSE 0 –! #define TRUE 1 –! #define MIASTRINGA “Hello world!”
•! L’istruzione non deve terminare con il ; •! In questo caso l’andare a capo indica la fine
dell’istruzione •! Il nome della costante viene anche detta macro
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 4
Parola chiave const
•! Permette di definire costanti tipizzate •! Sono costanti che accettano un valore
ammissibile per il tipo di dato al quale è associato
const float pi = 3.1415
•! Anche in questo caso non viene riservata alcuna zona di memoria
•! Ulteriori assegnamenti di costanti all’interno del codice sono vietati
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 5
Il compilatore e le costanti
#define PI 3.14
const int raggio = 10;
int main() {
float area;
area = raggio * raggio * PI
return 0;
}
int main() {
float area;
area = 10 * 10 * 3.14
return 0;
}
•! In fase di compilazione ogni riferimento ad una costante viene sostituito con il valore corrispondente
•! Alla fine di questa sostituzione la costante è come se non fosse stata dichiarata
•! Per questo motivo il compilatore non riserva alcuna zona di memoria ad una costante
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 6
Parte dichiarativa
•! La parte dichiarativa non è unica in tutti il codice
•! Esistono: –! una parte dichiarativa
globale: prima del main –! una parte dichiarativa locale
al main: all’interno del main
•! Al momento, dichiarare una variabile all’interno di quella globale o di quella locale non fa differenza
•! La differenza sarà evidente quando si introdurranno i sottoprogrammi
#include <stdio.h>
int i;
int main() {
int j;
printf(“Hello World”);
return 0;
}
Parte dichiarativa globale
Parte dichiarativa locale al main
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 7
Parte dichiarativa globale
•! Contiene dichiarazione di funzioni importate da altri moduli (file), cioè definite e codificate in altri file (attraverso la direttiva #include)
•! Oggetti visibili (utilizzabili) da tutto il programma, cioè da main e da altre funzioni
•! Tipi di dati, variabili, costanti simboliche, prototipi di funzioni
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 8
Parte dichiarativa locale
•! Può contenere gli stessi elementi dichiarabili nella parte dichiarativa globale
•! È esclusa solo la possibilità di utilizzare la direttiva (#include, #define)
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 9
Variabili
•! Sono contenitori di informazioni (cioè di valori), caratterizzati da: –!nome simbolico: rappresenta in modo univoco il
contenuto di locazione di memoria –! tipo: rappresenta i valori ammissibili per la
variabile e le operazioni che si possono effettuare su di essa
Il valore della variabile indica il contenuto della cella di memoria
Memoria centrale
Ogni cella ha un indirizzo indicato con
&nome_variabile } Cella di
memoria
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 10
tipo_variabile nome_var;
Dichiarazione di variabili
•! Dichiarazione di variabile: indica che e come una variabile verrà utilizzata dal programma –! Definisce l’identificatore simbolico (nome) –! Definisce il tipo, adatto ai valori da rappresentare –! Alloca la quantità di memoria adeguata a contenere il tipo –! Associa in modo univoco il contenuto della cella di memoria
al nome –! Consente di rilevare, durante la compilazione, errori sull’uso
improprio della variabile nel programma
•! Sintassi C per la dichiarazione di variabili
•! Lo spazio di memoria allocato per una variabile dipende dal tipo di dato
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 11
Perché dichiarare una variabile?
•! Una variabile rappresenta uno spazio di memoria centrale
•! Prima dell’esecuzione del programma deve essere chiaro quanto spazio serve al programma –!Quindi devono essere note tutte le variabili che un
programma intende utilizzare
•! Tutti gli accessi alla variabile indicano un accesso alla memoria –!Quindi deve essere chiaro quale spazio di memoria
è associato alla variabile
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 12
Tipi di dato
•! Un tipo identifica la classe dei valori ammissibili, le operazioni lecite, e la modalità con cui agiscono le operazioni
•! Esistono due macro-classi di tipi: –!Tipi built-in (predefiniti) –!Tipi definiti dall’utente
•! Sia quelli built-in che quelli definiti dall’utente possono essere: –!Semplici –!Composti
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 13
Tipi semplici built-in
•! char: –! Occupa 8 bit (1 byte) –! Può contenere valori da 0 a 255, che rappresentano la codifica
ASCII del carattere corrispondente •! int
–! Occupa 16 bit (2 byte) –! Rappresentano gli interi relativi. Valori in complemento a 2 da
–32768 a + 32767 •! float
–! Occupa 32 bit (4 byte) –! Rappresentano i razionali in virgola mobile. Valori espressi tramite
mantissa e esponente. Valori da 10-38 a 10+38
•! double –! Occupa 64 bit (8 byte) –! Rappresentano i razionali in virgola mobile. Valori espressi tramite
mantissa e esponente. Valori da 10-308 a 10+308
•! Questi tipi sono anche detti tipi aritmetici
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 14
Calcolo dello spazio di memoria dati richiesto
#include <stdio.h>
int main() {
int r;
float circ;
scanf(“%d”, &r);
circ= 2*3.14*r;
printf(“Circonferenza è %f”, circ);
return 0;
}
•! Il programma richiede uno spazio di memoria per i dati pari a –! 2 byte per r –! 4 byte per circ
•! Per un totale di 6 byte
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 15
long, short e unsigned 1/2
•! Il tipo di dato int ha delle varianti che modificano i valori ammissibili –! long raddoppia lo spazio di memoria –! short dimezza lo spazio di memoria –! unsigned elimina il bit di segno e ammette solo
valori positivi
•! Il tipo di dato double ammette la sola variante long che aumenta lo spazio di memoria
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 16
long, short e unsigned 2/2
•! unsigned int: –! Occupa 16 bit (2 byte) –! Ammette valori compresi tra 0 e 65535 (216-1)
•! long int –! Occupa 32 bit (4 byte) –! Ammette valori compresi tra -2.147.483.648 e 2.147.483.647
•! short int –! Occupa 8 bit (1 byte) –! Ammette valori compresi tra -128 e +127 (28-1)
•! unsigned long int –! Occupa 32 bit (1 byte) –! Ammette valori compresi tra 0 e 4.294.967.295 (232-1)
•! long double –! Occupa 80 bit (10 byte) –! Ammette valori compresi tra 10-4932 e 10+4932
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 17
Tipo di dato char 1/2
•! Dichiarando una variabile di tipo char si riserva una zona di memoria di 1 byte
•! In quella cella di memoria non è inserito il carattere ma la sua codifica ASCII (American Standard Code for Information Interchange)
•! Esempio
char c;
c = ‘A’;
•! Nella zona di memoria è inserito il valore 010000012 (6510) (4116)
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 18
Tipo di dato char 2/2
•! Per il compilatore quindi vale la relazione
char == unsigned short int
•! Attenzione! c = 1 è diverso da c = ‘1’ –! Nel primo caso a c è assegnato il valore 1 –! Nel secondo caso a c è assegnata la codifica del carattere 1 e
quindi 4910 (3116)
•! Supponendo che c==‘1’ con c di tipo char –! printf(“%c”, c); stampa il carattere 1
–! printf(“%d”, c); è valido e stampa il numero 4910
•! Supponendo che i==90 con i di tipo int –! printf(“%c”, i); è valido e stampa il carattere ‘Z’
–! printf(“%d”, i); stampa il numero 9010
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 19
Tabella ASCII
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 20
Tipi di Operatori
•! Aritmetici •! + (somma) •! - (sottrazione) •! * (prodotto) •! / (divisione) •! % (resto)
•! Di confronto •! > (maggiore) •! >= (maggiore o uguale) •! < (minore) •! <= (minore o uguale) •! == (uguale) •! != (diverso)
•! Assegnamento •! =
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 21
Assegnamento
•! È un operatore e si indica con il simbolo = (uguale)
•! A sinistra dell’operatore deve sempre esserci una variabile
•! A destra può esserci –!una costante, –!una variabile –!un’espressione
•! Attenzione! Il tipo di dato della variabile a sinistra dell’operatore deve essere identico (o almeno compatibile) con quanto indicato a destra
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 22
Compatibilità tra i tipi
•! Il compilatore controlla la compatibilità tra i tipi
•! In alcune situazioni risolve la non compatibilità tramite delle regole di conversione automatica tra i tipi
•! La conversione del tipo è indolore se il tipo di dato a destra è inferiore al tipo della variabile a destra dell’operatore, secondo la seguente gerarchia: char < int < float
•! Altrimenti non è esclusa perdita di informazione
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 23
Compatibilità tra i tipi - Esempio
•! La conversione di un valore a float in un valore int comporta la perdita della parte frazionaria
int i;
float f;
f = 4.3; /*OK!*/
i = 4.3; /*assegnamento incongruente con
perdita di informazione*/
f = 10; /*assegnamento incongruente senza
perdita di informazione*/
i = 10; /*OK!*/
top related