Trovate nel seguito gli esempi di codice illustrati a lezione insieme alle relative slide.
È anche disponibile l'archivio che li contiene tutti oppure la relativa pagina GitHub.

Ritorna alla pagina del corso.

Introduzione al C
0010-primo scheletro programma C
0020-primo
0030-primo equivalente assembly dello scheletro di programma
0040-primo scheletro programma, indentazione nulla
0050-primo altro esempio di indentazione in versione molto lazy (e da evitare come la precedente)
0060-obfusc esempio di codice offuscato
0070-preprocessed codice preprocessato
0080-commenti introduzione ai commenti
0090-vardef definizioni variabili
0100-vardef uso variabile non inizializzata
0110-vardef breve introduzione ai tipi delle variabili
0120-identificativi identificativi possibili per il C
0130-printf printf(): banale stampa di una stringa
0140-printf sequenza di escape -> a capo
0150-printf sequenza di escape "tabulazione"
0160-printf sequenza di escape "carriage return"
0170-printf specificatori di formato
0180-printf cosa puo' stampare printf()?
0190-uninit uso variabile non inizializzata (adesso usiamo printf)
0200-scanf scanf
0210-scanf valore restituito da scanf
0220-scanf scanf e letture multiple
0230-scanf scanf e testo in stringa di formato, valore restituito da scanf()
0240-math esempi funzioni matematiche
0250-rand esempi funzioni predefinite -> numeri casuali
0260-rand numeri casuali, intervallo valori, operatore %
0270-myfunc esempio definizione di propria funzione
Le espressioni
0310-aritmetiche principali operatori aritmetici
0320-incr operatori di incremento/decremento prefissi e postfissi
0330-and operatore logico AND, operatore relazionale < e espressione semanticamente non corretta
0340-and operatore logico AND, > e cortocircuito valutazioni espressioni logiche
0350-or OR logico e anticipo costrutto if-else
0360-precedence precedenza e associativita' operatori
0370-equal uso incorretto di == con numeri a virgola mobile
0380-ternario operatore ternario ? e %s
0390-bitwise esempi di operazioni bit a bit, stampa di un numero in formato binario
0400-bitwise esempi di operazioni bit a bit
0410-powerbitwise quick check for power of 2 using bitwise operators
0420-bitwiseconfig example of bitwise status flag
Controllo di Flusso
0510-if valutazione condizioni: if() semplice
0520-wrongif valutazione condizioni: if() errore comune!
0530-if valutazione condizioni: if() semplice
0540-ifelse if()-else e cortocircuito espressione
0550-nestedif if() nidificati
0560-danglingelse dangling else
0570-danglingelse dangling else
0580-danglingelse dangling else
0590-switchcase valutazione condizioni: confronto multiplo mediante if()-else a cascata
0600-switchcase valutazione condizioni: switch()-case
0610-switchcase valutazione condizioni: switch()-case con case multipli
0620-switchcase esempio switch()-case
0630-while Iterazioni, il ciclo while()
0640-while Iterazioni, il ciclo while() pericolo ciclo infinito
0650-dowhile do-while, controllo input utente
0660-dowhile Iterazioni, ciclo do-while() calcolo MCD
0670-dowhile Iterazioni, ciclo do-while() cifre binarie
0680-dowhile Iterazioni, ciclo do-while() cifre binarie, operatore sizeof()
0690-dowhile Iterazioni, ciclo do-while() esempio menu'
0700-for Iterazione, ciclo for
0710-for ciclo for(;;) uso dell'operatore ","
0720-for ciclo for(;;) operatore "," in aggiornamento
0730-for for(;;) omissione espressioni
0740-nestedfor nested for(;;)
0750-for ciclo for(;;) definizione variabili all'interno del for(;;) stesso, accenno a visibilità variabili
0760-continue continue, specificatore di formato %c
0770-break comando break per interrompere ciclo
I tipi di dato in C
0810-sizeof sizeof()
0820-float specificatori di formato per il tipo base float
0830-float suffissi per double e long double
0840-float numeri a virgola mobile e approssimazioni
0850-floatlimits intervallo numeri a virgola mobile, macro sizeof()
0860-floatinf numeri float e inf
0870-limits nuovi concetti limit.h e intervallo valori dei tipi interi
0880-integers specificatori di formato per numeri interi
0890-overflow overflow (traboccamento) di variabile intera
0900-char il tipo char, tabella ASCII, introduzione a ctype.h
0910-charformat il tipo char, specificatore di formato
0920-chario lettura del tipo char da tastiera
0930-chario buffer di tastiera
0940-chario lettura da tastiera di simboli, accortezze...
0950-chariocorr lettura da tastiera di simboli, versione corretta per evitare contenuto buffer tastiera
0960-char apici singoli, il tipo char e' comunque un tipo di dato numerico intero
0970-char2digit conversione cifre come simboli in cifre come valore
0980-bool il tipo di dato _Bool
0990-assign conversioni di assegnamento
1000-implicit conversioni implicite o automatiche
1010-explicit conversioni esplicite
1020-global variabili locali e globali
1030-const costanti, uso di const
1040-define costanti, uso di #define
Gli Array
1110-singlevarlimits limiti delle variabili "singole"
1120-array array monodimensionali
1130-array inizializzazione array, differenti casi
1140-sizeofarray array e sizeof
1150-bufferoverrun esempio buffer overrun
1160-matrix array bidimensionale
Funzioni predefinite
1210-nopredefined esempio di NON utilizzo delle funzioni predefinite
1220-predefined esempio funzioni predefinite: ctype.h
1230-abs predefined function abs()
1240-fabs predefined function fabs()
1250-secondorder 2nd order polynomial equation, math predefined functions pow(), sqrt()
Allocazione Dinamica della Memoria
1310-vla Variable Length Array
1320-ampersend operatore &
1330-punt puntatore a variabile scalare, definizione e uso
1340-arrayaddr equivalenza array e puntatori
1350-mallocfree allocazione dinamica memoria con malloc() e free(), controllo errore allocazione
1360-calloc calloc() vs malloc()
1370-vlaerror Variable Length Array: problema durata automatica
1380-malloc rivisitazione problema durata automatica VLA con malloc()
1390-free uso reale di free() per evitare memory leak, simulazione del lancio di dadi, esempio complesso
1400-realloc funzione realloc()
1410-heapstack heap, stack, code & data...
1420-puntaritm aritmetica dei puntatori
1430-puntaritm uso operatori [] ed equivalenza aritmetica dei puntatori
1440-puntaritm scorrimento array usando puntatore e aritmetica puntatori
1450-overrun buffer overrun nei puntatori
1460-memoryleak esempio memory leak
1470-lingering esempio lingering pointer
1480-lingeringcorretto esempio lingering pointer corretto
1490-lingering esempio lingering pointer
Le Stringhe
1510-consstring stringa definizione
1520-string confronto tra 2 array di char, uno contenente una stringa e uno che non contiene una stringa
1530-iostring I/O stringa
1540-strlen nuovi elementi string.h -> strlen()
1550-strcmp nuovi elementi string.h -> strcmp()
1560-strpunt stringa come puntatore a char
1570-strcpy copia e concatenazione di stringhe
1580-strchr ricerca caratteri e sottostringhe
1590-strchr ricerca caratteri esaustiva
1600-strtok uso di strtok()
Le Funzioni
1710-func nuovi concetti: definizione di funzione
1720-funcproto prototipi di funzione
1730-valore passaggio argomenti per valore
1740-indirizzo passaggio argomenti per indirizzo
1750-passaggistringhe passaggio array ad una funzione
1760-passaggistringhe passaggio array ad una funzione equivalenza uso puntatore
1770-passaggioarray passaggio array monodimensionale a funzione, gestire le dimensioni
1780-passaggioarray2 passaggio array monodimensionale a funzione, intercambiabilita' delle modalita' di passaggio
1790-complex funzione che restituisce piu' di 1 singolo valore sfruttando il passaggio argomenti per indirizzo
1800-ricorsione la ricorsione: esempio fattoriale
1810-mcd la ricorsione, esempio MCD
1820-hanoi la ricorsione, esempio Torre Hanoi
1830-recursionwrong errore, la condizione d'uscita non e' detto si verifichi
1840-fibo1 ricorsione inefficiente (numeri di Fibonacci)
1850-fibo2 ricorsione + dynamic programming, prefisso static
1860-mystery ricorsione, cosa fa questo programma?
Puntatori a Puntatori
1910-matrixmanag allocazione dinamica array bidimensionali usando un array monodimensionale
1920-matrixalloc allocazione dinamica array bidimensionali usando puntatori a puntatori
1930-strarraymon array di stringhe mediante array bidimensionale
1940-strarrayarrpunt array di stringhe mediante array di puntatori
1950-strarray array di stringhe mediante array di puntatori ottenuto con puntatori a puntatori
1960-cli esempio di uso di array di stringhe, gli argomenti sulla linea di comando
1970-bidim passaggio array bidimensionali a funzione
Input, Output e gestione file
2010-fopen uso di fopen() per file in lettura e perror()
2020-fopenw uso di fopen() in scrittura
2030-fopena uso di fopen() in "append"
2040-fgetputc fgetc() e fputc()
2050-fgetputs fgets() e fputs()
2060-formattedoutput scrittura formattata
2070-formattedinput uso fscanf() per leggere parola per parola e valore di ritorno per determinare se sono a fine file
2080-formattedinput uso fscanf() per interpretare conenuto riga
2090-ungetc ungetc() usage
2100-csv lettura file di tipo CSV
2110-filebinario lettura di parte di un file binario in array
2120-binfilevars scrittura in file binario di singole variabili
2130-binfilevarsw lettura fino a fine file da file binario
2140-feofwrong uso sbagliato di feof() in lettura file parola a parola
2150-feof uso corretto di feof()
2160-fileend uso di valore restituito da fscanf() per individuare che si e' arrivati a fine file
2170-fseek fseek() ftell() e rewind()
2180-stdout stdout e stderr come stream di output
2190-getchar getchar()
2200-buffer come risolvere problema buffer di tastiera
2210-fgets uso di fgets() per evitare buffer overrun
struct
2310-struct struct
2320-typedef typedef struct
2330-csv lettura file di tipo CSV in array di struct
2340-csvgen generazione file CSV e binario a partire da struct
2350-structinit inizializzazione struct
2360-bitfield1 bitfield: syntax & memory size
2370-bitfields structs and bitfield, the GIF image format example
Puntatori a funzione
2410-funcaddr indirizzo di una funzione in memoria
2420-funcpointer puntatore ad una funzione: definizione, inizializzazione e uso
2430-mathnofuncp example of selection of a function without func pointers: a switch-case or multiple if() are required
2440-mathfuncp example of selection of a function using an array of func pointers
2450-qsort qsort()
2460-bsearch bsearch()
Debugging
2510-bugged bugged code
2520-buggedprintf bugged code with added printf()
2530-ifdedprintf bugged code with added fprintf() and conditional compilation with #ifdef
2540-assert assert() macro
2550-noassert assert() macro
Se avete commenti o osservaƶioni su questa pagina
mandate un messaggio di posta elettronica a bertoƶƶi@ce.unipr.it