Sei sulla pagina 1di 25

1

Linguaggio C
Programma del corso
Struttura di un programma in C
Tipi di dato semplici.Variabili, costanti
Istruzioni di lettura, scrittura e assegnazione
Controllo del flusso: sequenza, selezione, iterazione
Puntatori,funzioni e procedure, parametri formali e attuali,
passaggio dei parametri per valore e per riferimento
Array, stringhe, matrici con allocazione statica e dinamica
Strutture, uso di typedef ,arrray di strutture.
Strutture dati dinamiche
2
TESTI CONSIGLIATI
Deitel&Deitel - C Corso completo di programmazione - Apogeo
A.Bellini A.Guidi - Linguaggio C: Guida alla programmazione - McGraw Hill
M.Etter Delores - Introduzione al Linguaggio C - Apogeo
M.Gori P.Nesi E.Pasca - Pascal e C: guida pratica alla programmazione -
MacGraw Hil
Dispensa
G. Beninati - Algoritmi e strutture dati. Esercizi di programmazione in
Linguaggio C
Si consiglia di usare il compilatore gratuito Dev C ++ versione 4.9.8.0
3
Struttura di un programma in C
#include <stdio.h>

int x,y;/* variabili globali*/

void main(void)
{int a,b;char c;float v;/*variabili locali*/
istruzione;
istruzione;

istruzione;
}
4
Istruzione di lettura
scanf(stringa di formato,indriz1,indiriz2,..);
Esempi:
int x; char car; float y;
..
scanf(%d,&x);
scanf(%c,&car);
scanf(%f,&y);
& restituisce lindirizzo della variabile a cui
applicato in modo prefisso.
5
Istruzione di Scrittura
printf(stringa di formato,esp1,esp2,.);
Esempi:
int x; float y;
.
printf(%d,x);
printf( y = %f,y);
printf(%d %f,x,y);
6
Istruzione di Assegnazione
identintificatore_di_variabile = espressione;
Esempi:
int x,y; float z;
.
x = 3*(x+y);
z = (float)(x+y)/2;

