Il linguaggio di programmazione C
| Il C è un linguaggio: semplice (~30 keywords) | |
| strutturato | |
| procedurale | |
| tipizzato | |
| Basso livello (vicino all’architettura del sistema) | |
| Grande flessibilità (adatto anche a grandi progetti) |
| Il C è “case sensitive”: MyFunction ¹ myfunction | ||
| La formattazione è libera MA | ||
| gli spazi possono essere inseriti SOLO tra un “token” e l’altro! | ||
| è necessario almeno uno spazio tra due tokens che non siano delimitatori ( parentesi, “ , ‘ , …. ) | ||
| Le parentesi graffe { … } racchiudono
un gruppo di istruzioni da trattare come una singola azione: es.: corpo di una funzione, corpo di un ciclo, ecc.. |
|
| Il punto e virgola chiude tutte le istruzioni |
I tipi numerici del linguaggio C
Dichiarazioni e “scopo” delle variabili
Esempio sull’uso delle variabili
Le istruzioni di controllo (1/3)
| Istruzioni di ciclo: |
| #include <stdio.h> | |
| int main() { | |
| int i; | |
| for(i=0;i<10;i++) | |
| { | |
| printf("Hello !\n"); | |
| printf(“Lab III !\n"); | |
| } | |
| return 0; | |
| } |
| #include <stdio.h> | |
| int main() { | |
| int i = 0; | |
| while(i <10) | |
| { | |
| printf("Hello !\n"); | |
| printf(“Lab III !\n"); | |
| i = i +1; | |
| } | |
| return 0; | |
| } |
| #include <stdio.h> | |
| int main() { | |
| int i = 0; | |
| do { | |
| printf("Hello !\n"); | |
| printf(“Lab III !\n"); | |
| i = i +1; | |
| } while(i <10) | |
| return 0; | |
| } |
Le istruzioni di controllo (2/3)
| Maggior controllo sui cicli: istruzioni di salto | ||
| istruzione break;: causa l’immediata uscita dal più interno dei cicli in cui si trova |
||
| istruzione continue;: causa l’esecuzione immediata dell’istruzione di chiusura del ciclo, cui segue l’iterazione successiva del ciclo |
||
| istruzione goto label;: salto incondizionato all’etichetta label:; consente l’uscita da molti cicli annidati |
||
| istruzione return espr_opz; esce dalla funzione corrente ritornando opzionalmente il valore di espr_opz |
||
Le istruzioni di controllo (3/3)
| Istruzioni di scelta: |
| Assegnamento: operatore = | ||
| lvalue = espr; | ||
| significato: valuta l’espressione espr assegna espr ad lvalue ritorna espr |
||
| è associativo da destra a sinistra | ||
| per assegnare il valore 10 alle variabili a e b, si può scrivere: a = b = 10; | ||
| Tra tipi numerici: | ||
| moltiplicazione e divisione: *, / | ||
| modulo: % (es.: 20 % 9 fa 2) | ||
| addizione sottrazione: +, - | ||
| Non esiste un operatore di elevamento a potenza | ||
| Booleiani | ||
| Equivalenza (e non) di espressioni logiche: ==, != | ||
| AND tra espressioni logiche: && | ||
| OR tra espressioni logiche: || | ||
| NOT di espressione logica: ! | ||
| Operatori di manipolazione dei bit: | |||
| AND bit a bit: & | |||
| OR ed XOR bit a bit: |, ^ | |||
| spostamento a sinistra e a destra: <<, >> | |||
| es.:
a: 1000000010101101 a << 2: 10 0000001010110100 |
|||
| NOT bit a bit (complemento a 1): ~ | |||
| Operatori relazionali: | |||
| minore e maggiore: <, > | |||
| minore o uguale, maggiore o uguale : <=, >= | |||
Esempio uso operatori bit a bit
| Espressioni di assegnamento in forma compatta: | ||
| a = (a + b); si può anche scrivere | ||
| a += b; | ||
| L’operatore += si comporta come un
operatore di assegnamento, e quindi ritorna il valore assegnato, es.: c += a += b + 1; significa a = a + (b + 1); c = (c + a); |
||
| Analogamente abbiamo: | ||
| -=, *=, /=, %=, &=, ^=,|=, <<=, >>= | ||
| Operatori di incremento e decremento: | ||
| notazione prefissa: | ||
| ++a; incrementa a e ritorna il nuovo valore | ||
| --a; decrementa a e ritorna il nuovo valore | ||
| notazione postfissa: | ||
| a++; ritorna a e, dopo, lo incrementa | ||
| a--; ritorna a e, dopo, lo decrementa | ||
| Possono essere applicati a tutti i tipi interi (e ai puntatori) | ||
| casting: | |||
| ( type ) espr; forza l’espressione espr ad essere interpretata come fosse di tipo type es.: |
|||
| double f; f = ( double ) 10; |
|||
| sizeof: | |||
| ritorna la dimensione in bytes di un tipo | |||
| unsigned int size; size = sizeof( float ); |
|||
| Dichiarazione |
Vettori: immagazzinamento in memoria
| I vettori sono memorizzati in locazioni di memoria consecutive | ||
| L’indice del primo elemento è 0 | ||
| Tutte le istruzioni del linguaggio C sono di basso livello. | ||
| Le operazioni complesse (compreso l’I/O !) sono effettuate dalle funzioni delle “librerie standard” (abbiamo visto ad es.: printf(…)) | ||
| Le librerie più comunemente usate sono: | ||
| Input e output: <stdio.h> | ||
| Manipolazione stringhe: <string.h> | ||
| Funzioni matematiche: <math.h> | ||
| Gestione della memoria ed altre utilità: <stdlib.h> | ||
| Testo sacro: | ||
| B.W. Kernighan, D.M. Ritchie: The C programming language |
||
| Altri libri: | ||
| I. Pohl: A Book on C | ||
| M. Waite, S. Prata: New C Primer Plus (2nd. Ed.) | ||
| Materiale su www: | ||
| T. Love: ANSI C for Programmers on UNIX Systems |
||
| (http://www.nd.edu/~cchen/teaching_C/node3.html) | ||