Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Fondamenti di informatica
Introduzione al linguaggio C
Introduzione
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
2
Alcune proprietà del C
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
• È un linguaggio imperativo
§ il programma è composto come un insieme di istruzioni (dette anche
direttive o comandi), ciascuna delle quali può essere pensata come un
“ordine” che viene impartito al calcolatore
• È un linguaggio dichiarativo
§ L’intenzione di utilizzare una variabile o una funzione deve essere
dichiarata a priori
• È un linguaggio strutturato
§ Fornisce i costrutti base per la definizione di sequenza, selezione ed
iterazione
• È un linguaggio case sensitive
§ Discrimina tra caratteri maiuscoli e minuscole
§ e.g., Main è diverso da main!
3
Struttura di un programma C
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
4
Hello world!
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
#include <stdio.h>
int main() {
printf("Hello World!");
return 0;
}
5
Hello world!
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
Parte
dichiarativa #include <stdio.h>
globale
In questo esempio la parte
Parte int main() { dichiarativa locale è vuota
dichiarativa
locale
printf("Hello World!");
Parte
esecutiva return 0;
} La parte esecutiva
contiene il vero e
proprio algoritmo
6
Hello world!
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
Parte
dichiarativa #include <stdio.h>
Possiamo aggiungere commenti dove si
globale vuole (testo tra /* */). Servono ai
Parte int main() { programmatori per rendere il codice più
dichiarativa leggibile; sono ignorati dal compilatore
locale
printf("Hello World!");
Parte
esecutiva return 0;
Possiamo mettere quanti a-capo e
spazi vogliamo perché vengono
} ignorati.
In realtà utilizzeremo una
convenzione detta “indentazione”
per rendere il codice leggibile
8
E ora che abbiamo il codice?
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
9
Perché linguaggio macchina?
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
10
Il flusso di sviluppo di un programma
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
Codifica del
Analisi Definizione programma
Del problema dell’algoritmo (linguaggio C)
Compilazione Esecuzione
del programma sul calcolatore
(linguaggio macchina)
11
Hello world!
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
int main() {
printf("Hello World!");
return 0;
}
• L’esecuzione del programma porta al seguente output sul
terminale:
Hello World!
12
La macchina astratta del C
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
BUS
CPU MEM.
Standard Input Standard Output
a
B La tastiera Il terminale
pluto
somma_1 video
...
14
La macchina astratta del C – Memoria
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
• Semplificazioni / idealizzazioni /
approssimazioni / astrazioni
§ Nessun limite al numero delle celle
§ Nessun limite ai valori numerici contenuti
15
La macchina astratta del C – Standard I/O
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
16
La macchina astratta del C – CPU
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
17
Organizzazione di un programma
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
18
Organizzazione di un programma – esempio
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
20
Direttiva include
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
• Le direttive:
§ sono istruzioni particolari rivolte al compilatore
§ iniziano con il carattere # e non terminano con ;
• La direttiva include indica l’intenzione di utilizzo di una
libreria esterna (cioè una collezione di funzioni, cioè
sottoprogrammi che svolgono un compito più complesso di
una singola istruzione)
• Esempio
§ #include <stdio.h> richiede la libreria di gestione degli input e
degli output (printf(), scanf(), …)
§ #include <math.h> richiede la libreria con le principali funzioni
matematiche (abs(), sin(), …)
• Una volta inclusa una libreria è possibile utilizzare tutte le
funzioni definite al loro interno
21
Constanti
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
22
Costanti
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
23
Dichiarazione di costanti
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
24
Direttiva #define
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
25
Il compilatore e le macro
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
27
main
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
28
Dichiarazione di variabili
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
29
Dichiarazione di variabili
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
• Esempi:
§ int raggio, circonferenza;
§ char carattere;
30
Dichiarazione di variabili
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
31
Perché dichiarare una variabile?
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
32
Tipi di dato
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
33
Tipi semplici built-in
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
char
• Rappresenta i caratteri in codifica ASCII (American Standard
Code for Information Interchange)
• Occupa 8 bit (1 byte)
• I caratteri sono rappresentati in memoria tramite un valore
numerico nell’intervallo da 0 a 255
• I valori di tipo char sono rappresentati nel codice di un
programma tra apici semplici: '1', 'a'
• Caratteri speciali sono rappresentati mediante una specifica
sequenza di due caratteri che inizia con \
§ '\n': a capo, '\t': tab
• Esempio:
char carattere1;
char carattere2, carattere3;
34
Tipi semplici built-in
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
TABELLA
ASCII
35
Tipi semplici built-in
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
int
• Rappresenta i numeri interi con segno
• I valori sono codificati internamente in complemento a due
• L’occupazione dipende dal tipo di architettura del calcolatore
• Nei calcolatori moderni occupa 32 bit (4 byte) e rappresenta i
valori da – 2147483648 a + 2147483647
• Esempio:
int n01;
int numero5, num5;
36
Tipi semplici built-in
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
float
• Rappresentano i razionali in virgola mobile
• Valori codificati mediante lo standard IEEE754 singola
precisione
• Occupa 32 bit (4 byte)
• Valori da -10E-38 a 10E+38
• Esempio:
float num7;
37
Tipi semplici built-in
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
double
• Rappresentano i razionali in virgola mobile
• Valori codificati mediante lo standard IEEE754 doppia
precisione
• Occupa 64 bit (8 byte)
• Valori da -10E-308 a 10E+308
• Esempio:
double base, altezza;
38
Parte esecutiva
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
Contiene le istruzioni da
eseguire: Parte #include <stdio.h>
• Istruzioni di dichiarativa
#define PI 3.14
globale
assegnamento (=)
• Istruzioni di Parte int main(){
input/output dichiarativa float r, a;
locale
• Strutture di controllo: scanf("%f", &r);
§ Condizionali (if-else) Parte a = r * r * PI;
§ Iterative, o cicli (while, esecutiva printf("%f", a);
do-while e for) return 0;
}
39
Sequenza – un esempio introduttivo
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
Inizio
Leggi(r)
Sequenza
a = r*r*3.14
Scrivi(a)
Fine
40
Istruzioni semplici e composte
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
41
Operatori
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
42
Assegnamento
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
43
Esecuzione degli assegnamenti
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
1. Valutazione dell’espressione
§ Il valore delle variabili che vi compaiono si trova memorizzato nelle
celle corrispondenti, e da lì è letto
2. Memorizzazione del risultato dell'espressione nella variabile
a sinistra del simbolo =
Operatori C Operazioni Precedenza
( ) Parentesi Valutate per prime. Se ci sono degli annidamenti, si
valuta prima la coppia più interna. Se ci sono più
coppie allo stesso livello, si valuta da sinistra a destra.
* , / , % Moltiplicazione, Valutate per seconde. Se ce ne sono diverse, si
Divisione, Modulo valutano da sinistra a destra.
+ , – Addizione, Valutate per terze. Se ce ne sono diverse, si valutano
Sottrazione da sinistra a destra.
= Assegnamento Valutate per ultime. Se ce ne sono diverse, si valutano
da destra a sinistra.
44
Funzioni di Ingresso e Uscita
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
45
Stampa su video
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
46
Stampa su video
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
FUNZIONAMENTO:
printf (stringa di controllo, elementi da stampare);
• Stampa i caratteri alfanumerici tra doppi apici e al posto dei
caratteri di conversioni stampa il valore dell’identificatore
corrispondente nella lista da stampare
• I caratteri di controllo stampa posizionano il cursore nella
posizione opportuna
47
Esempio
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
#include <stdio.h>
int main() {
int num1;
float num2;
char car1;
num1=1;
num2=0.2;
car1='r';
printf("intero: %d\nrazionale: %f\ncarattere: %c\n",
num1, num2, car1);
return 0; intero: 1
} razionale: 0.2
carattere: r
48
Ingresso da tastiera
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
49
Ingresso da tastiera
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
FUNZIONAMENTO
scanf(stringa controllo, lista di variabili);
• Ad ogni pressione di un tasto, la funzione visualizza su video
il carattere alfanumerico premuto
• La sequenza di tasti premuti deve terminare con la pressione
del tasto Invio
• La funzione assegna alle variabili il valore binario del
carattere letto
50
Esempio
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
#include <stdio.h>
int main() {
int num1;
float num2;
char car1;
scanf("%d %f %c", &num1, &num2, &car1);
printf("intero: %d\nrazionale: %f\ncarattere: %c\n",
num1, num2, car1);
return 0; 1 0.2 r
} intero: 1
razionale: 0.2
carattere: r
51
Sequenza – un esempio introduttivo
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA
52