Fondamenti di Informatica Prof. A.Broggi Linguaggio C (2) www.ce

Fondamenti di Informatica
Prof. A.Broggi
Linguaggio C (2)
Fondamenti di Informatica
Prof. A.Broggi
Funzioni: esempio
Funzioni
}
...
calcola(dato, &quadrato, &cubo);
}
Fondamenti di Informatica
Fondamenti di Informatica
Prototipo delle funzioni
main()
{
float dato, quadrato, cubo;
val_scont= valore - (valore*percent / 100);
return(val_scont);
}
...
calcola(dato, &quadrato, &cubo);
main()
{
long int costo;
int percentuale;
}
}
2
Fondamenti di Informatica
Funzioni: esempio
5
Fondamenti di Informatica
Puntatori
#include <stdio.h>
void testacoda(void)
{
printf(“**********\n “);
return;
}
• un blocco di istruzioni tra { e } forma
un’istruzione composta
• i blocchi possono essere annidati
• l’indentazione rende visibile la struttura
del programma
• il blocco più esterno è il file che
costituisce il programma
assegnazione dell’indirizzo di una variabile:
ind_dato = &dato2;
definizione di un puntatore (ad intero):
int dato2;
int *ind_dato;
accesso al contenuto di una variabile tramite un puntatore:
ind_dato = &dato2;
dato2 = 5;
*ind_dato = 5;
3
www.ce.unipr.it/broggi/fondinfo
Fondamenti di Informatica
1
Fondamenti di Informatica
Prof. A.Broggi
Linguaggio C (2)
Fondamenti di Informatica
2
Fondamenti di Informatica
Prof. A.Broggi
Linguaggio C (2)
Istruzione if - else
• Lo scope delle funzioni va dal punto dove
sono definite o dichiarate alla fine del
blocco più esterno
• Lo scope delle variabili e costanti va dal
punto dove sono definite alla fine del
blocco in cui la definizione è inserita
• Le funzioni, variabili e costanti definite in
testa al programma sono globali
• Le variabili definite in una funzione o
blocco sono locali
Fondamenti di Informatica
Prof. A.Broggi
Linguaggio C (2)
do istruzione while (espressione);
valore = 0.0;
n=1;
do
{
valore = valore +1/n;
n++;
}
while(1/n > soglia);
printf(“Ïntroduci due numeri interi\n”);
scanf(“%d%d”, &n1, &n2);
if ((n1>=0) && (n2>0))
{
quoz = n1/n2;
printf(“Quoziente=%d\n”, quoz);
}
else
printf(“Errore nei dati introdotti\n”);
10
Fondamenti di Informatica
Scope: esempio
13
Fondamenti di Informatica
for(inizializzazione; condizione; aggiornamento )
istruzione;
int n, k;
long int fatt;
if (dato1 == dato2) flag = 1; else flag=0;
int funz1(int param1, float param2)
{
int dato5;
void funz2(int param1, int param2);
...
}
16
Istruzione for
Istruzione if - else
• if annidati: attenzione alle ambiguità
• sfruttare le potenzialità del C
main()
{
float dato3, dato4;
...
}
fatt =1;
for (k=1; k<=n; k++)
fatt = fatt*k;
flag = (dato1 == dato2);
• attenzione agli errori di questo tipo
if (2<=dato<=5)
printf(“Il dato è compreso tra 2 e 5 \n”);
11
Fondamenti di Informatica
14
Fondamenti di Informatica
17
Istruzione while
Funzioni di libreria
while (espressione) istruzione;
• il compilatore dispone di librerie di funzioni
predefinite
• suddivise in file per categorie (matematiche,
I/O, conversione, stringhe,…)
• funzioni standard e non standard
• includere con #include il file che contiene il
prototipo (header file)
www.ce.unipr.it/broggi/fondinfo
3
const float soglia = 0.00005;
float valore;
int n;
main()
{
int n1, n2, quoz;
int dato1, dato2;
int funz1(int param1, float param2);
Fondamenti di Informatica
www.ce.unipr.it/broggi/fondinfo
Istruzione do-while
if (espressione) istruzione1; else istruzione2;
#define PIGRECO 3,1415
void funz2(int param1, int param2)
{
char dato6;
...
Fondamenti di Informatica
}
9
#include <stdio.h>
}
Fondamenti di Informatica
6
www.ce.unipr.it/broggi/fondinfo
Scope delle variabili e delle funzioni
8
Blocchi di istruzioni
assegnazione del contenuto di una variabile:
dato1 = dato2;
void corporett(void)
{
printf(“*
*\n “);
return;
}
...
void calcola(float valore, float *quad_val, float *cub_val)
{
*quad_val = valore * valore;
*cub_val = *quad_val * valore;
return;
}
...
printf(“Il prezzo scontato e`= %ld\n”,
prezzo_scont(costo, percentuale);
...
}
7
void calcola(float valore, float *quad_val, float *cub_val);
long int prezzo_scont(long int valore, int percent)
{
long int val_scont;
/* corpo della funzione */
…
return(valore);
Fondamenti di Informatica
...
4
Passaggio dei parametri per valore
Funzioni: forma generale
main()
{
testacoda();
corporett();
corporett();
corporett();
testacoda();
}
main()
{
float dato, quadrato, cubo;
dato = lettura();
printf(“Il dato introdotto e`= %d\n”, dato);
1
tipo nome_funzione(param1, …, paramn)
{
/* definizioni costanti e variabili */
...
Fondamenti di Informatica
printf(“Introduci un intero: “);
scanf(“%d”, &dato_letto);
return(dato_letto);
main()
{
int dato;
}
Linguaggio C (2)
void calcola(float valore, float *quad_val, float *cub_val)
{
*quad_val = valore * valore;
*cub_val = *quad_val * valore;
return;
}
int lettura(void)
{
int dato_letto;
• modulo di programma che può essere
invocato più volte
• meccanismo di funzionamento
Fondamenti di Informatica
Prof. A.Broggi
Passaggio dei parametri per riferimento
#include <stdio.h>
• necessità di eseguire più volte una stessa
elaborazione
Fondamenti di Informatica
Linguaggio C (2)
double senx (double x)
{
const double soglia = 0.00005;
double csenx , termine, termass, n;
}
12
4
termine = x;
n=1;
csenx = x;
termass = fabs (termine);
while (termass > soglia)
{
termine = -termine*x*x /((n+1)*(n+2));
csenx = csenx + termine;
n+=2;
termass = fabs (termine);
}
return(csenx );
Fondamenti di Informatica
www.ce.unipr.it/broggi/fondinfo
15
5
www.ce.unipr.it/broggi/fondinfo
6