Linguaggio C - sezione dichiarativa: costanti e...

24
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

Transcript of Linguaggio C - sezione dichiarativa: costanti e...

Page 1: Linguaggio C - sezione dichiarativa: costanti e variabilihome.deib.polimi.it/plebani/download/infoICA/L4-LinguaggioC... · Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A.

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

Page 2: Linguaggio C - sezione dichiarativa: costanti e variabilihome.deib.polimi.it/plebani/download/infoICA/L4-LinguaggioC... · Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A.

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

Page 3: Linguaggio C - sezione dichiarativa: costanti e variabilihome.deib.polimi.it/plebani/download/infoICA/L4-LinguaggioC... · Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A.

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

Page 4: Linguaggio C - sezione dichiarativa: costanti e variabilihome.deib.polimi.it/plebani/download/infoICA/L4-LinguaggioC... · Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A.

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

Page 5: Linguaggio C - sezione dichiarativa: costanti e variabilihome.deib.polimi.it/plebani/download/infoICA/L4-LinguaggioC... · Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A.

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

Page 6: Linguaggio C - sezione dichiarativa: costanti e variabilihome.deib.polimi.it/plebani/download/infoICA/L4-LinguaggioC... · Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A.

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

Page 7: Linguaggio C - sezione dichiarativa: costanti e variabilihome.deib.polimi.it/plebani/download/infoICA/L4-LinguaggioC... · Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A.

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

Page 8: Linguaggio C - sezione dichiarativa: costanti e variabilihome.deib.polimi.it/plebani/download/infoICA/L4-LinguaggioC... · Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A.

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

Page 9: Linguaggio C - sezione dichiarativa: costanti e variabilihome.deib.polimi.it/plebani/download/infoICA/L4-LinguaggioC... · Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A.

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)

Page 10: Linguaggio C - sezione dichiarativa: costanti e variabilihome.deib.polimi.it/plebani/download/infoICA/L4-LinguaggioC... · Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A.

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

Page 11: Linguaggio C - sezione dichiarativa: costanti e variabilihome.deib.polimi.it/plebani/download/infoICA/L4-LinguaggioC... · Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A.

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

Page 12: Linguaggio C - sezione dichiarativa: costanti e variabilihome.deib.polimi.it/plebani/download/infoICA/L4-LinguaggioC... · Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A.

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

Page 13: Linguaggio C - sezione dichiarativa: costanti e variabilihome.deib.polimi.it/plebani/download/infoICA/L4-LinguaggioC... · Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A.

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

Page 14: Linguaggio C - sezione dichiarativa: costanti e variabilihome.deib.polimi.it/plebani/download/infoICA/L4-LinguaggioC... · Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A.

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

Page 15: Linguaggio C - sezione dichiarativa: costanti e variabilihome.deib.polimi.it/plebani/download/infoICA/L4-LinguaggioC... · Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A.

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

Page 16: Linguaggio C - sezione dichiarativa: costanti e variabilihome.deib.polimi.it/plebani/download/infoICA/L4-LinguaggioC... · Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A.

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

Page 17: Linguaggio C - sezione dichiarativa: costanti e variabilihome.deib.polimi.it/plebani/download/infoICA/L4-LinguaggioC... · Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A.

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

Page 18: Linguaggio C - sezione dichiarativa: costanti e variabilihome.deib.polimi.it/plebani/download/infoICA/L4-LinguaggioC... · Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A.

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)

Page 19: Linguaggio C - sezione dichiarativa: costanti e variabilihome.deib.polimi.it/plebani/download/infoICA/L4-LinguaggioC... · Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A.

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

Page 20: Linguaggio C - sezione dichiarativa: costanti e variabilihome.deib.polimi.it/plebani/download/infoICA/L4-LinguaggioC... · Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A.

Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 19

Tabella ASCII

Page 21: Linguaggio C - sezione dichiarativa: costanti e variabilihome.deib.polimi.it/plebani/download/infoICA/L4-LinguaggioC... · Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A.

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 •! =

Page 22: Linguaggio C - sezione dichiarativa: costanti e variabilihome.deib.polimi.it/plebani/download/infoICA/L4-LinguaggioC... · Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A.

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

Page 23: Linguaggio C - sezione dichiarativa: costanti e variabilihome.deib.polimi.it/plebani/download/infoICA/L4-LinguaggioC... · Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A.

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

Page 24: Linguaggio C - sezione dichiarativa: costanti e variabilihome.deib.polimi.it/plebani/download/infoICA/L4-LinguaggioC... · Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A.

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!*/