2000 Prentice Hall, Inc. All rights reserved. Capitolo 2 (Deitel) Introduzione alla programmazione...

23
2000 Prentice Hall, Inc. All rights reserved. Capitolo 2 (Deitel) Introduzione alla programmazione in C Indice degli argomenti 2.1 - Introduzione 2.2 - Un semplice programma in C: visualizzare una linea di testo 2.3 - Un altro semplice programma in C: sommare due numeri interi 2.4 - Concetti di base sulla memoria 2.5 - L’aritmetica del C 2.6 - Prendere decisioni: operatori di uguaglianza e relazionali 2.7 - Parole chiave del C

Transcript of 2000 Prentice Hall, Inc. All rights reserved. Capitolo 2 (Deitel) Introduzione alla programmazione...

Page 1: 2000 Prentice Hall, Inc. All rights reserved. Capitolo 2 (Deitel) Introduzione alla programmazione in C Indice degli argomenti 2.1 - Introduzione 2.2 -

2000 Prentice Hall, Inc. All rights reserved.

Capitolo 2 (Deitel)Introduzione alla programmazione in C

Indice degli argomenti

2.1 - Introduzione2.2 - Un semplice programma in C: visualizzare una linea di testo2.3 - Un altro semplice programma in C: sommare due numeri interi2.4 - Concetti di base sulla memoria2.5 - L’aritmetica del C2.6 - Prendere decisioni: operatori di uguaglianza e relazionali2.7 - Parole chiave del C

Page 2: 2000 Prentice Hall, Inc. All rights reserved. Capitolo 2 (Deitel) Introduzione alla programmazione in C Indice degli argomenti 2.1 - Introduzione 2.2 -

2000 Prentice Hall, Inc. All rights reserved.

2.1 - Introduzione

• Il linguaggio di programmazione C– Offre allo sviluppatore un approccio “disciplinato” e strutturato alla

progettazione di un programma (programmazione strutturata) – Consente di creare programmi chiari, leggibili, semplici da testare e

“debuggare”, facili da modificare

• Concetto di “Programmazione strutturata”– Verrà approfondito nei prossimi capitoli (3 e 4)

– Sarà utilizzato in tutta la parte rimanente del corso

Page 3: 2000 Prentice Hall, Inc. All rights reserved. Capitolo 2 (Deitel) Introduzione alla programmazione in C Indice degli argomenti 2.1 - Introduzione 2.2 -

2000 Prentice Hall, Inc. All rights reserved.

2.2 - Un semplice programma in C: visualizzare una linea di testo (1/5)

• Commenti– Sono il testo racchiuso tra /* e */ , che è ignorato dal compilatore

– Servono a descrivere il codice che implementa il programma

– Un altro modo per scrivere i commenti è //:• In questo caso tutto il testo che segue // e sta nella stessa riga è un commento

Benvenuto nel mondo del C! OUTPUT

CODICE DEL

PROGRAMMA

1 /* Fig. 2.1: fig02_01.c2 Un primo programma in C */3 #include <stdio.h>45 int main(){6 printf( “Benvenuto nel mondo del C!\n" );7 return 0;8 }

Page 4: 2000 Prentice Hall, Inc. All rights reserved. Capitolo 2 (Deitel) Introduzione alla programmazione in C Indice degli argomenti 2.1 - Introduzione 2.2 -

2000 Prentice Hall, Inc. All rights reserved.

2.2 - Un semplice programma in C: visualizzare una linea di testo (2/5)

• #include <stdio.h>– Tutte le righe che iniziano con # sono direttive per il preprocessore

• Dicono al calcolatore di caricare il contenuto di un determinato file (i file .h contengono la definizioni di funzioni di libreria del C)

– <stdio.h> è la libreria che abilita le operazioni standard di input/output

• int main()– I programmi C contengono una o più funzioni, una sola delle quali deve

chiamarsi ”main”:è quella principale che richiama poi tutte le altre– Per indicare una funzione si scrive il nome della funzione seguito da ( ):

• Se la funzione riceve dei parametri di input, essi stanno tra le ( )• Se non ne ha, le parentesi sono vuote e lo si può indicare anche con (void)

