Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Corso A
Andrea Grosso
grosso@di.unito.it, 011-6706824
Sommario
Organizzazione del corso.
Corso di linguaggio C.
Motivazioni.
Organizzazione.
Introduzione al C.
Struttura di un programma.
Tipi fondamentali.
Dichiarazione di variabili.
Funzioni.
Array e stringhe.
Introduzione al C
Direttive del precompilatore.
Esempio.
#define MAX_IDX 100
...
for(i=0; i<MAX_IDX; i++) { ... }
Introduzione al C
La sintassi del C è molto simile alla sintassi Java.
Costrutti di controllo fondamentali (for, while,
do . . . while) e operatori comuni.
Dichiarazioni di variabili simili.
Blocco: sequenza di istruzioni delimitata da {. . . }.
Regione di visibilità/validità di una variabile (scope);
locale al blocco nella quale essa è dichiarata,
oppure
globale (dal punto di dichiarazione in poi) se non è
dichiarata in un blocco.
Le dichiarazioni di variabile possono apparire
all’inizio dei blocchi (non ovunque);
fuori da ogni blocco (scope globale).
Corso di Laboratorio di LinguaggiCorso A – p.6/28
Introduzione al C
Assegnazione.
hlvaluei=hexpri
Introduzione al C
Nota sui tipi booleani.
In C non esiste un tipo booleano.
Un’espressione qualunque, nel contesto opportuno,
viene considerata
VERA, se ha un valore diverso da 0,
FALSA, se ha valore 0.
Gli operatori di confronto ritornano valori 0/1 se hanno
risultato falso/vero.
if( a==b ) {...} /* Se a==b ... */
if( a=3 ) {...} /* Corretto! Sempre vero. */
if( 0 ) {...} /* Corretto! Mai eseguito. */
a= (2>3); /* Corretto! a=0. */
b= (3==3); /* Corretto! b=1. */
Corso di Laboratorio di LinguaggiCorso A – p.8/28
Introduzione al C
Costrutti di controllo: if . . . else . . .
Valuta hexpri;
Se hexpri è “vera”, esegui hBloccoi1 ,
altrimenti esegui hBloccoi2 .
hBloccoi1 , hBloccoi2 possono anche essere istruzioni
singole, senza {}. La parte
else hBloccoi2
è opzionale.
if( a%2==0 ) printf( "Pari\n" );
else printf( "Dispari\n" );
Corso di Laboratorio di LinguaggiCorso A – p.9/28
Introduzione al C
Costrutti di controllo: for.
while(hexpri) hBloccoi
1. Valuta hexpri;
2. SE hexpri è “vera”, esegui hBloccoi;
3. Torna a (1).
i=0;
while( i<5 ) {
printf( "Hello\n" );
i=i+1;
}
Introduzione al C
Costrutti di controllo: do . . . while.
do hBloccoi while(hexpri);
1. Esegui hBloccoi;
2. Valuta hexpri;
3. SE hexpri è “vera” torna a (1), altrimenti prosegui.
i=0;
do {
printf( "Hello\n" );
i=i+1;
} while( i<4 );
Introduzione al C
Lo standard definisce range minimi per i vari tipi.
Type Size Range
unsigned char 8 bits 0 to 255
char 8 bits -128 to 127
unsigned int 16 bits 0 to 65,535
short int 16 bits -32,768 to 32,767
int 16 bits -32,768 to 32,767
unsigned long 32 bits 0 to 4,294,967,295
long 32 bits -2,147,483,648 to 2,147,483,647
float 32 bits ±1.17549435 · 10−38 to 3.40282347 · 10+38
double 64 bits ±2.2250738585072014 · 10−308 to 1.7976931348623157 · 10+308
long double 80 bits ±3.4 · 10−4932 to 1.1 · 104932
Dichiarazioni di variabili
Dichiaratore
il più semplice è un identificatore di variabile;
può contenere operatori che specificano tipi particolari
— aggregati (array), puntatori, ecc. . .
può specificare anche un valore iniziale, preceduto da
‘=’.
int i, x=3; /* Crea gli interi i e x */
/* x ha valore iniziale 3 */
double x, y, z; /* x, y, z sono variabili
reali in doppia precisione */
int k=3; /* k e‘ intero,
e al momento della creazione varra‘ 3 */
char lettera=’A’, num=80;
Corso di Laboratorio di LinguaggiCorso A – p.16/28
Dichiarazioni di variabili
hstorage-classi, se specificato, può essere uno tra
extern specifica che la variabile è definita in un altro file.
static dipende dal contesto (vedi oltre).
auto è la classe di default; la variabile ha validità limitata al
blocco corrente – tipicamente si omette.
register indica al compilatore che alla variabile deve
essere garantito, se possibile, un accesso “veloce”.
typedef crea un nuovo nome di tipo.
Nota. La definizione del linguaggio non obbliga i compilatori ad allocare le variabili
register in modo particolare.
static T x;
Funzioni
Sono le unità nelle quali è suddiviso il codice eseguibile
all’interno di un file sorgente.
Sono caratterizzate da
un nome che le identifica e premette di richiamarle;
una lista di parametri passati esclusivamente per
copia;
tipo del risultato.
Non c’è polimorfismo.
double func(double x) { ... }
int func(unsigned char t) { ... }
/* Errore! */
Funzioni
In qualunque punto del corpo di una funzione,
l’istruzione
return hespressionei;
Funzioni
Se a e b sono due espressioni di tipo int,
power(a,b)
Funzioni
Programma principale.
Funzioni
Prototipo di una funzione.
Riproduzione dell’intestazione, seguita da ‘;’.
Sintatticamente analogo a una dichiarazione di
variabile;
scope: dalla dichiarazione a fine file;
i nomi dei parametri sono facoltativi;
dà visibilità alla funzione, anche prima della sua
definizione. Es.:
double power(int base, int expo);
void beeps(int n);
oppure
double power(int, int);
void beeps(int); Corso di Laboratorio di LinguaggiCorso A – p.28/28