powerpoint presentation - lezioni di c per fisicifontana/ · i parametri di una funzione vanno...
TRANSCRIPT
![Page 1: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/1.jpg)
1
Lezioni di C per FisiciDr. Andrea Fontana
Telefono: 0382 507424Email: [email protected] Ufficio P4, I piano, in fondo al corridoio dopo la segreteria INFN
Corso di Informatica per la Fisica IAnno Accademico 2003/2004
![Page 2: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/2.jpg)
2
Sito Web del Corsohttp://www.pv.infn.it/~fontana/CorsoC
![Page 3: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/3.jpg)
3
Libro consigliato
Brian W. KernighanDennis M. Ritchie
Linguaggio CSeconda edizione
Jackson Ed.
E’ un classico! Da avere se si programma in C...
![Page 4: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/4.jpg)
4
Programma del CorsoFondamenti
Dati, tipi e operatori
Strutture di controllo
Funzioni
Puntatori e vettori
Strutture
Input/Output
Esercizi dal KR
![Page 5: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/5.jpg)
5
Fondamenti
Programma piu’ bre ve possibile
Hello, World!
Stampa di caratteri e numeri
Semplici programmi introduttivi
![Page 6: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/6.jpg)
6
vuoto.c
int main(){
return 0;}
![Page 7: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/7.jpg)
7
Come compilare in C ?
Scrivere il programma con un editor,come nedit, ad esempio:nedit vuoto.c
Compilare con il compilatore gcc (o cc):gcc vuoto.c
Eseguire il programma (default a.out):a.out
Per dare al programma un altro nome:gcc –o vu oto vuoto.cvuoto
![Page 8: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/8.jpg)
8
linee.c
#include <stdio.h>
/* stampa di caratteri (stringhe) */
int main(){
printf("Ciao a tutti! ;-)\n");printf("Ri-ciao a tutti! \t ;-)\n");printf("\n E ancora ciao a tutti! ;-)\n");
return 0;}
![Page 9: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/9.jpg)
9
numeri.c (1/2)#include <stdio.h>
/* stampa di variabili numeriche */
int main(){
int i;float f;double d;char c;
i=6;f=6.3;d=5.4;c='A';…
![Page 10: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/10.jpg)
10
numeri.c (2/2)
…printf("Numero intero: %d\n",i);printf("Numero float: %f\n",f);printf("Numero double: %lf\n",d);printf("Carattere: %c\n",c);
printf("\nNumero float formattato: %5.3f\n",f);printf("Carattere: %d\n",c);
return 0;}
![Page 11: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/11.jpg)
11
formato.c
#include <stdio.h>int main(){int i;float f;double d;char c;i=6;f=6.3;d=5.4;c='A';printf("Numero intero: %d\n",i);printf("Numero float: %f\n",f);printf("Numero double: %lf\n",d);printf("Carattere: %c\n",c);printf("\nNumero float formattato: %5.3f\n",f);printf("Carattere: %d\n",c);return 0;}
![Page 12: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/12.jpg)
12
Dati
Modificatori di tipo
Casting
Operatori algebrici e logici
Operatori criptici
![Page 13: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/13.jpg)
13
modif.c (1/2)
#include <stdio.h>
/* modificatori di variabili numeriche */
int main(){
int i;short int si;long int li;unsigned int ui;float f;double d;long double ld;…
![Page 14: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/14.jpg)
14
modif.c (2/2)
…printf("i:\t%d\n",sizeof(i));printf("si:\t%d\n",sizeof(si));printf("li:\t%d\n",sizeof(li));printf("ui:\t%d\n",sizeof(ui));printf("f:\t%d\n",sizeof(f));printf("d:\t%d\n",sizeof(d));printf("ld:\t%d\n",sizeof(ld));
return 0;}
![Page 15: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/15.jpg)
15
cast.c (1/2)
#include <stdio.h>
/* conversione (cast) di variabili numeriche */
int main(){
double d=65.8;float f;long l;int i;short s;char c;…
![Page 16: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/16.jpg)
16
cast.c (2/2)…
printf("d: %lf\n",d);f=(float)d;printf("f: %f\n",f);l=(long)d;printf("l: %ld\n",l);i=(int)d;printf("i: %d\n",i);s=(short)d;printf("s: %d\n",s);c=(char)d;printf("c: %c\n",c);
f=(float)l;printf("\nf: %f\n",f);
return 0;}
![Page 17: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/17.jpg)
17
internal.c#include <stdio.h>#include <gsl/gsl_ieee_utils.h>
/* rappresentazione interna di variabili numeriche (GSL) */
int main(){
float f = 1./3.;double d = 1./3.;
printf("f ="); gsl_ieee_printf_float(&f);printf("\n");
printf("d ="); gsl_ieee_printf_double(&d);printf("\n");
return 0;}
![Page 18: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/18.jpg)
18
aritmetica.c#include <stdio.h>
main(){
int a, b, c;
a = 15; b = 7; c = a + b; c = a - b; c = a * b; c = a / b; c = a % b; c = 4*a - b/3 - a*b + 5*a*(a-b); c = (a-b)/3 - 2*b*b + a;
a = a + 1; b = b * c;
a = b = c = 16; a = b = c = a * b - c/4;
a = (b = (c = 20));
}
![Page 19: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/19.jpg)
19
logica.c (1/2)#include <stdio.h>
main(){
int x = 11, y = 11, z = 11; char a = 50, b = 50, c = 50; float r = 14.57, s = 14.57, t = 14.57;
if (x == y) z = -16; if (x > y) a = 'B'; if (!(x > z)) a = 'A'; if (b <= c) r = -1; if (r != s) t = b/2;
if (x = (r != s)) z = 999; if (x = y) z = 33; if (x != 0) z = -31; if (x) z = 45; …
![Page 20: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/20.jpg)
20
logica.c (2/2)…int x = 11, y = 11, z = 11; char a = 50, b = 50, c = 50; float r = 14.57, s = 14.57, t = 14.57;
x = y = z = 7; if ((x == y) && (x == 7)) z = 3; if ((x > y) || (z > 2)) z = 2; if (x && y && z) z = 1; if ((x = 1) && (y = 2) && (z = 3)) r = 12.05; if ((x == 2) && (y = 3) && (z = 4)) r = 14.7;
if (x == x) z = 27.56; if (z != z) x = 45; if (x = 0) z = 27.56;
}
![Page 21: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/21.jpg)
21
operatori.c (1/2)#include <stdio.h>
main(){
int x = 0, y = 2, z = 255; float a = 0.0, b = 3.141592, c = -7.55;
x = x + 1; x++; ++x; z = y++; /* z = 2, y = 3 */ z = ++y; /* z = 4, y = 4 */
y = y - 1; y--; --y; y = 3; z = y--; /* z = 3, y = 2 */ z = --y; /* z = 1, y = 1 */ …
![Page 22: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/22.jpg)
22
operatori.c (2/2)…a = a + 5; a += 5; a *= 3.2; a -= b; a /= 10.;
a = (b >= 3.0 ? 2.0 : 9.5);
if (b >= 3.0)
a = 2.0; else
a = 9.5;
c = (a > b ? a : b); c = (a < b ? b : a);
}
![Page 23: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/23.jpg)
23
Strutture di controllo
Cicli: while, do..while, for
Break e continue
If, elseif
Case
Goto e label
![Page 24: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/24.jpg)
24
while.c
#include <stdio.h>
main(){
int conta;conta=0;
while(conta<10){
printf( "Il valore di conta e' %d\n”, conta);
conta = conta+1;}
}
![Page 25: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/25.jpg)
25
do.c
#include <stdio.h>
main(){
int conta;conta=0;
do{ printf("Il valore di conta e' %d\n”, conta);
conta = conta+1;} while (conta<10);
}
![Page 26: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/26.jpg)
26
for.c
#include <stdio.h>
main(){
int num;
for(num=0;num<10;num=num+1){ if(num==2)
printf( "Il valore di num e' %d\n”, num); if(num<5) printf( "Il valore di num e' ora %d, che e'
minore di 5.\n”,num);
else printf( "Il valore di num e' ora %d, che e'
maggiore di 4.\n”,num);}
}
![Page 27: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/27.jpg)
27
Istruzioni condizionali
if(condizione)istruzioni;
if(condizione){
istruzioni;}else{
altre istruzioni;}
if(condizione){
istruzioni;}else if(condizione){
altre istruzioni;}else{
ancora istruzioni;}
Tre modi di utilizzare l’ istruzione if:
![Page 28: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/28.jpg)
28
break.c
#include <stdio.h>
main(){
int x; for (x = 4; x < 10; x = x + 1) { if (x == 8)
break; printf(“Break! Il valore di x e' %d\n“,x); }
for (x = 4; x < 10; x = x + 1) { if (x == 8)
continue; printf("Continue! Il valore di x e' %d\n“,x);
} }
![Page 29: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/29.jpg)
29
switch.c#include <stdio.h>
main(){
int scelta;for(scelta=4;scelta<14;scelta=scelta+1){
switch(scelta){
case 4: printf("Il valore e' quattro.\n”);break;case 5: printf( "Il valore e' cinque.\n”);break;case 6:case 7:case 8:case 9: printf( "Il valore e' tra sei e
nove.\n”);break;case 11: printf( "Il valore e' undici.\n”);break;default: printf( "Il valore non e'
predefinito!\n”);break;
}}
}
![Page 30: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/30.jpg)
30
goto.c
#include <stdio.h>
main(){
int a,b,c;
goto partenza_reale;
punto:printf(“Linea della falsa partenza.\n”);goto stop;
partenza_reale:for(a=0;a<4;a=a+1){
for(b=5;b>3;b=b-1)printf("a = %d \t b = %d\n”,a,b);
}goto punto;
stop:printf( "Questa e' la fine!\n”);
}
![Page 31: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/31.jpg)
31
![Page 32: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/32.jpg)
32
Funzioni
Fondamenti
Scope: variabili locali e globali
Ricorsione
Puntatori
![Page 33: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/33.jpg)
33
Funzioni in C
Quando e’ rich iesto l’ uso di una funzione?
Programmazione modulare:
suddivisione delle operazioni da svolgere in funzioni che agiscono come sottoprogrammi;
maggiore chiarezza nella comprensione di un codice sorgente;
possibilita’ di riutilizzare funzioni in altri programmi.
![Page 34: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/34.jpg)
34
quadcubo.c
#include <stdio.h>
int somma=0;
main(){
int num;
for(num=0;num<5;num++)printf(“%d\t %d\t %d\n”,num,num*num,num*num*num);
printf(“\n”);
int indice=0;
titolo();for(indice=0; indice<5; indice++)
quadrato(indice);cubo(indice);fine();
}
![Page 35: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/35.jpg)
35
funzioni.c
void titolo(){
printf("Questo e' il titolo del programma\n”);}
void quadrato(int variabile){
int quad;
quad = variabile*variabile;somma += quad;printf("Il quadrato di %d e' %d\n”,variabile,quad);
}
![Page 36: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/36.jpg)
36
funzioni.c
void cubo(int variabile){
int cubo;
cubo = pow(variabile,3);printf("Il cubo di %d e' %d\n”,variabile,cubo);
}
void fine(){
printf("Questa e' la fine e la somma dei quadrati e' %d\n”, somma);
}
![Page 37: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/37.jpg)
37
quadrato.c
#include <stdio.h>
main(){
int x, y;
for(x=0; x<5; x++){
y = quad(x);printf("Il quadrato di %d e' %d\n”,x,y);
}
printf(“\n”);for(x=0; x<5; x++){
printf("Il quadrato di %d e' %d\n”,x,quad(x));}
}
![Page 38: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/38.jpg)
38
quad.c
int quad(int variabile){
int quadrato;
quadrato = variabile*variabile;return(quadrato);
}
![Page 39: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/39.jpg)
39
ricorsione.c
#include <stdio.h>
main(){ int indice; indice = 10; countdown(indice); }
void countdown(int num) { printf("Il valore di num e' %d\n”,num); num--; if (num>0) countdown(num); }
![Page 40: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/40.jpg)
40
scambio_1.c
#include <stdio.h>
main(){ int a, b; a = 5; b = 10; printf("In main a vale: %d\n”,a); printf("In main b vale: %d\n\n”,b); swap1(a, b); printf("In main a vale: %d\n”,a); printf("In main b vale: %d\n\n”,b);}
![Page 41: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/41.jpg)
41
swap_1.c
int swap1(int a, int b){ int temp;
temp = a; a = b; b = temp;
printf("In swap a vale: %d\”,a); printf(“In swap b vale: %d\n\n”,b);
return 0;}
![Page 42: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/42.jpg)
42
Puntatori e vettori
Gestione della memoria
Vettori numerici
Aritmetica degli indirizzi
Stringhe: vettori di caratteri
![Page 43: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/43.jpg)
43
Gestione memoria
... ... ...
p: c:
int c=1,d;int *p;
p = &c;d = *p;
indirizzo (puntatore)
valore(variabile)
& = address of (variable)* = contents of (pointer)
p e’ un puntatore ad intero
p punta a cd vale 1
![Page 44: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/44.jpg)
44
scambio_2.c
#include <stdio.h>
main(){ int a, b; a = 5; b = 10; printf("In main a vale: %d\n”,a); printf("In main b vale: %d\n\n”,b);
swap2(&a, &b); printf("In main a vale: %d\n”,a); printf("In main b vale: %d\n\n”,b);}
![Page 45: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/45.jpg)
45
swap_2.c
int swap2(int *a, int *b){ int temp;
temp = *a; *a = *b; *b = temp;
printf("In swap a vale: %d\”,a); printf(“In swap b vale: %d\n\n”,b);
return 0;}
![Page 46: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/46.jpg)
46
Argomenti per valore o per indirizzo?
In C tutti gli argomenti delle funzioni vengono passati per valore: la funzione chiamata non puo’ alterare direttamente una variabile nella funzione chiamante.
I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori copia di variabili del programma chiamante.
E’ possibile effettuare chiamate per riferimento utilizzando i puntatori: in questo caso una funzione puo’ modificare una variabile del programma chiamante.
![Page 47: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/47.jpg)
47
array.c
#include <stdio.h>
main(){
int vettore[12], indice;
for(indice=0; indice<12; indice++) vettore[indice] = 3 * (indice - 5);
for(indice=0; indice<12; indice++) {
printf("Il valore all' indice %d e’ %d\n”,vettore[indice]);
printf("Il valore all' indice %d e' %d\n”,*(vettore+indice));
printf(”\n”); }
}
![Page 48: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/48.jpg)
48
stringa.c#include <stdio.h>
main(){
char nomec[5], *nomes;
nomec[0] = 'S'; nomec[1] = 'a'; nomec[2] = 'r'; nomec[3] = 'a'; nomec[4] = 0; nomes = "Sara";
printf("Il nome e' %s\n”,nomec); printf("Una lettera e' %c\n”,nomec[2]); printf("Parte del nome e' %s\n”,&nomec[1]); printf("Parte del nome e' %s\n”,nomec+1);
printf("Il nome e' %s”,nomes); printf("Una lettera e' %c”,nomes[2]); printf("Parte del nome e' %s”,&nomes[1]); printf("Parte del nome e' %s”,nomes+1);
}
![Page 49: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/49.jpg)
49
Strutture
Variabili composte
Numeri complessi in C
![Page 50: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/50.jpg)
50
point.c#include <stdio.h>#include <math.h>
main(){
double dist;struct point { int x; int y;};struct point pt1;struct point pt2 = { 2, 2 };
pt1.x=5;pt1.y=2;printf(”%d,%d\n”, pt1.x, pt1.y);
dist=sqrt(pt2.x*pt2.x + pt2.y*pt2.y);printf(“%f\n”,dist);
}
![Page 51: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/51.jpg)
51
rectangle.c#include <stdio.h>
main(){
double area;struct point { int x; int y;};struct rect { struct point pt1; struct point pt2;};struct rect screen;
screen.pt1.x=1;screen.pt1.y=1;screen.pt2.x=5;screen.pt2.y=5;
}
![Page 52: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/52.jpg)
52
Numeri complessi in C
#include <stdio.h>
main(){
struct complex { float a; float b;};struct complex i = { 0, 1 };struct complex z = { 5, -7 };struct complex w;
w.a = i.a + z.a;w.b = i.b + z.b;
printf(”%f,%f\n”, i.a, i.b);printf(”%f,%f\n”, z.a, z.b);printf(”%f,%f\n”, w.a, w.b);
}
![Page 53: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/53.jpg)
53
Input/Output
Accesso a files
fprintf e fscanf
Interazione con Unix:compilare e linkare con make
![Page 54: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/54.jpg)
54
I/O con files
In Unix e’ po ssibile reindirizzare lo standard input (di solito la tastiera) e lo standard output (di solito il video)con gli operatori di shell < e >:
conta_linee < numeri.ctemperatura > celsius.dat
Nessuna modifica e’ r ichiesta in questo caso al codice sorgente.
![Page 55: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/55.jpg)
55
files.c#include <stdio.h>
main(){
float fahr,celsius;FILE *fp1,*fp2;
fp1=fopen(“fahr.dat”,”r”);fp2=fopen(“celsius.dat”,”w”);
fscanf(fp1,”%f”,&fahr);/* converti e’ una funzione analoga al programma
temperatura.c */celsius = converti(fahr);fprintf(fp2,”%f\n”,celsius);
fclose(fp1);fclose(fp2);
}
![Page 56: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/56.jpg)
56
Utilizzo di make
Come compilare e linkare programmi il cui codice sorgente e’ in piu’ files?
gcc –c funzioni.cgcc –o quadrato funzioni.o quadrato.c
Oppure... si edita un file di nome Makefile e si esegue:
make
Solo i files modificati vengono ricompilati e rilinkati.
![Page 57: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/57.jpg)
57
Makefile
quadrato: quadrato.o funzioni.o gcc –o qua drato funzioni.o quadrato.c
quadrato.o: quadrato.c gcc –c –o quadrato.o quadrato.c
funzioni.o: funzioni.c gcc –c –o funzioni.o funzioni.c
Questo e’ un tabulatore!!!
![Page 58: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/58.jpg)
58
Esempi dal Kernigham-Ritchie
Conversione di temperatura
Copia di caratteri
Conteggio di caratteri e di numeri
Ricerca di linee di testo
![Page 59: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/59.jpg)
59
temperatura.c#include <stdio.h>
/* stampa la tabella Fahrenheit-Celsius per fahr = 0, 20, ..., 300 */main(){
int fahr, celsius;int lower, upper, step;
lower = 0;upper = 300;step = 20;
fahr = lower;while(fahr <= upper){celsius = 5 * (fahr - 32) / 9;
/* printf("%d\t%d\n", fahr, celsius); */printf("%3d\t%6d\n", fahr, celsius); fahr = fahr + step;}
}
![Page 60: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/60.jpg)
60
temperatura_def.c
#include <stdio.h>
#define LOWER 0#define UPPER 300#define STEP 20
/* stampa la tabella Fahrenheit-Celsius per fahr = 0, 20, ..., 300 */main(){
int fahr;
for(fahr = LOWER; fahr <= UPPER; fahr = fahr + STEP) printf("%3d\t%6.1f\n", fahr, (5.0/9.0)*(fahr-32));
}
Dal KR
![Page 61: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/61.jpg)
61
temperatura_float.c#include <stdio.h>
/* stampa la tabella Fahrenheit-Celsius per fahr = 0, 20, ..., 300 */main(){
float fahr, celsius;int lower, upper, step;
lower = 0;upper = 300;step = 20;
fahr = lower;while(fahr <= upper){ celsius = (5.0/9.0) * (fahr - 32); printf("%3.0f\t%6.1f\n", fahr, celsius); fahr = fahr + step;}
}
Dal KR
![Page 62: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/62.jpg)
62
temperatura_for.c#include <stdio.h>
/* stampa la tabella Fahrenheit-Celsius per fahr = 0, 20, ..., 300 */main(){
int fahr;
for(fahr = 0; fahr <= 300; fahr = fahr + 20) printf("%3d\t%6.1f\n", fahr, (5.0/9.0)*(fahr-32));
}
Dal KR
![Page 63: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/63.jpg)
63
caratteri.c#include <stdio.h>
main(){
long nc;
nc = 0;while(getchar() != EOF)
++nc;printf("%ld\n",nc);
}
![Page 64: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/64.jpg)
64
caratteri_for.c#include <stdio.h>
main(){
double nc;
for(nc = 0; getchar() != EOF; ++nc);
printf("%.0f\n",nc);}
Dal KR
![Page 65: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/65.jpg)
65
copia.c#include <stdio.h>
main(){
int c;
c = getchar();while(c != EOF){ putchar(c); c = getchar();}
}
Dal KR
![Page 66: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/66.jpg)
66
copia_corto.c#include <stdio.h>
main(){
int c;
while((c = getchar()) != EOF)putchar(c);
}
Dal KR
![Page 67: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/67.jpg)
67
conta_linee.c#include <stdio.h>
main(){
int c, nl;
nl = 0;while((c = getchar()) != EOF)if(c == '\n')
++nl;printf("%d\n",nl);
}
![Page 68: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/68.jpg)
68
conta_parole.c#include <stdio.h>
#define IN 1#define OUT 0
main(){
int c, nl, nw, nc, state;
state = OUT;nl = nw = nc = 0;while((c = getchar()) != EOF){
++nc;if(c == '\n')
++nl;if(c == ' ' || c == '\n' || c == '\t')
state = OUT;else if (state == OUT){
state = IN;++nw;
}}printf("%d %d %d\n",nl,nw,nc);
}
Dal KR
![Page 69: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/69.jpg)
69
conta_cifre.c#include <stdio.h>
main(){
int c, i, nwhite, nother;int ndigit[10];
nwhite = nother = 0;for(i = 0; i<10; ++i)
ndigit[i] = 0;
while((c = getchar()) != EOF)if(c >= '0' && c <= '9')
++ndigit[c - '0'];else if(c == ' ' || c == '\n' || c == '\t')
++nwhite;else
++nother;
printf("cifre =");for(i = 0; i<10; ++i)
printf(" %d",ndigit[i]);printf(", spaziature = %d, altri = %d\n",nwhite, nother);
}
Dal KR
![Page 70: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/70.jpg)
70
conta_tutto.c#include <stdio.h>
main(){
int c, i, nwhite, nother;int ndigit[10],nalpha[26];
nwhite = nother = 0;for(i = 0; i<10; ++i)
ndigit[i] = 0;for(i = 0; i<26; ++i)
nalpha[i] = 0;
while((c = getchar()) != EOF)if(c >= '0' && c <= '9')
++ndigit[c - '0'];else if(c >= 'a' && c <= 'z')
++nalpha[c - 'a'];else if(c == ' ' || c == '\n' || c == '\t')
++nwhite;else
++nother;
printf("cifre =");for(i = 0; i<10; ++i)
printf(" %d",ndigit[i]);printf("\nalpha =");for(i = 0; i<26; ++i)
printf(" %d",nalpha[i]);printf("\nspaziature = %d, altri = %d\n",nwhite, nother);
}
Dal KR
![Page 71: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/71.jpg)
71
power.c#include <stdio.h>
int power(int m, int n);
main(){
int i;
for(i=0;i<10;++i)printf("%d\t%d\t%d\n",i,power(2,i),power(-3,i));
return 0;}
int power(int base, int n){
int i,p;
p=1;for(i=1;i<=n;++i)
p=p*base;return p;
}
int power2(int base, int n){
int p;
for(p=1;n>0;--n)p=p*base;
return p;}
Dal KR
![Page 72: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/72.jpg)
72
trovalinea.c#include <stdio.h>#define MAXLINE 1000
int getline(char line[], int maxline);void copy(char to[], char from[]);
main(){
int len;int max;char line[MAXLINE];char longest[MAXLINE];
max=0;while((len=getline(line,MAXLINE))>0)
if(len>max){
max=len;copy(longest,line);
}if(max>0)
printf("%s",longest);return 0;
}
Dal KR
![Page 73: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/73.jpg)
73
Funzioni in trovalinea.cint getline(char s[],int lim){
int c,i;
for(i=0;i<lim-1 && (c=getchar())!=EOF && c!='\n';++i)s[i]=c;
if(c=='\n'){
s[i]=c;++i;
}
s[i]='\0';return i;
}
void copy(char to[], char from[]){
int i;
i=0;while((to[i]=from[i])!='\0')
++i;}
Dal KR
![Page 74: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/74.jpg)
74
trovalinea_scope.c#include <stdio.h>#define MAXLINE 1000
int max;char line[MAXLINE];char longest[MAXLINE];
int getline(void);void copy(void);
main(){
int len;extern int max;extern char longest[MAXLINE];
max=0;while((len=getline())>0)
if(len>max){
max=len;copy();
}if(max>0)
printf("%s",longest);return 0;
}
Dal KR
![Page 75: PowerPoint Presentation - Lezioni di C per Fisicifontana/ · I parametri di una funzione vanno considerati come variabili locali, definite nella funzione chiamata e contenenti valori](https://reader036.vdocuments.pub/reader036/viewer/2022071100/5fd8f47c30ab410c3c31d0fe/html5/thumbnails/75.jpg)
75
Funzioni in trovalinea_scope.cint getline(void){
int c,i;extern char line[];
for(i=0;i<MAXLINE-1 && (c=getchar())!=EOF && c!='\n';++i)line[i]=c;
if(c=='\n'){
line[i]=c;++i;
}
line[i]='\0';return i;
}
void copy(void){
int i;extern char line[],longest[];
i=0;while((longest[i]=line[i])!='\0')
++i;}
Dal KR