– int significa che la funzione main restituisce (output) un valore intero– Le parentesi graffe identificano un blocco di istruzioni (o statement):

• Il corpo (blocco di istruzioni) di ogni funzione deve essere racchiuso { }• Le istruzioni vengono eseguite in ordine, dall’alto verso il basso

Page 5: 2000 Prentice Hall, Inc. All rights reserved. Capitolo 2 (Deitel) Introduzione alla programmazione in C Indice degli argomenti 2.1 - Introduzione 2.2 -

2000 Prentice Hall, Inc. All rights reserved.

2.2 - Un semplice programma in C: visualizzare una linea di testo (3/5)

• printf( “Benvenuto nel mondo del C!\n" );– L’intera riga rappresenta una tipica istruzione in C:

• Un’istruzione ordina al calcolatore di eseguire una determinata azione• Tutte le istruzioni devono terminare con un punto e virgola• Qui l’azione è stampare a video la sequenza di caratteri tra le “ “

– L’istruzione è costituita da una funzione di stampa a video formattata:• printf è una funzione inclusa nella libreria stdio.h per l’I/O • Visualizza tutto quello che gli viene passato come parametro, dentro le ( )

– \ è il carattere di escape:• \ toglie al carattere che lo segue il suo usuale significato • In generale \ serve ad indicare che la funzione printf dovrà fare qualcosa

diversa dall’ordinario, come dare una formattazione al testo visualizzato

• Qui \n indica il carattere speciale newline (nuova riga, vai a capo)• Ci sono anche altri caratteri di formattazione:

– \t crea i “rientri” del testo e \r posiziona il cursore a inizio riga corrente

– \a fa suonare i beeper del Pc,, \’,\”.\\ consentono la stampa di ‘,” e \

Page 6: 2000 Prentice Hall, Inc. All rights reserved. Capitolo 2 (Deitel) Introduzione alla programmazione in C Indice degli argomenti 2.1 - Introduzione 2.2 -

2000 Prentice Hall, Inc. All rights reserved.

2.2 - Un semplice programma in C: visualizzare una linea di testo (4/5)

• return 0;– E’ uno dei possibili modi per uscire da una funzione

– In questo caso, indica al S.O. che il programma è terminato regolarmente

– Per la sintassi C, va messo a fine main perché la funzione ritorna un int

• Parentesi graffa chiusa }– Indica che la fine del main è stata raggiunta, ovvero che la funzione non

contiene ulteriori istruzioni dopo la }, cosa che vale per tutte le funzioni

• Linker– Quando una funzione viene chiamata, il linker la localizza nella libreria

– Una volta trovata, la inserisce nel programma oggetto (traduzione del programma sorgente effettuata dal compilatore)

– Se invece il nome della funzione è scritto male, il linker segnalerà un errore perché non riesce a trovare la funzione nella libreria

Page 7: 2000 Prentice Hall, Inc. All rights reserved. Capitolo 2 (Deitel) Introduzione alla programmazione in C Indice degli argomenti 2.1 - Introduzione 2.2 -

2000 Prentice Hall, Inc. All rights reserved.

2.2 - Un semplice programma in C: visualizzare una linea di testo (5/5)

• Scrittura del codice– #include <stdio.h> int main(void) {printf(“Benvenuti nel mondo del C!\

n");return 0;}

– Anche scritto come sopra, il programma funziona correttamente ma è assolutamente illeggibile

– Se il codice di un programma è scritto in modo disordinato, diventa difficile scovare eventuali errori o modificarlo in un secondo momento

• Alcuni suggerimenti– Inserire i commenti

– Far rientrare (indent) il corpo della funzione di un livello (2/3 spazi)

– Scrivere una sola istruzione per ogni riga

Page 8: 2000 Prentice Hall, Inc. All rights reserved. Capitolo 2 (Deitel) Introduzione alla programmazione in C Indice degli argomenti 2.1 - Introduzione 2.2 -

2000 Prentice Hall, Inc. All rights reserved.

2.3 - Un altro semplice programma in C:

sommare due numeri interi (1/7)

Inserisci il primo intero45Inserisci il secondo intero72La somma è 117

1 /* Fig. 2.5: fig02_05.c Programma di addizione */

