1 / 167

C/C++

C/C++. Claudio Rocchini IGM. -1 Pre Introduzione. Il C/C++. Il C++ e’ un linguaggio di programmazione.

milica
Télécharger la présentation

C/C++

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C/C++ Claudio Rocchini IGM C. Rocchini - C++

  2. -1 Pre Introduzione C. Rocchini - C++

  3. Il C/C++ • Il C++ e’ un linguaggio di programmazione. • E’ il lunguaggio utilizzato per creare i programmi (insieme all’Assembler), (es. Windows, Linux, Office, OpenOffice, Apache, Perl, PHP, Oracle, PostgreSql, AdobePhotoshop, etc. sono scritti un C/C++) • L’efficienza e’ uno degli obiettivi principali (supporto run-time minimo, contrapposto a Java, Basic, PHP, Perl : support RE massimo + garbage-collector). • Ma e’ anche un linguaggio molto espressivo. • Nasce in ambiente industriale (non accademico o umanistico). C. Rocchini - C++

  4. 0 - Introduzione C. Rocchini - C++

  5. Il Mio primo programma #include <stdio.h> //libreria stdio int main() //funzione principale { //Inizio blocco printf(“Buongiorno”); //Stampa buongiorno return 0; //Riturna il valore 0 } //Fine blocco // La spaziatura non conta // Tutto i comandi finiscono con ; // I bocchi sono delimitati da {} C. Rocchini - C++

  6. Struttura TipoRisultato NomeFunzione( Parametri) { istruzione; istruzione; … return valore_ritorno; } Altra_Funzione … // Commento di una linea /* Commento di piu’ linee */ C. Rocchini - C++

  7. Nota sullo stile • La spaziatura, la tabulazione e i ritorni a capo non hanno alcun significato (al contrario del Basic o del Fortran). • Questo non vuol dire che bisogna scrivere disordinatamente. • Di solito si indenta (tabularizza) i blocchi fra parentesi per facilitare la lettura. • I nomi devono essere significativi. C. Rocchini - C++

  8. Nota sullo stile 2 • Esiste un campionato mondiale di C scritto disordinato: “The International Obfuscated C Code Contest”, http://www.ioccc.org/ • Uno dei vincitori: main() { printf(&WIN32["\021%six\012\0"],(WIN32)["have"]+"fun"-0x60);} C. Rocchini - C++

  9. Nota sullo stile 3 #define _ F-->00||F-OO--; int F=00,OO=00;main(){F_OO();printf("%1.3f\n",4.*-F/OO/OO);}F_OO() { _-_-_-_ _-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_ _-_-_-_ } C. Rocchini - C++

  10. Esercitazione • Es0: applicazione console • Consultate i lucidi relativi alla esercitazione 0: applicazione console C. Rocchini - C++

  11. 4 – Tipi Fondamentali C. Rocchini - C++

  12. Tipi fondamentali float x; // x e’ una variabile in virgola mobile // in Basic: dim x as single int y = 7; // y e’ una var. intera con valore iniz. 7 float fun(int x); // fun e’ una funzione da float a int // in Basic: function fun( x as integer ) as single char c; // c e’ un carattere double z; // z e’ una variabile in doppia precisione // void = tipo “nullo” esempio: void sub(); // sub e’ una procedura (subroutine) C. Rocchini - C++

  13. Costruire Altri Tipi int * punt; // Puntatore ad intero char vet[7]; // Vettore di caratteri double & d; // “Riferimento” ad un double // Enumerazioni enum giorni { lunedi, martedi, mercoledi, … }; // Strutture: struct Coordinata { double latitudine; double longitudine; }; // In basic: structure // Classi… (come vedremo piu’ avanti) C. Rocchini - C++

  14. Bool (Valore di verità) bool x = true; // Variabile inizializzata bool y = false; int a = 1; int b = 1; bool k = a==b; // a e’ uguale a b? bool q = (a!=0) && (b>7); // Diverso, maggiore C. Rocchini - C++

  15. Char (carattere) char c = ‘a’; // Carattere letterale char k = 32; // Conversione da codice ascii int c = int(‘$’); // Conversione in codice ascii if( isupper(c) ) .. // Esempio di funzioni bool k = isdigit(k); // k e’ una cifra (0-9) // Nota: da non confondersi con string! C. Rocchini - C++

  16. Tipi interi int a = 3; // Intero standard(4-8 byte) shortint s; // Intero a 2-4 byte short s; // Scrittura abbreviata long int l; // Intero 4-8 byte long l; // Scrittura abbreviata unsignedint u; // Intero senza segno unsigned u; // Scrittura abbreviata unsignedlong lu; // Intero lungo positivo intx = 3*5+7-4/2; // Espressioni intk = 15%7; // =1, operatore modulo = resto divisione int k = 0xFE; // Costanti esadecimali C. Rocchini - C++

  17. Virgola mobile float x = 1; // Singola precisione double y = 3.14; // Doppia precisione double z = 1.2e10; // Notazione esponensiale // Espressioni e funzioni double t = 3*7-sqrt(k)+sin(9); double z = 3^y; // Esponenziale int round = int(z+0.5); // Arrotondamento ad intero int trunc = int(z); // Troncamento ad intero C. Rocchini - C++

  18. void void x; // Variabile nulla: VIETATO void sub(); // Procedura (non ritorna niente) void * p; // Puntatore a qualcosa: utile per // dichierare puntatori generici di // tipo sconosciuto. C. Rocchini - C++

  19. Tipi Enumerati enum e1 { LUN, MAR, MER, GI }; // Non specificata enum e2 { A=2, B, C, D }; // Inizio specificato enum e3 { K=1, H=99 }; // Tutti specificati enum e1 pippo; // Variabile di tipo enum int x = MAR; // Utilizzo del valore cost. switch(pippo) // Utilizzo tipico: case { case LUN: … LUN = 99; // Errore! C. Rocchini - C++

  20. int a = 5; // Una variabile intera int *p = &a; // p è un puntatore a intero, // viene assegnato all’indirizzo // di a. a = 6; *p = 7; // a ora vale 7 int * q = 0; // 0, valore speciale // Puntatore nullo Introduzione ai puntatori Cella di Memoria di a Valore = 5 Valore = 5 … … “Indirizzo” in memoria della cella: Il puntatore alla cella. C. Rocchini - C++

  21. Costanti constdouble PI = 3.141596; // Valore costante PI = 4; // Errore! constchar * p; // Il contenuto e’ costante *p = ‘w’; // Errore p = 0; // OK char * const p; // Il puntatore e’ costante *p = ‘w’; // OK p = 0; // Errore C. Rocchini - C++

  22. Vettori Statici char v[10]; // Vettore di 10 elemeni (da 0 a 9) intx; v[7] = 11; // Accesso ad un elemento v[999] = 1; // Errore catastrofico! // Forse distruggi x double mat[3][3]; // Vettore bidimensionale mat[0][2] = 9; // Accesso ad un elemento char *p = &(v[0]); // Indirizzo del primo elem. char *p = v; // Scrittura abbreviata int a = fun(); char w[a]; // Errore, dinamico constint b = 10; char x[b]; // Ok, statico C. Rocchini - C++

  23. Dichiarazioni Multiple int a,b,c; // Tre interi char k, *p; // Un carattere ed un puntatore bool y,v[11]; // Un booleano ed un vettore C. Rocchini - C++

  24. Regole di Visibilità int x = 1; // Globale al modulo void sub() { x = 7; // Modifico la globale int x = 2; // Locale alla procedura … { int x = 3; // Locale al sottoblocco // Qui x vale 3 int y = 99; } // Qui y non e’ dichiarata! } C. Rocchini - C++

  25. typedef unsignedlong * p; // Puntatore ad intero lungo s.s. typedefunsignedlong * Pointer; // Definizione di tipo Pointer p; // Stesso tipo di p typedef double Matrix[9][9]; // Tipo matrice 9x9 Matrix m; // Dichiarazione m[2][1] = 3; C. Rocchini - C++

  26. Strutture struct Registrazione // Dichierazione di tipo { bool ok; int valore; double x; }; // Notare il punto e virgola Registrazione r; // Dichiarazione variabile r.valore = 3; // Utilizzo r.x = 4.5; C. Rocchini - C++

  27. Strutture 2 struct Dipendente { string nome; string cognome; int eta; }; … Dipendete d1,d2; d1.nome = “claudio”; d1.eta = 37; d2.nome = “claudia”; C. Rocchini - C++

  28. Puntatore a Strutture struct Registrazione // Dichierazione di tipo { bool ok; int valore; double x; }; // Notare il punto e virgola Registrazione a; // Una struttura Registrazione * p = &a; // Puntatore a struttura a.valore = 5; (*p).valore = 3; // Accesso ai campi p->valore = 7; // Altra scrittura Registrazione k = {false,3,0.9}; // Inizializzazione C. Rocchini - C++

  29. Operatore “sizeof” // restituisce la dimensione in byte di una variabile sizeof(char) // = 1 sizeof(short) // = 2 sizeof(int) // = 2 o 4 sizeof(long) // = 4 o 8 sizeof(double) // = 8 sizeof(char *) // = 4 (ma 8 proc. 64 bit) sizeof(double *) // = sempre 4! sizeof(void *) // = sempre 4! sizeof(short[32]) // = 64 C. Rocchini - C++

  30. Sizeof(2) struct registrazione { short x; bool b; double y; }; sizeof(registrazione) // >= sizeof(short)+sizeof(bool)+sizeof(double) // Attenzione! Puo’ essere anche maggiore per // motivi di allineamento del processore C. Rocchini - C++

  31. La notte del C: le stringhe C // Prima nota: ogni volta che e’ possibile si usi il // tipo C++ std::string (e’ un oggetto) // Stringhe letterali: incluse in virgolette “questa e’ una stringa” // I caratteri invece sono inclusi in apici ‘a’ // I vettori di caratteri possono essere interpretati // come stringhe, le stringhe sono terminate dal // carattere 0 char nome[100]; C. Rocchini - C++

  32. Stringhe C (2) char s[16] = “casa”; // Inizializzazione s[0]==‘c’ s[3]==‘a’ s[4]== 0 // Terminazione della stringa s[5]== ??? Valore non Definito ??? char n1[4] = “casa”; // Errore: manca spazio char n2[5] = “casa”; // OK: corretto sizeof(“casa”)==5 // 4 lettere + terminatore // Stringha nulla: “” char nulla[1000] = “”; nulla[0] == 0 // Subito il terminatore C. Rocchini - C++

  33. String C (3) // I puntatori a carattere possono essere associati // a stringhe (puntatori al primo carattere). char * p = “cavallo”; // Stringa costante ! charx = p[2]; // OK: lettura di ‘v’ p[3] = ‘i’; // Errore: stringa costante char str[32] = “cavallo”; // Stringa variabile p = str; // p punta all’inizio di str p[3] = ‘i’; // OK: str = “cavillo” C. Rocchini - C++

  34. Stringhe C: funzioni // Funzioni della libreria string.h int strlen( char * str); // Lunghezza di una stringa str1 = str2; // Errore! strcpy( str1, str2 ) // Copia di stringhe strcat( str1, str2 ) // Concatenzazione str1 == str2 // Errore! Conf. Puntatori! strcmp( str1, str2 ) // Confronto fra stringhe strchr( str1, char ) // Cerca un carattere strstr( str1, str2 ) // Cerca una sottostringa // Altre funzioni: tokenizzatore (parser) strtok( str1, “separatori”) C. Rocchini - C++

  35. Stringhe, per finire: escape seq. “\”” // Virgolette nelle stringhe ‘\’’ // Il carattere apicetto “\n” // Ritorno a capo “\r” // Ritorno carrello “\t” // Carattere di tabulazione “\\” // Caratte barra rovesciata C. Rocchini - C++

  36. 6 – Espressioni ed Istruzioni C. Rocchini - C++

  37. Riepilogo operatori A = 3; // Assegnamento a variabile // Aritmetica di base A = b+c; // Somma A = b-c; // Sottrazione A = b*c; // Prodotto A = b/c; // Divisione A = b%c; // Resto della divisione intera A = -b; // Cambio di segno A = ((b+c)*d)-h; // Parentesi (solo tonde!) C. Rocchini - C++

  38. Riepilogo operatori // Confronti e operatori logici if( A==B ).. // Uguale A != B // Diverso A < B // Minore A > B // Maggiore A <= B // Minore o uguale A >= B // Maggiore o uguale && // And (e) logico || // Or (o) logico ! // Not (non) logico // es. if( a<min || a>max) … C. Rocchini - C++

  39. Riepilogo operatori // Incrementi e decrementi int a = 2, b=7; ++a; // Incremento: a vale 3 --b; // Decremento: b vale 6 int x = 10; int y = x++; // Postincremento, x=11 ma y=10 intz = ++x; // Preincremento, z=12 e x = 12 int h = 42; int k = h--; // Postdecremento, h=41 ma k=42 // Utilizzabile sugli interi, non su virgola mobile C. Rocchini - C++

  40. Operatori sui bit A = b & c; // And bit a bit A = b | c; // Or bit a bit A = b ^ c; // Xor = or esclusivo, 1 se b!=c A = ~b; // Not logico A = b<<3; // Shift a sinistra (di 3) A = b>>4; // Shift a destra // Esempi (b>>2)&1 // Estrazione del terzo bit b|(1<<4) // Forza a uno il quarto bit b&~(1<<4) // Forza a zero il quarto bit (b>>8)&0xFF // Parte alta di una word <<2 C. Rocchini - C++

  41. Modificatori e Exp Condizionale // Modificatori A += b; // Scrittura riassuntiva di A = A + b; A -= b; A *= b; … A <<= 3; // Equivale a A = A << 3; // Espressione condizionale // condizione ? valore_se_vero : valore_se_falso A = b==0 ? 1 : 100/b; // se b vale 0 a prende 1 altrimenti prende 100/b // Corrisponde al se(;;) di Excel C. Rocchini - C++

  42. Ordine di valutazione A = 3+2*3; // 9, non 15! (Anche in Basic) Record * p; *p.valore // Contenuto di valore (*p).valore // Contenuto di p if( a&b==0 ) // == associa prima di &: errato! if( (a&b)==0 ) // Corretto // Nel dubbio usare le parentesi! // Controllare la precedenza sul manuale C. Rocchini - C++

  43. Memoria dinamica: new, delete int *p = 0; // Puntatore nullo *p = 7; // Errato: non esiste la locazione p = newint; // Allocazione di un intero *p = 7; // Corretto delete p; // Obbligatorio dopo l’utilizzo! *p = 7; // Di nuovo errato double * v = 0; v = newdouble[1024]; // Allocazione di un vettore v[907] = 3.14; // OK: memoria allocata … delete[] v; // Disallocazione: notare le [] C. Rocchini - C++

  44. Cast: Conversioni di tipo int a = 3; double x = a; // Automatica a = int(x); // Cast (troncamento) int * q; char * p = (char *)q; // Conversione di puntatore void * k; // Puntatore “generico” bool * b = (bool *)k; char c = char(3.14); // Da double a char C. Rocchini - C++

  45. Istruzione condizionale if (a>b) // Parentesi () obbligatorie!! c = a; // Spaziatura non significativa! if (a!=b) // Blocco di istruzioni { c = a; b = a; } if (a>b) c = a; // Utilizzo di else else c = b; C. Rocchini - C++

  46. Case switch(a) // A seconda del valore di a { case 1: // case + valore // se a=1 break; // Fine case case 2: // Doppio valore case 3: // se a=2 oppure 3 break; default: // Caso di default(case else) // Altrimenti… } C. Rocchini - C++

  47. Cicli while while( a>b ) // Ciclo while { // Controllo all’inizio --a; } do// Ciclo do-while { // Controllo alla fine --a; } while( a>b ); C. Rocchini - C++

  48. Ciclo For // for(inizializzazione;condizione;iterazione) {} for(a=1;a<=10;++a) // Ciclo classico { // … } for(a=1; a<=100 ;a+=10) // step di 10 for(a=1024; a>1; a/=2) // Ciclo logaritmico //Struttura scansione di un file: //for(apri_file;not eof;leggi_carattere) // TODO FARE ESEMPIO C. Rocchini - C++

  49. Esempio for su file FILE * fp; char c; for(fp=fopen(file);!EOF(fp);c=fgetc(fp)) { usa il carattare c } C. Rocchini - C++

  50. goto //Il comando goto si articola in due parti: //Dichiarazione di una etichetta // Comando goto per saltarci. //Si usa raramente: in caso di errore per saltare //Fuori da una procedure (bisognerebbe usare le // Eccezioni //… goto etichetta; //.. etichetta: //… C. Rocchini - C++

More Related