Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoCarlotta Casali Modificato 8 anni fa
1
1 ELEMENTI DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettrica ed Elettronica Linguaggio C A.A. 2011/2011 http://agile.diee.unica.it Ing. Giuseppe Destefanis Diee, secondo piano Tel. 070-6755774 mail: giuseppe.destefanis@diee.unica.itgiuseppe.destefanis@diee.unica.it Web: http://giuseppedestefanis.wordpress.com
2
2 Un linguaggio è caratterizzato da: SINTASSI - insieme di regole formali per la scrittura di programmi, che fissano le modalità per costruire frasi corrette nel linguaggio. SEMANTICA - insieme dei significati da attribuire alle frasi (sintatticamente corrette) costruite nel linguaggio Scrivere un programma sintatticamente corretto non implica che il programma faccia quello per cui è stato scritto.
3
3 Sviluppo di un programma (compilazione) - editing: scrivere il testo e memorizzarlo su supporti di memoria permanenti; - compilazione: traduzione del codice sorgente in codice oggetto; - linking: integrazione dei vari moduli di un programma per creare un'unità eseguibile; - esecuzione: la cpu esegue il programma;
4
4 Compilatore: traduce il programma sorgente in programma oggetto; ANALISI programma sorgente analisi lessicale analisi sintattica TRADUZIONE generazione del codice ottimizzazione del codice Esempi: C, C++, Pascal
5
5
6
6 Sviluppo di un programma (approccio interpretato) - editing: scrivere il testo e memorizzarlo su supporti di memoria permanenti; - interpretazione: ogni istruzione viene convertita in linguaggio macchina e eseguita; ANALISI programma sorgente analisi lessicale analisi sintattica ESECUZIONE ESEMPIO: Basic
7
7 Il primo programma C #include int main() { printf(“Sono il primo programma\n”); return(0); }
8
8 Variabili Memoria: insieme di celle. Cella: in genere ha una grandezza di un byte (8 bit) Variabile: gruppo di celle consecutive che vengono considerate dal programmatore come un’unica cella informativa. Attributi di una variabile: - Indirizzo della prima cella - Valore (contenuto di tutte le celle) variabile valor e cella indirizzo valor e
9
9 Variabili (2) Variabili: – l’indirizzo non cambia; – il valore può subire modifiche Programmatore: – si riferisce a una variabile mediante un nome (identificatore); Variabile: – ha un tipo Tipo di una variabile: – insieme di valori (detti elementi o costanti del tipo);
10
10 Dichiarazioni e definizioni Costrutti che introducono nuove entità: – dichiarazioni; – definizioni. Dichiarazioni: – entità a cui il compilatore non associa locazioni di memoria o azioni eseguibile;
11
11 Definizioni: – entità a cui il compilatore associa locazioni di memoria o azioni eseguibili; – esempio: definizioni di variabili o di costanti Nomenclatura consentita in C: – spesso non è semplice né conveniente trattare separatamente dichiarazioni e definizioni; – con dichiarazione si può intendere sia una dichiarazione vera e propria, sia una definizione (le dichiarazioni comprendono le definizioni).
12
12 Esempio #include int main() { int a,b; /*dichiarazione di variabile*/ int c=3; /*dichiarazione e definizione*/ printf(“Sono il secondo programma\n”); return(0); }
13
13 Costanti Se il valore associato ad un identificativo non è modificabile parliamo di costanti.
14
14 I tipi base Il C supporta due tipologie fondamentali di numeri: numeri interi e i numeri a virgola mobile; I valori di un tipo intero sono numeri interi, mentre i valori dei tipi a virgola mobile possono avere anche una parte frazionaria.
15
15 Tipi interi
16
16 Tipi interi (2) #include int main() { int a,b; /*dichiarazione di variabile*/ int c=3; /*definizione e dichiarazione*/ return(0); }
17
17 Tipi floating point
18
18 Tipi floating point (2) #include int main() { double a,b; a=3.14; float c; c=5.15; return(0); }
19
19 Tipi char Il tipo char è il tipo di dato utilizzato per i caratteri. I valori del tipo char possono variare da macchina a macchina poichè esistono diversi tipi di set di caratteri (il più diffuso è quello ASCII: American Standard Code for Information). A una variabile di tipo char può essere assegnato un qualsiasi carattere: char ch; ch='a'; /* a minuscola */ ch='A'; /* A maiuscola */
20
20 Tipi definiti dall'utente I tipi enumerazione sono: - definiti dal programmatore; - costituiti da insiemi di costanti intere definite dal programmatore, ciascuna individuata da un identificatore e detta enumeratore; - utilizzati per variabili che assumono solo un numero limitato di valori; - utili per rappresentare informazioni non numeriche;
21
21 Tipi definiti dall'utente (2) #include int main() { enum Giorni{LUN,MAR,MER,GIO,VEN,SAB,DOM}; enum Giorni oggi=LUN; printf("%d",oggi); //stampa 0 return(0); }
22
22 Definizione di tipi L'istruzione introdotta dalla parola-chiave typedef definisce un sinonimo di un tipo esistente. Non crea un nuovo tipo, ma un nuovo identificatore di un tipo (nativo o astratto) precedentemente definito. typedef int interi; interi a; /* equivale a scrivere int a*/
23
23 Assegnamento (o assegnazione) Si può conferire un valore ad una variabile tramite un assegnamento: … int a,b; int c=4; a=c; b=a; const int x=3; …
24
24 Assegnamenti (2) #include int main{ int a,b,c; a=b=c=1; b=a*b; c=c+1=3; //ATTENZIONE! return(0); }
25
25 Left value e Right value Left value: espressione che può apparire sul lato sinistro di un assegnamento; Right value: espressione che può apparire sul lato destro di un espressione;
26
26 Operatori aritmetici
27
27 Operatori logici e di confronto I tipi aritmetici possono usare gli operatori di confronto: == uguale != diverso > maggiore >= maggiore o uguale < minore <= minore o uguale
28
28 Operatori logici e di confronto (2) ! operatore logico not && operatore logico and || operatore logico or Gli operatori logici, quando utilizzati in un'espressione, producono 0 oppure 1 come risultato.
29
29 #include int main() { int a=2, b=3, c; c=a>2&&b>3; printf(“%d”,c); //0 c=a>2||b==3; printf(“%d”,c); //1 return(0); }
30
30 #include int main() { int a=2, b=3, c; c=!(a>2&&b>3); printf(“%d”,c); //1 c=a>2||b==3; printf(“%d”,c); //1 return(0); }
31
31 Corto circuito #include int main() { int a=2, b=3, c; c=(a!=0)&&(4/a>1); printf("%d",c); c=(4/a>1)&&(a!=0); //ATTENZIONE! printf("%d",c); return(0); }
32
32 Incremento e decremento #include int main(){ int a=1, b=2; a+=1; //a=a+1; ++b; //b=b+1; a++; //a=a+1; }
33
33 Incremento e decremento (2) #include int main() { int a=2, c=0; printf("%d\n",c++); //stampa 0 printf("%d\n",c); //stampa 1 printf("%d\n",++a); //stampa 3 printf("%d\n",a); //stampa 3 return(0); }
34
34 Incremento e decremento (3) #include int main() { int a=2, c=2; printf("%d\n",c--); //stampa 2 printf("%d\n",c); //stampa 1 printf("%d\n",--a); //stampa 1 printf("%d\n",a); //stampa 1 return(0); }
35
35 Conversioni di tipo Conversioni implicite: quando in un'espressione logica o aritmetica gli operandi non sono dello stesso tipo; quando il tipo del lato destro di un'assegnazione non è lo stesso di quello del lato sinistro;
36
36 #include int main() { char c; short int s; int i; unsigned int i; long int l; unsigned long int ul; float fl; double d; long double ld; i=i+c; /* il valore di c viene convertito al tipo int i=i+s; /* il valore di s viene convertito al tipo int u=u+i; /* il valore di i viene convertito al tipo unsigned int l=l+u; /* il valore di u viene Convertito al tipo long int ul=ul+l; /* il valore di l viene convertito al tipo uns. Long int fl=fl+ul; /* il valore di ul viene convertito al tipo float; d=d+fl; /* il valore di fl viene convertito al tipo double; ld=ld+d; /* il valore di d viene convertito al tipo long double return(0); }
37
37 Conversioni di tipo (2) Attenzione: nella conversione da double a int si può avere una perdita di informazione a causa del troncamento della parte decimale. In alcuni casi nella conversione da int a double si può verificare una perdita di precisione per arrotondamento, poichè gli interi sono rappresentati in forma esatta ed i reali sono rappresentati in forma approssimata.
38
38 Cast esplicito Sebbene le conversioni esplicite siano convenienti, a volte si ha bisogno di un maggior grado di controllo sulla conversione di tipo. Un'espressione di cast ha la forma: (nome del tipo) espressione Il nome del tipo specifica il tipo nel quale verrà convertita l'espressione. … float f=3.14; int i; i=int(f); //cast …
39
39 Ordine di valutazione delle espressioni 1
40
40 Ordine di valutazione delle espressioni 2 #include int main(){ int a,b,c,d,e,f; a=b=c=d=e=f=1; a= b+= c++ - d + --e / -f; return(0); }
41
41 Ordine di valutazione delle espressioni 2 #include int main(){ int a,b,c,d,e,f; a=b=c=d=e=f=1; a= b+= c++ - d + --e / -f; return(0); } 1- a= b+= (c++) - d + --e / -f;
42
42 Ordine di valutazione delle espressioni 2 #include int main(){ int a,b,c,d,e,f; a=b=c=d=e=f=1; a= b+= c++ - d + --e / -f; return(0); } 1- a= b+= (c++) - d + --e / -f; 2- a= b+= (c++) - d + (--e) / -f;
43
43 Ordine di valutazione delle espressioni 2 #include int main(){ int a,b,c,d,e,f; a=b=c=d=e=f=1; a= b+= c++ - d + --e / -f; return(0); } 1- a= b+= (c++) - d + --e / -f; 2- a= b+= (c++) - d + (--e) / -f; 3- a= b+= (c++) - d + ((--e) / -f);
44
44 Ordine di valutazione delle espressioni 2 #include int main(){ int a,b,c,d,e,f; a=b=c=d=e=f=1; a= b+= c++ - d + --e / -f; return(0); } 1- a= b+= (c++) - d + --e / -f; 2- a= b+= (c++) - d + (--e) / -f; 3- a= b+= (c++) - d + ((--e) / -f); 4- a= b+= (((c++) - d) + ((--e) / (-f)));
45
45 Ordine di valutazione delle espressioni 2 #include int main(){ int a,b,c,d,e,f; a=b=c=d=e=f=1; a= b+= c++ - d + --e / -f; return(0); } 1- a= b+= (c++) - d + --e / -f; 2- a= b+= (c++) - d + (--e) / -f; 3- a= b+= (c++) - d + ((--e) / -f); 4- a= b+= (((c++) - d) + ((--e) / (-f))); 5- (a= (b+= (((c++) - d) + ((--e) / (-f))));
46
46 printf() e specifiche di conversione La funzione printf() viene utilizzata per visualizzare a video il contenuto di una stringa.
47
47 printf() (2) #include int main(){ int a=3; printf(“%d%d”,a); //numero di specifiche superiori all'input return(0); }
48
48 printf() (2) #include int main(){ int a=3; printf(“%d%d”,a); //numero di specifiche superiori all'input return(0); } ---------------------------------------------------------- #include int main(){ int a=3,b=5; printf(“%d”,a,b); //numero di specifiche inferiori all'input return(0); }
49
49 scanf() La funzione scanf() viene utilizzata per leggere dallo standard input secondo un particolare formato. #include int main(){ int a; printf(“Inserisci un valore: \n”); scanf(“%d”,&a); return(0); }
50
50 L'istruzione if --------------------------------------- if (espressione) istruzione else istruzione --------------------------------------- #include int main(){ int num1,num2; scanf(“%d%d”,&num1,&num2); if(num1<num2) printf(“%d”,num1); else printf(“%d”,num2); }
51
51 L'istruzione if (2) #include int main(){ int num1,num2,max; scanf(“%d%d”,&num1,&num2); if(num1<num2) max=num1; else max=num2; return(0); }
52
52 #include int main() { int operazione, num1, num2, ris; printf("1: somma, 2: sottrazione, 3: moltiplicazione \n"); scanf("%d",&operazione); if(operazione==1){ printf("Inserisci i numeri:\n"); scanf("%d%d",&num1,&num2); ris=num1+num2; printf("Il risultato è: %d\n",ris); } else if(operazione==2){ printf("Inserisci i numeri:\n"); scanf("%d%d",&num1,&num2); ris=num1-num2; printf("Il risultato è: %d\n",ris);} else if(operazione==3){ printf("Inserisci i numeri:\n"); scanf("%d%d",&num1,&num2); ris=num1*num2; printf("Il risultato è: %d\n",ris);} if(operazione!=1 && operazione!=2 && operazione!=3) printf("Numero non valido!\n"); }
53
53 Espressione condizionale espressione1 ? espressione2 : espressione3 ----------------------------------------------------- #include int main(){ int a=2, b=3; int max; max=(a>b?a:b); printf(“Il massimo è: %d”,max); }
54
54 Switch e break #include int main() { int operazione, num1, num2, ris; printf("1: somma, 2: sottrazione, 3: moltiplicazione \n"); scanf("%d",&operazione); printf("Inserisci i due numeri: \n"); scanf("%d%d",&num1,&num2); switch(operazione){ case 1: printf("La somma è: %d\n",num1+num2); break; case 2: printf("La differenza è: %d\n",num1-num2); break; case 3: printf("Il prodotto è: %d\n",num1*num2); break; default: printf("Il numero inserito non è una scelta valida!\n"); }
55
55 I cicli Un ciclo consente l'esecuzione ripetitiva di altre istruzioni sotto il controllo di una condizione di terminazione.
56
56 L'istruzione while while (condizione) istruzione Valuto la condizione e se verificata eseguo il ciclo. #include int main() { int num, somma; somma=0; scanf("%d",&num); while(num!=0){ somma+=num; scanf("%d",&num); } printf("La somma finale è: %d\n",somma); }
57
57 L'istruzione do-while Eseguo il corpo del ciclo e poi valuto la condizione. A differenza del ciclo while eseguo il contenuto del ciclo almeno una volta. do istruzione while (espressione)
58
58 do-while (2) #include int main() { int num, somma; somma=0; scanf("%d",&num); do { somma+=num; scanf("%d",&num); } while(num!=0) printf("La somma finale è: %d\n",somma); }
59
59 L'istruzione for #include int main() { int num, fatt; fatt=1; scanf("%d",&num); for(int i=1; i<=num; i++){ fatt*=i; } printf("Il fattoriale vale: %d\n",fatt); return(0); }
60
60
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.