Академический Документы
Профессиональный Документы
Культура Документы
Primo programma in C
Introduzione al linguaggio C
Struttura minima di un file C
Sottoinsieme minimale di istruzioni
Compilare il primo programma
Esercizi proposti
Sommario
2
Riferimenti al materiale
Testi
Kernighan & Ritchie: capitolo 1
Cabodi, Quer, Sonza Reorda: capitoli 1, 3
Dietel & Dietel: capitolo 1
Dispense
Scheda: Primo programma in C
3
Primo programma in C
Genesi del linguaggio C
5
Obiettivi del linguaggio
1978, K&R C
1989, ANSI C (o C89)
Frutto del lavoro di
standardizzazione del comitato
X3J11 dellAmerican National
Standards Institute
Standard X3.159-1989
Programming Language C
Seconda edizione del K&R
7
Evoluzione del linguaggio (2/2)
8
Diffusione attuale
9
Principali vantaggi del C
11
Un esempio
#include <stdio.h>
int main(void
void)
void
{
printf("hello, world\n");
return 0;
}
12
Primo programma in C
Struttura minima di un file C
2
Struttura minima di un file C
Tipi di applicazioni (1/4)
Applicazioni grafiche
Interazione mediante
mouse e finestre
Visualizzazione di testi
e grafica
Elaborazione
concorrente 4
Tipi di applicazioni (2/4)
Applicazioni batch
Nessuna interazione
utente
Compiti lunghi e
ripetitivi
Elaborazione numerica,
trasferimenti in rete 6
Tipi di applicazioni (4/4)
8
Modello di applicazioni console
Programma
eseguibile
Visualizzazione
Immissione dati 9
risultati
Modello di applicazioni console
Scrittura
programma Programma
sorgente in C
Compilatore C
Programma
eseguibile
Visualizzazione
Immissione dati 10
risultati
Modello di applicazioni console
Scrittura somma.c
programma Programma
sorgente in C
Compilatore C
somma.exe
Programma
eseguibile
Visualizzazione
Immissione dati 11
risultati
Compilatore C
Compilatore C
12
Scrittura
programma
Scrittura del programma
13
Editor per programmatori
14
Scrittura
Compilatore C
programma
Ambienti integrati
15
Struttura minima di un file C
Struttura di un sorgente in C
#include <stdio.h>
int main(void
void)
void
{
int a ;
a = 3 ;
printf("hello, world\n");
printf("the magic number is %d\n", a) ;
return 0;
}
17
Struttura di un sorgente in C
Programma principale
#include <stdio.h> (funzione main)
int main(void
void)
void
{
int a ;
a = 3 ;
printf("hello, world\n");
printf("the magic number is %d\n", a) ;
return 0;
}
18
Struttura di un sorgente in C
#include <stdio.h>
int main(void
void)
void
{
int a ;
a = 3 ;
printf("hello, world\n");
printf("the magic number is %d\n", a) ;
return 0;
}
Parentesi graffe che
delimitano il main
19
Struttura di un sorgente in C
#include <stdio.h>
int main(void
void)
void Variabili utilizzate
dal programma
{
int a ;
a = 3 ;
printf("hello, world\n");
printf("the magic number is %d\n", a) ;
return 0;
}
20
Struttura di un sorgente in C
#include <stdio.h>
int main(void
void)
void
{
int a ; Istruzioni eseguibili
a = 3 ;
printf("hello, world\n");
printf("the magic number is %d\n", a) ;
return 0;
}
21
Struttura di un sorgente in C
Richiamo delle
#include <stdio.h> librerie utilizzate
int main(void
void)
void
{
int a ;
a = 3 ;
printf("hello, world\n");
printf("the magic number is %d\n", a) ;
return 0;
}
22
In generale
int main(void
void)
void
{
definizione variabili
istruzioni eseguibili
23
Struttura minima di un file C
Commenti
/* io sono un commento */
25
Sintassi
26
Esempio
/* programma: hello.c
autore: fulvio corno
*/
int main(void
void)
void
{
int a ; /* numero magico */
a = 3 ; /* assegno un valore */
/* salutiamo l'utente */
printf("hello, world\n") ;
printf("the magic number is %d\n", a) ;
return 0;
} 27
Spazi bianchi
28
Esempio
29
Esempio
#include <stdio.h>
int main(void
void)
void
{ int a ; a = 3 ; printf("hello, world\n") ;
printf("the magic number is %d\n", a) ; return 0; }
30
Struttura minima di un file C
Librerie di funzioni
32
Sintassi
Librerie principali:
#include <stdio.h>
Funzioni di lettura/scrittura su terminale e su file
#include <stdlib.h>
Funzioni base per interazione con sistema operativo
#include <math.h>
Funzioni matematiche
#include <string.h>
Elaborazione di testi 33
Avvertenze
34
Suggerimenti
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(void
void)
void
{
. . . .
} 35
Struttura minima di un file C
Variabili
a 35 x -17
37
Variabili
a 35 x -17
41
Nomi ammissibili
42
Esempi di nomi
a b a1 a2
43
Esempi di nomi
a b a1 a2
44
Esempi di nomi
a b a1 a2
45
Esempi di nomi
a b a1 a2
46
Esempi di nomi
a b a1 a2
int main(void
void)
void
{
int a ;
int b ;
float x ;
. . . . .
48
}
Definizione di variabili
a ?
t
definizione
50
Valore contenuto
? a 37
t
definizione inizializzazione
51
Valore contenuto
? 37 a -4
t
definizione inizializzazione altra
assegnazione 52
Valore contenuto
? 37 -4 a -3
t
definizione inizializzazione altra incremento
assegnazione 53
Struttura minima di un file C
Istruzioni eseguibili
55
Esempio
/* programma: hello.c
autore: fulvio corno
*/
int main(void
void)
void
{
int a ; /* numero magico */
a = 3 ; /* assegno un valore */
/* salutiamo l'utente */
printf("hello, world\n") ;
printf("the magic number is %d\n", a) ;
return 0;
} 56
Tipologie di istruzioni
Istruzioni operative
Lettura dati
scanf("%d", &a) ;
Stampa risultati
printf("%d", a) ;
Elaborazione numerica
a = b + c ;
b = b + 1 ;
c = 42 ;
c = sqrt(a) ;
57
Tipologie di istruzioni
2
Sottoinsieme minimale di istruzioni
Tipi di dato
4
Il sistema dei tipi C
Tipo di dato
signed/unsigned Funzioni
5
Caratteristiche generali
6
Il tipo int
7
Esempi
i 0
int i, j ;
int N ;
int x ; j 2
i = 0 ;
j = 2 ; N
N = 100 ; 100
x = -3124 ;
x -3124
8
Il tipo float
9
Esempi
a 3.1
float a, b ;
float pigr ; b
float Nav, Qe ; 2.0
a = 3.1 ;
b = 2.0 ; pigr 3.1415
pigr = 3.1415926 ;
Nav = 6.022e23 ;
Qe = 1.6e-19 ; Nav 6.021023
Qe 1.61019 10
Sottoinsieme minimale di istruzioni
Istruzioni di stampa
Programma
eseguibile
Visualizzazione
risultati
12
Stampa di messaggi
printf("Benvenuto\n") ;
printf("\n");
Benvenuto
Immetti un numero: _
13
Stampa di variabili
printf("%d ", j) ;
printf("%d\n", N) ;
printf("%f\n", pigr) ;
printf("%f\n", Nav) ;
2 100
3.141593
602200013124147500000000.000000
14
Stampa di espressioni
printf("%d\n", i-j) ;
printf("%d\n", N*2) ;
-2
200
96352.000000
15
Stampa di messaggi e valori
printf("Risultato=%d\n", N*2) ;
Risultato=200
16
Sintassi istruzione printf
#include <stdio.h>
printf("formato ", valore/i ) ;
Formato:
Testo libero (compresi spazi) viene stampato
letteralmente
Simboli \n va a capo
Simboli %d stampa un int
Simboli %f stampa un float
Valore/i:
Variabile o espressione
Di tipo int o float, corrispondente al simbolo %
17
Casi particolari (1/2)
18
Casi particolari (2/2)
19
Sottoinsieme minimale di istruzioni
Istruzioni di lettura
Programma
eseguibile
Immissione dati
21
Lettura di un intero
213
22
Lettura di un reale
12.5
23
Sintassi istruzione scanf
#include <stdio.h>
scanf("formato ", &variabile ) ;
Formato:
Simboli %d legge un int
Simboli %f legge un float
Variabile:
Di tipo int o float, corrispondente al simbolo %
Sempre preceduta dal simbolo &
24
Suggerimento
25
Errore frequente
forma corretta
26
Errore frequente
forma corretta
27
Sottoinsieme minimale di istruzioni
Assegnazione delle variabili
a ? 37 -4 -3
t
definizione inizializzazione altra incremento
assegnazione
29
Assegnazione di variabili
30
Sintassi dellassegnazione
variabile = espressione ;
valore valore
a precedente a espressione
N = 3 ;
32
Esempi
N = 3 ;
a = b ;
Non confondere con b = a ;
33
Esempi
N = 3 ;
a = b ;
Non confondere con b = a ;
a = a + 1 ;
Incrementa a di ununit
34
Esempi
N = 3 ;
a = b ;
Non confondere con b = a ;
a = a + 1 ;
Incrementa a di ununit
a + 1 = a ;
Errore
35
Quesito
a = b ;
b = a ;
36
Risposta
a = b ;
b = a ;
a 7 b 12
38
Quesito
a 7 b 12
valore valore
a 12
precedente b 7
precedente
39
Risposta
t = a ;
a = b ;
b = t ;
a 7 b 12
t ?
40
Risposta
t = a ;
a = b ;
b = t ;
a 7 b 12
t 7
41
Risposta
t = a ;
a = b ;
b = t ;
a 12 b 12
t 7
42
Risposta
t = a ;
a = b ;
b = t ;
a 12 b 7
t 7
43
Sottoinsieme minimale di istruzioni
Espressioni aritmetiche
45
Operatori principali
Somma: a+b
Sottrazione: a-b
Moltiplicazione: a*b
Divisione: a/b
Divisione intera (risultato troncato) se entrambi gli
operandi sono int
Resto della divisione: a%b
Solo tra operandi int
Cambio di segno: -a
46
Alcuni operatori avanzati
Incremento: i++
Decremento: N--
Conversione ad intero: (int)a
Conversione a reale: (float)N
47
Funzioni di libreria
#include <math.h>
Funzioni algebriche
fabs, sqrt, cbrt, pow, hypot, ceil, floor,
round, trunc, fmod
Funzioni esponenziali e logaritmiche
exp, exp2, log, log10, log2
Funzioni trigonometriche e iperboliche
cos, sin, tan, cosh, sinh, tanh
Funzioni trigonometriche e iperboliche inverse
acos, asin, atan, atan2, acosh, asinh,
atanh
48
Parentesi
Un semplice programma
Lambiente di sviluppo Dev-C++
Codifica del programma
Compilazione e correzione errori
Esecuzione e verifica
2
Compilare il primo programma
Esercizio Somma due numeri
Scrittura
programma Programma
sorgente in C
4
Analisi
5
Analisi
6
Analisi
La somma di 18 + 3 vale: 21
7
Diagramma di flusso
Leggi A
Leggi B
Calcola
C = A+B
Stampa C
8
Traduzione in C (1/4)
int a ;
Leggi A
scanf("%d", &a) ;
Leggi B
Calcola
C = A+B
Stampa C
9
Traduzione in C (2/4)
Leggi A
int b ;
Leggi B
scanf("%d", &b) ;
Calcola
C = A+B
Stampa C
10
Traduzione in C (3/4)
Leggi A
Leggi B
int c ;
Calcola
C = A+B c = a + b ;
Stampa C
11
Traduzione in C (4/4)
Leggi A
Leggi B
Calcola
C = A+B
printf("La somma %d + %d ",
a, b) ;
Stampa C
printf("vale: %d\n", c) ;
12
Compilare il primo programma
Compilatori e IDE
14
IDE per C in ambiente Windows
Dev-C++
http://www.bloodshed.net
15
IDE per C in ambiente Windows
V IDE
http://www.objectcentral.org
16
IDE per C in ambiente Windows
Code::Blocks
http://www.codeblocks.org
17
IDE per C in ambiente Windows
lcc-win32
http://www.cs.virginia.edu/~lcc-win32/
18
Interfaccia di Dev-C++
19
Interfaccia di Dev-C++
Men e toolbar
Editor
programma
sorgente
Messaggi errore 20
Menu principali
21
Compilare il primo programma
Codifica del programma
Scrittura somma.c
programma Programma
sorgente in C
23
Codifica Somma due numeri
24
Soluzione proposta (1/2)
#include <stdio.h>
#include <stdlib.h>
somma.c
int main(void
void)
void
{
int a, b ; /* addendi */
int c ; /* somma */
25
Soluzione proposta (2/2)
somma.c
/* CALCOLA LA SOMMA */
c = a + b ;
/* STAMPA IL RISULTATO C */
printf("La somma di %d + %d vale: %d\n",
a, b, c) ;
}
26
Compilare il primo programma
Compilazione del programma
Attivare il compilatore
sul programma somma.c
sorgente somma.c Programma
sorgente in C
Il compilatore verifica
che non ci siano
errori di sintassi Compilatore C
In assenza di errori,
viene generato il somma.exe
Programma
programma eseguibile eseguibile
somma.exe
28
Correzione errori di sintassi
Il compilatore genera
una lista di messaggi di somma.c
Programma
errore sorgente in C
Capire il messaggio
Identificare il punto
Compilatore C
errato nel programma
Trovare la soluzione
Correggere il Lista degli errori
programma
Generare una nuova
versione del file
29
sorgente
Compilazione Somma due numeri
Compiliamo il programma
somma.c
30
Compilare il primo programma
Verifica del programma
somma.exe
Programma
eseguibile
Visualizzazione
Immissione dati 32
risultati
Errori in esecuzione
33
Correzione errori di esecuzione
Lavoro da detective
Risalire dai sintomi alle cause del
malfunzionamento
Formulare delle ipotesi sulla causa dellerrore e
verificarle
Una volta trovato lerrore, cercare una soluzione
A seconda della gravit, occorrer modificare
Il sorgente C
Lalgoritmo risolutivo
Lapproccio generale
34
Correzione errori di esecuzione
somma.c
Programma
sorgente in C
Compilatore C
somma.exe
Programma
eseguibile
Visualizzazione
Immissione dati
risultati
35
Verifica Somma due numeri
36
Primo programma in C
Esercizi proposti
2
Esercizi proposti
Esercizio Equazione di primo grado
Data lequazione
ax+b=0
con a e b inseriti da tastiera, determinare il
valore di x che risolve lequazione
4
Analisi
5
Soluzione
primogrado.c
leggi a calcola
x = b/a
leggi b
stampa x
6
Esercizi proposti
Esercizio Calcolo di aree
8
Analisi
CALCOLO DI AREE
Immetti il valore di D: 2
9
Aree
D
D
A= D 2
aree.c
D D
H
10
D
Aree
D
D
A= D 2
aree.c
R A = R2
R=D
D 2
D D
H
11
D
Aree
D
D
A= D 2
aree.c
R A = R2
R=D
D 2
DH
A=
D D 2
H H = D sin (60) =
D = D sin ( 3)= D 3
2
12
Avvertenze
13
Esercizi proposti
Esercizio Somma minuti (1/2)
15
Esercizio Somma minuti (2/2)
16
Analisi
SOMMA MINUTI
Sessione di lavoro 1:
Numero di ore: 2
Numero di minuti: 45
Sessione di lavoro 2:
Numero di ore: 1
Numero di minuti: 30
17
Aritmetica dellorologio
Diciamo:
ore1, min1 le ore/minuti della prima sessione
ore2, min2 le ore/minuti della seconda sessione
oretot, mintot le ore/minuti totali
Non possibile semplicemente sommare ore e
minuti separatamente, in quanto min1+min2
potrebbe essere maggiore di 59
Bisogna tener conto del riporto nella somma dei
minuti
18
Soluzione
19
Soluzione
...
2
Suggerimenti
3
Materiale aggiuntivo
Sul CD-ROM
Testi e soluzioni degli esercizi trattati nei lucidi
Scheda sintetica
Esercizi risolti
Esercizi proposti
Esercizi proposti da altri libri di testo