Università dell’Insubria
Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese
Corso di Laurea in Informatica
Anno Accademico 2007/08
Laboratorio di Linguaggi
lezione I:
"Hello, world!"
Marco Tarini
Laboratorio di Linguaggi
• docente: Marco Tarini
e-mail: [email protected]
• ricevimento: Mercoledì 13:00 - 18:30
o anche su appuntamento
• libro di testo consigliato:
Kelley Al, Pohl Ira:
"C Didattica e Programmazione" ("A Book on C")
quarta edizione - anche la terza va bene
Marco Tarini - Laboratorio di Linguaggi -
2007/08 - Università dell’Insubria
Laboratorio di Linguaggi
• Pagina del corso:
http://vcg.isti.cnr.it/~tarini/?57
– (oppure: google for "Marco Tarini" => "Teaching" => "Linguaggi-07")
Marco Tarini - Laboratorio di Linguaggi -
2007/08 - Università dell’Insubria
Laboratorio di Linguaggi
• piccola guida pratica di C
– guida essensiale di alcuni
emementi di C
v = argomanto
già trattato
Marco Tarini - Laboratorio di Linguaggi -
2007/08 - Università dell’Insubria
Linguaggio C: cenni storici
• 1972: nasce il C,
– by Brian Kernighan & Dennis M.Richie, AT&T Bell Labs
– scopo: poter riscrivere in un linguaggio a più alto livello il
codice del sistema operativo UNIX
– evoluzione del B
• Anni 80: si sviluppa il C tradizionale
• 1983: comincia la definizione dello standard ANSI C,
– (ANSI = American National Standards Institute)
• 1990: nascita ufficiale dello "ANSI C"
– (o "ANSI ISO/C")
Marco Tarini - Laboratorio di Linguaggi -
2007/08 - Università dell’Insubria
Perchè un corso di C ?
Di certo, é un linguaggio di 20-30 anni fa!
• Obsoleto? Roba vecchia?
Ma:
• Ancora un industry standard
– diffusissimo
– prob. il linguaggio meglio provvisto di librerie al mondo
• Indispensabile in alcuni contesti
– es programmazione di sistemi operativi
• Molto propedeutico
– basso livello (es. gestione diretta della memoria)
– “toccare con mano” (es. ottimizzazioni)
• Bonus: C++ (quasi gratis, sapendo Java e C)
Marco Tarini - Laboratorio di Linguaggi -
2007/08 - Università dell’Insubria
Un monito prima di iniziare
C (n.): A language that combines all the
elegance and power of assembly
language with all the readability and
maintainability of assembly language.
The Hacker's Dictionary
Marco Tarini - Laboratorio di Linguaggi -
2007/08 - Università dell’Insubria
Caratteristiche del Linguaggio C
• Linguaggio imperativo
– con numerosi tipi di dato e strutture di controllo
• "Medio" livello
–
–
–
–
cioè più basso di Java!
gestione memoria diretta
gestione files diretta
puntatori… importante!
• Focalizzato su efficienza e compattezza di codice
• Linguaggio scarno, ma estendibile
– esistono molte librerie per operazioni non definite dal linguaggio…
• Possibile sviluppare progetti modulari
– composti da più files sorgente (source files) compilabili separatamente
– molto utile per progetti complessi
Marco Tarini - Laboratorio di Linguaggi -
2007/08 - Università dell’Insubria
Caratteristiche del Linguaggio C
• Il C è un linguaggio tipizzato
– cioè: il tipo di ogni espressione è del tutto noto
al momento della compilazione
x = y + z ;
int
int
int
Marco Tarini - Laboratorio di Linguaggi -
2007/08 - Università dell’Insubria
C e Java a confronto...
• i costrutti sono simili
ma
i++
...
if (x<0) x=-x;
...
è più elegante
dell’ l’equivalente
i=i+1
int x=1, i;
for (i=1; i<=10; i=i+1) {
x = x * i;
}
int log2=0, x=100;
while (x>1) {
x = x / 2;
log2++;
}
Marco Tarini - Laboratorio di Linguaggi -
2007/08 - Università dell’Insubria
C e Java a confronto...
• ma scordatevi...
– la programmazione ad oggetti (le classi)
• in C niente metodi* !
– (* member functions che si applicano all’oggetto che le chiama)!
• solo funzioni globali
• ...se volete pensatele come metodi statici
– macchine astratte (“java runtime environment”)
• il C è molto, molto concreto
• gestione diretta della macchina
• puramente compilato, non compilato-poi-interpretato
– gestione delle eccezioni...
Marco Tarini - Laboratorio di Linguaggi -
2007/08 - Università dell’Insubria
Un programma in C
• Un programma è un’insieme di
– funzioni, e
– variabili.
• La funzione main
– funzione speciale, è l’inizio del programma
– deve esistere
Marco Tarini - Laboratorio di Linguaggi -
2007/08 - Università dell’Insubria
Le variabili
• Dichiarazioni (semplici)
tipo (delle variabili x, y, z, w):
int (intero)
opzionalmente,
le variabili possono essere
inizializzate
qui, il valore iniziale di z è 5
int x , y , z = 5, w;
float ratio, ratio_bis ;
tipo (delle variabili ratio e ratio_bis):
float (intero)
Marco Tarini - Laboratorio di Linguaggi -
2007/08 - Università dell’Insubria
Caratteristiche del Linguaggio C
• Il C usa lo scoping statico (come Java)
viene definita la variabile
globale intera "a",
(che vale 5)
viene definita la
procedura "proc" che…
…scrive il
valore di a
viene definita un altra
variabile locale intera "a",
(che vale 10)
viene invocata la
procedura "proc"
int a=5;
void proc()
{
printf("%d",a);
}
void main()
{
int a=10;
proc();
}
Marco Tarini - Laboratorio di Linguaggi -
scoping statico:
il programma
scrive "5"
se lo scoping
fosse dinamico,
il programma
scriverebbe "10" !
2007/08 - Università dell’Insubria
Le funzioni
int potenza (int b, int e)
{
int res=1 , i;
for (i=1; i<=e; i++) {
res = res * b;
}
return res;
}
Marco Tarini - Laboratorio di Linguaggi -
2007/08 - Università dell’Insubria
Le funzioni
tipo del risultato: intero
(output della funzione)
corpo della
funzione
“cosa fa”
un blocco
delimitato
da {}
nome
(identificatore)
della funzione:
“potenza”
lista dei parametri formali,
ciascuno preceduto dal tipo
(input della funzione)
int potenza (int b, int e)
{
int res=1 , i;
for (i=1; i<=e; i++) {
res = res * b;
}
return res;
}
variabili locali
• qui, due
• visibili solo
nel corpo
della
funzione.
• dichiarate
all’inizio!
comando “return”:
restituzione del
risultato, e uscita dalla
funzione
ci deve essere!
Marco Tarini - Laboratorio di Linguaggi -
2007/08 - Università dell’Insubria
Le procedure
• Sono funzioni...
...solo, non restituiscono nessun valore
tipo del risultato:
“void” (nessuno)
void saluta_n_volte (int n)
{
int i;
for (i=1; i<=n; i++) {
printf("ciao ");
}
}
nota:
niete comando “return” nel corpo.
(ma si può usare “return”, senza
valore, per uscire dalla funzione)
Marco Tarini - Laboratorio di Linguaggi -
2007/08 - Università dell’Insubria
Chiamare (“invocare”) le funzioni
int potenza (int b, int e)
{
int res=1 , i;
for (i=1; i<=e; i++) {
res = res * b;
};
return res;
}
int main(){
int base=10, milione;
milione = potenza( base, 6);
...
}
Marco Tarini - Laboratorio di Linguaggi -
2007/08 - Università dell’Insubria
Errori comuni di C...
• le variabili locali si possono definire
solo all’inizio di un blocco!
{
{
int x=1;
for (int i=1; i<=10; i=i+1) {
x = x * i;
}
int
z =
int
w =
NO
}
}
{
{
int x=1, i;
for (i=1; i<=10; i=i+1) {
x = x * i;
}
x=2, z, k=5;
x+k;
h=4, w;
w+h;
int x=2, z,w, k=5, h=4;
z = x+k;
w = w+h;
SI
}
}
Marco Tarini - Laboratorio di Linguaggi -
2007/08 - Università dell’Insubria
Errori comuni di C...
• Vietato annidare funzioni!
– le funzioni in C sono tutte allo stesso livello
int funzione_uno (int b, int e)
{
int x, y;
int funzione_due( int a) {
...
}
funzione annidata
(nested function)
male, male...
(non compilerà)
...
}
–(ma, è vero, si può fare ad esempio in Pascal)
Marco Tarini - Laboratorio di Linguaggi -
2007/08 - Università dell’Insubria
Passaggio di parametri
• Sempre per copia
– mai per riferimento !
– esempio...
void raddoppia (int x)
{
x = x*2;
}
int main(){
int incassi = 5;
raddoppia( incassi );
...
}
– ...di errore
– nota: compila perfettamente!
Marco Tarini - Laboratorio di Linguaggi -
2007/08 - Università dell’Insubria
Scarica

ppt