2 #include <stdio.h>

3

4 int main(){

5 int integer1, integer2, sum; /* dichiarazioni */

6

7 printf( “Inserisci il primo intero\n" ); /* prompt */

8 scanf( "%d", &integer1 ); /* legge un intero */

9 printf( “Inserisci il secondo intero\n" ); /* prompt */

10 scanf( "%d", &integer2 ); /* legge un intero */

11 sum = integer1 + integer2; /* assegnamento della somma*/

12 printf( “La somma è %d\n", sum ); /* visualizza la somma */

13 return 0; /* indica che il programma è terminato con successo */

14 }

1. Inizializzazione delle variabili

2. Input

3. Somma

4. Output

Visualizzazione del programma

Page 9: 2000 Prentice Hall, Inc. All rights reserved. Capitolo 2 (Deitel) Introduzione alla programmazione in C Indice degli argomenti 2.1 - Introduzione 2.2 -

2000 Prentice Hall, Inc. All rights reserved.

2.3 - Un altro semplice programma in C:

sommare due numeri interi (2/7)• Come prima

– Commenti, #include, <stdio.h> e main

• int integer1, integer2, sum;– Dichiarazione delle variabili

• Le variabili non sono altro che contenitori, cioè locazioni di memoria in cui un valore può essere immagazzinato

• Prima di essere usata, ogni variabile deve essere dichiarata (una ed una sola volta) con un nome univoco ed un tipo di dato e poi inizializzata

• Le dichiarazioni vanno messe sempre prima di ogni istruzione eseguibile, altrimenti si genera un errore di sintassi (di compilazione)

• Così il compilatore può stabilire subito lo spazio di memoria da allocare alle variabili e controllare che le operazioni tra variabili siano adatte al loro tipo

– Durante l’esecuzione del programma, ogni variabile ha un nome, un tipo ed un valore corrente assegnato

Page 10: 2000 Prentice Hall, Inc. All rights reserved. Capitolo 2 (Deitel) Introduzione alla programmazione in C Indice degli argomenti 2.1 - Introduzione 2.2 -

2000 Prentice Hall, Inc. All rights reserved.

2.3 - Un altro semplice programma in C:

sommare due numeri interi (3/7)• Tipi di dato

– Il tipo di una variabile indica quale tipo di valori può assumere il contenuto della variabile stessa • char indica che la variabile può contenere caratteri (es. a, b, C, $, -, ?)• int,short,long indicano che la variabile può contenere valori interi

(es. -1, 0, 21); la differenza tra i 3 tipi sta nel range di interi rappresentabili• float indica che la variabile può contenere numeri reali rappresentati in

virgola mobile a singola precisione (es. 3.14, 2.187, -5.39)• double indica che la variabile può contenere valori reali rappresentati in

virgola mobile a doppia precisione (es. 1.23456789101112)

• int integer1, integer2, sum– Sono i nomi delle variabili (identificatori)

• Gli identificatori sono composti da lettere, cifre (ma non possono iniziare con una cifra) e underscore ( _ )

• Ogni identificatore può essere composto al massimo da 31 caratteri

• Il C è case sensitive (fa distinzione tra maiuscole e minuscole)

Page 11: 2000 Prentice Hall, Inc. All rights reserved. Capitolo 2 (Deitel) Introduzione alla programmazione in C Indice degli argomenti 2.1 - Introduzione 2.2 -

2000 Prentice Hall, Inc. All rights reserved.

2.3 - Un altro semplice programma in C:

sommare due numeri interi (4/7)

Tipo Dimensione in byte Range di valori rappresentabili

char 1 (8 bit) Tutti i caratteri della tabella ASCII

int 2 (16 bit) Da -32.768 a +32.767

short (int) 2 (16 bit) Da -32.768 a +32.767

long (int) 4 (32 bit) Da -2.147.483.648 a +2.147.483.647

float 4 (32 bit) Da -3,4 x 10 a +3,4 x 10

double 8 (64 bit) Da -1,8 x 10 a +1,8 x 10

3838

308 308

Page 12: 2000 Prentice Hall, Inc. All rights reserved. Capitolo 2 (Deitel) Introduzione alla programmazione in C Indice degli argomenti 2.1 - Introduzione 2.2 -

2000 Prentice Hall, Inc. All rights reserved.

2.3 - Un altro semplice programma in C: sommare due numeri interi (5/7)

• scanf( "%d", &integer1 );– Funzione C che riceve un valore in input dall’utente

• scanf prende i dati dallo standard input (di solito la tastiera)

• E’ un’altra delle funzioni contenute nella libreria stdio.h per l’I/O

• L’effettivo inserimento di un valore è confermato dall’utente col tasto INVIO

– La scanf prevede due parametri/argomenti:• %d è una specifica di conversione che indica il tipo del dato da inserire; in

questo caso deve essere un intero (%c per i caratteri, %f per i float, ecc..)

• &integer1 indica la locazione di memoria in cui salvare la variabile

• integer1 è il nome della variabile che assume il valore in input

• & si chiama “operatore indirizzo” e crea confusione inizialmente, per ora

occorre solo ricordare di anteporlo al nome della variabile nelle scanf

– In questo esempio l’utente risponderà alla scanf digitando un numero e premendo il tasto INVIO (return)

Page 13: 2000 Prentice Hall, Inc. All rights reserved. Capitolo 2 (Deitel) Introduzione alla programmazione in C Indice degli argomenti 2.1 - Introduzione 2.2 -

2000 Prentice Hall, Inc. All rights reserved.

2.3 - Un altro semplice programma in C: sommare due numeri interi (6/7)

• = (operatore di assegnamento)– E’ un operatore binario che assegna un valore ad una variabile

– Operatore binario significa che necessita di due operandi, come anche l’operatore +: il primo sta sempre alla sua sinistra, il secondo a destra

sum = variable1 + variable2;– La variabile che riceve il valore è sulla sinistra mentre il valore assegnato

è dato dall’espressione sulla destra (scrivere 3=a; dà errore !!!)

• printf( “La somma è %d\n", sum );– Funzione duale della scanf (rispetto a prima, qui ha 2 parametri):

• %d indica il tipo del dato da visualizzare, che qui è un intero • sum specifica la variabile da cui prendere il valore da visualizzare

• Il valore della variabile verrà scritto nella stringa al posto di %d

– Volendo, i calcoli possono essere eseguiti anche direttamente all’interno dell’istruzione printf, ottenendo un output equivalente

printf( “La sommma è %d\n", integer1 + integer2 );

Page 14: 2000 Prentice Hall, Inc. All rights reserved. Capitolo 2 (Deitel) Introduzione alla programmazione in C Indice degli argomenti 2.1 - Introduzione 2.2 -

2000 Prentice Hall, Inc. All rights reserved.

2.3 - Un altro semplice programma in C: sommare due numeri interi (7/7)

• Specifiche di conversione– Possono essere usate sia con printf che con scanf

Stringa di controllo Cosa viene stampato

%d, %i Un intero decimale

%c Un carattere

%s Una stringa di caratteri

%o Un numero ottale

%x, %X Un numero esadecimale

%u Un intero senza segno

%f Un numero reale (con virgola)

%e, %E Un numero in formato esponenziale

%% Il carattere %

Page 15: 2000 Prentice Hall, Inc. All rights reserved. Capitolo 2 (Deitel) Introduzione alla programmazione in C Indice degli argomenti 2.1 - Introduzione 2.2 -

2000 Prentice Hall, Inc. All rights reserved.

2.4 - Concetti di base sulla memoria (1/2)

• Variabili – La memoria del calcolatore è un insieme di locazioni (celle) contigue

– Ogni variabile ha un nome, un tipo, una dimensione ed un valore• La dimensione è determinata dal tipo

• I nomi delle variabili corrispondono a locazioni nella memoria del calcolatore

– Quando si assegna un nuovo valore ad una variabile, ad esempio con una scanf, esso rimpiazza quello vecchio, che è quindi perso per sempre

– Leggere il contenuto di una variabile in memoria non ne altera mai il valore

• Una rappresentazione visiva:

integer1 45

Page 16: 2000 Prentice Hall, Inc. All rights reserved. Capitolo 2 (Deitel) Introduzione alla programmazione in C Indice degli argomenti 2.1 - Introduzione 2.2 -

2000 Prentice Hall, Inc. All rights reserved.

2.4 - Concetti di base sulla memoria (2/2)

1 /* Programma di stampa dell’input inserito*/

2 #include <stdio.h>

3

4 int main(void){

5 int i;

6

7 printf( “Inserisci un numero intero\n" );

8 scanf( "%d", &i );

9 printf( “Il valore inserito è %d\n“ , i );

10 return 0;

11 }

Inserisci un intero-33Il valore inserito è -33

-33

102

103

104

105

106

107

108

109

i

• Azione di printf/scanf in memoria– Quando si esegue il programma, la variabile i viene associata all’indirizzo di

memoria con indice 104; quindi nel corso dell’esecuzione, i rappresenterà l’indirizzo di memoria 104 ed è li che il valore di input -33 verrà salvato

Page 17: 2000 Prentice Hall, Inc. All rights reserved. Capitolo 2 (Deitel) Introduzione alla programmazione in C Indice degli argomenti 2.1 - Introduzione 2.2 -

2000 Prentice Hall, Inc. All rights reserved.

2.5 - L’aritmetica del C (1/2)

• In quasi tutti i programmi sono presenti calcoli aritmetici– Si usa il carattere * per la moltiplicazione e / per la divisione

– La divisione tra interi tronca sempre la parte decimale7 / 5 darà come risultato 1

– L’operatore “modulo” (%) restituisce il resto di una divisione 7 % 5 darà come risultato 2 (se gli operandi non sono interi, ho errore sintattico)

• Precedenze tra gli operatori– Alcuni operatori aritmetici hanno la precedenza rispetto ad altri (per

esempio, la moltiplicazione viene eseguita prima dell’addizione)

• Se si vuole evadere il comportamento standard, le priorità tra operatori possono essere modificate usando le parentesi dove serve

– Esempio: si vuole calcolare la media di tre variabili a, b e c

• Non si deve scrivere: a + b + c / 3 (errore logico)

• Si scrive: (a + b + c ) / 3

Page 18: 2000 Prentice Hall, Inc. All rights reserved. Capitolo 2 (Deitel) Introduzione alla programmazione in C Indice degli argomenti 2.1 - Introduzione 2.2 -

2000 Prentice Hall, Inc. All rights reserved.

2.5 - L’aritmetica del C (2/2)

• Operatori aritmetici

• Regole di precedenza

Operazione in C Operatore aritmetico Espressione in C

Addizione + f + 7

Sottrazione - p – c

Moltiplicazione * b * m

Divisione / x / y

Modulo % r % s

Operatore Operazione Ordine di valutazione (precedenza)

( ) Parentesi Sono valutate per prime. Se sono nidificate, sono valutate per prime le espressioni nella coppia di ( ) più interna.

Nel caso che ci siano più coppie di parentesi allo stesso livello (non nidificate), queste saranno valutate da sinistra a destra.

*, / , % Moltiplicazione, Divisione, Modulo

Sono valutate per seconde. Nel caso in cui ce ne siano molte, sono valutate in ordine da sinistra a destra.

+ . - Addizione, Sottrazione

Sono valutate per ultime. Nel caso in cui ce ne siano molte, sono valutate in ordine da sinistra a destra.

Page 19: 2000 Prentice Hall, Inc. All rights reserved. Capitolo 2 (Deitel) Introduzione alla programmazione in C Indice degli argomenti 2.1 - Introduzione 2.2 -

2000 Prentice Hall, Inc. All rights reserved.

2.6 - Prendere decisioni: operatori di uguaglianza e relazionali

(1/4)• Le possibili istruzioni eseguibili in C servono a:

– Compiere azioni (calcoli, input/output di dati)– Prendere decisioni

• Si può ad esempio voler stampare a video "promosso" o “bocciato" in base al voto di un esame che viene immesso come input

• Struttura di controllo if – In questo capitolo la vediamo nella sua versione più semplice, verrà poi

meglio approfondita nei capitoli successivi– Se una condizione è soddisfatta, allora il blocco di istruzioni

all’interno del corpo della struttura if viene eseguito• 0 corrisponde a falso, diverso da zero a vero (non esiste il “tipo booleano”)

– Al termine della struttura if, riprende l’esecuzione del programma lineare

• Per creare condizioni si usano:– Operatori relazionali (di confronto)– Operatori logici, che vedremo nel prossimo capitolo

Page 20: 2000 Prentice Hall, Inc. All rights reserved. Capitolo 2 (Deitel) Introduzione alla programmazione in C Indice degli argomenti 2.1 - Introduzione 2.2 -

2000 Prentice Hall, Inc. All rights reserved.

2.6 - Prendere delle decisioni: operatori di uguaglianza e relazionali

(2/4)

Operatori di uguaglianza e relazionali

Operatori di uguaglianza e relazionali in una condizione C

Significato della condizione in C

Operatori di uguaglianza

= if (x == y) Se x è uguale a y …

≠ if (x != y) Se x è diverso da y …

Operatori relazionali

> if (x > y) Se x è maggiore di y …

< if (x < y) Se x è minore di y …

≥ if (x >= y) Se x è maggiore o uguale a y …

≤ if (x <= y) Se x è minore o uguale a y …

• Operatori di uguaglianza e relazionali

Page 21: 2000 Prentice Hall, Inc. All rights reserved. Capitolo 2 (Deitel) Introduzione alla programmazione in C Indice degli argomenti 2.1 - Introduzione 2.2 -

2000 Prentice Hall, Inc. All rights reserved.

1 /* Fig. 2.13: fig02_13.c

2 Usare le strutture if, operatori relazionali e di uguaglianza */

3 #include <stdio.h>

4

5 int main(){

6 int num1, num2;

7

8 printf( “Inserisci due numeri interi e ti dirò\n" );

9 printf( “quali relazioni soddisfano: " );

10 scanf( "%d%d", &num1, &num2 ); /* legge due interi */

11

12 if ( num1 == num2 )

13 printf( "%d è uguale a %d\n", num1, num2 );

14

15 if ( num1 != num2 )

16 printf( "%d è diverso da %d\n", num1, num2 );

17

18 if ( num1 < num2 )

19 printf( "%d è minore di %d\n", num1, num2 );

20

2.6 - Prendere delle decisioni: operatori di uguaglianza e relazionali

(3/4)

1. Dichiarazione variabili

2. Input

3 Struttura If

4. Visualizzazione

5. Uscita dal main

Page 22: 2000 Prentice Hall, Inc. All rights reserved. Capitolo 2 (Deitel) Introduzione alla programmazione in C Indice degli argomenti 2.1 - Introduzione 2.2 -

2000 Prentice Hall, Inc. All rights reserved.

21 if ( num1 > num2 )

22 printf( "%d è maggiore di %d\n", num1, num2 );

23

24 if ( num1 <= num2 )

25 printf( "%d è minore o uguale di %d\n", num1, num2 ); 26

27 if ( num1 >= num2 )

28 printf( "%d è maggiore o uguale di %d\n", num1, num2 );

29

30 return 0; /* indica che il programma è terminato con successo*/

31 }

2.6 - Prendere delle decisioni: operatori di uguaglianza e relazionali

(4/4)

Inserisci due numeri interi e ti dirò quali relazioni soddisfano: 3 73 è diverso da 73 è minore di 73 è minore o uguale di 7

Inserisci due numeri interi e ti dirò quali relazioni soddisfano : 22 1222 è diverso da 1222 è maggiore di 1222 è maggiore o uguale di 12

Visualizzazione del programmain due esecuzionisuccessive

Page 23: 2000 Prentice Hall, Inc. All rights reserved. Capitolo 2 (Deitel) Introduzione alla programmazione in C Indice degli argomenti 2.1 - Introduzione 2.2 -

2000 Prentice Hall, Inc. All rights reserved.

2.7 - Parole chiave del C

• Parole chiave– Sono parole speciali riservate del C

– Non possono mai essere utilizzate come identificatori/nomi di variabili

Parole chiave

auto double int struct

break else long switch

case enum register typedef

char extern return union

const float short unsigned

continue for signed void

default goto sizeof volatile

do if static while