= loperatore di assegnazione
= = loperatore relazionale di uguaglianza
7
#include<stdio.h>
#include<conio.c>
int main()
{int b,h;
float area;
printf("base = ");scanf("%d",&b);
printf("altezza = ");scanf("%d",&h);
area = (float)b*h/2;
printf(" area = %f\n",area);
getch();
return(0);
}
AREA DI UN TRIANGOLO
8
Istruzione Condizionale
If (condizione)
{istruzione;
..
istruzione;
}
else
{istruzione;
..
istruzione;
}
9
Esempio di istruzione if
if ( x<= y)
printf(%d %d,x,y);
else
printf(%d %d,y,x);
Visualizza i contenuti delle due variabili
intere x e y in ordine non decrescente.
10
Equazione di II Grado (I Versione)
#include<stdio.h>
#include<conio.c>
int main()
{int a,b,c,delta;float x1,x2;
printf(" a = ");scanf("%d",&a);printf(" b = ");scanf("%d",&b);
printf(" c = ");scanf("%d",&c);delta = b*b-4*a*c;
if( delta < 0)
printf( " Equazione Impossibile in R \n");
else
{x1 = (float) ( -b -sqrt(delta))/(2*a);x2 = (float) ( -b +sqrt(delta))/(2*a);
printf(" x1 = %.2f \n",x1); printf(" x2 = %.2f \n",x2);}
getch();
return(0);
}
11
Equazione di II Grado ( II Versione)
#include<stdio.h>
#include<conio.c>
int main()
{int a,b,c,delta;float x1,x2;
printf(" a = ");scanf("%d",&a);printf(" b = ");scanf("%d",&b);
printf(" c = ");scanf("%d",&c);delta = b*b-4*a*c;
if( delta < 0)
printf( " Equazione Impossibile in R \n");
else
if( delta == 0)
{printf( "soluzioni coincidenti\n");
x1 = - b/(2*a);printf("x1 = x2 = %.2f \n",x1);}
else
{x1 = (float) ( -b -sqrt(delta))/(2*a);x2 = (float) ( -b +sqrt(delta))/(2*a);
printf(" x1 = %.2f \n",x1); printf(" x2 = %.2f \n",x2);}
getch();
return(0);
}
12
Istruzioni Iterative
Istruzione while
Istruzione do while
Istruzione for
13
Istruzione while
while(condizione)
{istruzione;

istruzione;
}
while itera per vero con controllo iniziale
14
Esempio di istruzione while
somma = 0;
scanf(%d,&x);
while(x != 0)
{somma = somma + x;
scanf(%d,&x);
}
printf( somma = %d,somma);
Legge una sequenza di interi conclusa da 0
e ne calcola la somma
15
Istruzione do while
do
{istruzione;

istruzione;
}
while(condizione);
do while itera per vero con controllo finale
16
Esempio di istruzione do while
somma = 0;
do
{scanf(%d,&x);
somma = somma + x;
}
while(x != 0);
printf( somma = %d,somma);
Legge una sequenza di interi conclusa da 0
e ne calcola la somma
17
Istruzione for
for(inizializzazione;condizione;incremento)
{istruzione;

istruzione;
}
18
Esempio di istruzione for
somma = 0;
for (i = 0;i < n; i++)
{scanf(%d,&x);
somma = somma + x;
}
printf( somma = %d,somma);
Legge una sequenza di n interi e ne calcola
la somma.
i++ equivale a i = i +1;
19
Operatori ++ e --
Loperatore ++ applicato a variabili di tipo intero ne
incrementa di uno il contenuto.
++ pu essere usato sia in modo prefisso ( ++i ) che
postfisso ( i++ ).
I due metodi hanno effetti diversi se usati con variabili
facenti parte di espressioni.
x = 2*i++ assegna ad x 2*i e poi incrementa i.
x = (++i 5) prima incrementa i, poi valuta lespressione
ed esegue lassegnazione.
In modo analogo loperatore -- decrementa di uno il
contenuto delle variabili a cui applicato.
20
Calcolo del Fattoriale
n! = 1*2* ..*n
si utilizzano tre variabili, n per acquisire il
numero, i per controllare il ciclo, fatt per
memorizzare il risultato;
si utilizza un ciclo per eseguire le n
moltiplicazioni. Dato che il numero di iterazioni
noto a priori si utilizza un ciclo for . La variabile
fatt , inizializzata ad 1, pu essere utilizzata per
memorizzare ad ogni passo il risultato delle
moltiplicazioni ponendo fatt = fatt*i .
21
Programma Fattoriale
#include <stdio.h>
#include<conio.c>
int main()
{int fatt, n,i;
printf("n = "); (scanf("%d",&n);
fatt = 1;
for (i = 1; i<= n; i++)
fatt = fatt*i;
printf("%d ! = %d",n,fatt);
getch();
return(0);
}
22
Calcolo del Massimo Comun Divisore
Per il calcolo del Massimo Comun Divisore fra
due numeri naturali n ed m non nulli possiamo
utilizzare il celebre algoritmo di Euclide che si
basa sulle seguenti propriet:
1) se n = m MCD(n, m) = n;
2) se n > m MCD(n, m) = MCD(n-m, m);
3) se n < m MCD(n, m) = MCD(n, m-n).
23
Esempio
Sia n = 32 ed m = 12; utilizzando ripetutamente
le regole 1) 3) si ha :
MCD(32, 12) = MCD(20,12) per la 2)
MCD(20, 12) = MCD(8, 12) per la 2)
MCD(8, 12) = MCD(8, 4) per la 3)
MCD(8, 4) = MCD(4, 4) per la 2)
MCD(4, 4) = 4 per la 1)
24
Per tradurre in programma il procedimento prima
esposto occorre allora:
acquisire in due variabili di tipo intero, n ed m , i
due numeri;
usare un ciclo che, mentre n diverso da m ,
cambi il contenuto di n con il valore dato da
dallespressione n-m (2) o, in alternativa, quello
di m con quello di m-n (3);
visualizzare il contenuto di n ( o quello di m
dato che alla fine del ciclo sono uguali ).
25
Programma MCD
#include <stdio.h>
#include<conio.c>
int main()
{ int n,m;
printf("n = ");scanf("%d",&n);
printf("m = ");scanf("%d",&m);
while (n != m)
if (n>m) n = n-m; else m = m-n;
printf(" Massimo comun divisore = %d",n);
getch();
return(0);
}