Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoEzio Lelli Modificato 10 anni fa
1
21 marzo 2002 (ri-)Avvisi: Giovedi 28 marzo la lezione e sospesa. Nuovo indirizzo di e-mail: labinfo1@mat.uniroma2.it Spedire messaggi e esercizi solo qui!!!
2
La struttura di selezione multipla switch Formato switch ( variabile ){ case val-1 : azioni case val-2 : azioni …… case val-k : azioni default: azioni } val-1, val-2,…… val-k sono k valori di costanti intere per variabile
3
Sommario 1. Inizializzazione 2. Input dei dati 2.1 switch loop per aggiornare count 1/* Fig. 4.7: fig04_07.c 2 Counting letter grades */ 3#include 4 5int main() 6{6{ 7 int grade; 8 int aCount = 0, bCount = 0, cCount = 0, 9 dCount = 0, fCount = 0; 10 11 printf( "Enter the letter grades.\n" ); 12 printf( "Enter the EOF character to end input.\n" ); 13 14 while ( ( grade = getchar() ) != EOF ) { 15 16 switch ( grade ) { /* switch nested in while */ 17 18 case 'A': case 'a': /* grade was uppercase A */ 19 ++aCount; /* or lowercase a */ 20 break; 21 22 case 'B': case 'b': /* grade was uppercase B */ 23 ++bCount; /* or lowercase b */ 24 break; 25 26 case 'C': case 'c': /* grade was uppercase C */ 27 ++cCount; /* or lowercase c */ 28 break; 29 30 case 'D': case 'd': /* grade was uppercase D */ 31 ++dCount; /* or lowercase d */ 32 break;
4
Sommario 2.1 Use switch loop to update count 3. Print results 33 34 case 'F': case 'f': /* grade was uppercase F */ 35 ++fCount; /* or lowercase f */ 36 break; 37 38 case '\n': case' ': /* ignore these in input */ 39 break; 40 41 default: /* catch all other characters */ 42 printf( "Incorrect letter grade entered." ); 43 printf( " Enter a new grade.\n" ); 44 break; 45 } 46 } 47 48 printf( "\nTotals for each letter grade are:\n" ); 49 printf( "A: %d\n", aCount ); 50 printf( "B: %d\n", bCount ); 51 printf( "C: %d\n", cCount ); 52 printf( "D: %d\n", dCount ); 53 printf( "F: %d\n", fCount ); 54 55 return 0; 56}
5
Precisazione while ( ( grade = getchar() ) != EOF ) EOF e il carattere end-of-file. Dipende dal sistema operativo: MS-DOS ctrl-z Unix ctrl-d Valore numerico di EOF e solitamente –1 (comunque un valore negativo)
6
Le istruzioni break e continue break –Causa una uscita immediata da una struttura while, for, do/while o switch –Lesecuzione del programma continua con la prima istruzione dopo la struttura –Uso consueto dellistruzione break Uscire prima da un loop Saltare la parte rimanente della struttura switch
7
Sommario 1. Inizializzazione delle variabili 2. Loop 3. Print Output 1/* Fig. 4.12: fig04_12.c 2 Usare listruzione break in una structura for */ 3#include 4 5int main() 6{6{ 7 int x; 8 9 for ( x = 1; x <= 10; x++ ) { 10 11 if ( x == 5 ) 12 break; /* interrompe il ciclo solo 13 if x == 5 */ 14 15 printf( "%d ", x ); 16 } 17 18 printf( "\n Broke out of loop at x== %d\, x ); 19 return 0; 20} 1 2 3 4 Broke out of loop at x== 5
8
Le istruzioni break e continue continue –Salta le istruzioni restanti nel corpo di una struttura while, for, do/while Procede con literazione successiva nel loop –while, do/while La condizione di continuazione del ciclo e valutata immediatamente dopo che viene eseguita listruzione continue –for Viene eseguita lespressione di incremento, poi viene valutata la condizione di iterazione
9
Sommario Inizializzazione delle variabili Loop Print Output 1/* Fig. 4.12: fig04_12.c 2 Uso di continue in una struttura for */ 3#include 4 5int main() 6{6{ 7 int x; 8 9 for ( x = 1; x <= 10; x++ ) { 10 11 if ( x == 5 ) 12 continue; /* salta il codice restante del 13 ciclo solo if x == 5 */ 14 15 printf( "%d ", x ); 16 } 17 18 printf("\nUsed continue to skip printing value 5\n"); 19 return 0; 20} 1 2 3 4 6 7 8 9 10 Used continue to skip printing the value 5
10
Osservazioni su break e continue –break, continue violano le norme della programmazione strutturata, ma sono tollerate poiche sono piu efficienti (se usate bene!) delle corrispondenti tecniche strutturate….
11
Operatori Logici && (AND logico ) –Restituisce true se entrambe le condizioni sono true || (OR logico ) –Restituisce true se almeno una delle condizioni e true ! (NOT logico, negazione logica) –Inverte la verita/falsita della sua condizione –Operatore unario Molto utili come condizioni per i loop Espressione Risultato true && false false true || false true !false true
12
Confondere loperatore di uguaglianza (==) con loperatore di assegnamento (=) Errore pericoloso –Non causano generalmente errori di sintassi –Ogni espressione che produce un valore puo essere usata in una struttura di controllo –Valori Nonzero sono true, Valori zero sono false Esempio: if ( payCode == 4 ) printf( "You get a bonus!\n" ); –Controlla paycode, se e 4 allora viene dato un bonus
13
Confondere loperatore di uguaglianza (==) con loperatore di assegnamento (=) Se sostituiamo == con = if ( payCode = 4 ) printf( "You get a bonus!\n" ); –Questo assegna a paycode il valore 4 –4 e nonzero, dunque lespressione e true, e il bonus viene dato indipendentemente da quanto fosse il valore di paycode –Errore logico, non di sintassi
14
Programmazione Strutturata Tutti i programmi si possono dividere in tre parti: Sequenza - Selezione - if, if/else, o switch Iterazione - while, do/while, or for Ogni selezione si puo riscrivere come istruzione if, Ogni iterazione si puo riscrivere come istruzione while I programmi si possono ridurre a : –Sequenza –Struttura if (selezione) –Struttura while (iterazione) Le strutture di controllo si possono combinare solo in due modi: nidificazione (reg. 2) e accatastamento (reg.3)
15
Le funzioni Divide et impera –Costruire un programma da piccoli pezzi detti moduli –Ogni pezzo e maneggiabile piu facilmente dellintero problema.
16
Funzioni –Moduli di programmi in C –Programmi vengono scritti combinando funzioni definite dallutente e funzioni della libreria La libreria standard del C ha una grande varieta di funzioni Rende il lavoro del programmatore piu semplice…. … si evita di riinventare la ruota…
17
Funzioni Chiamate di funzioni –Specifica il nome della funzione e delle informazioni (gli argomenti) necessari per la sua esecuzione. –Esegue operazioni o manipolazioni –Restituisce dei risultati Una analogia –Il boss chiede alloperaio di svolgere un compito –Loperaio prende le informazioni necessarie, svolge il compito e riporta i risultati –Information hiding: il boss non conosce i dettagli
18
Funzioni della libreria matematica Per eseguire tutti i comuni calcoli matematici –#include Formato per la chiamata di funzioni –FunctionName (argument); Vari argomenti si scrivono separati da virgola –printf( "%.2f", sqrt( 900.0 ) ); Chiama la funzione sqrt, che calcola la radice quadrata del suo argomento Tutte le funzioni matematiche restituiscono un tipo double –Gli argomenti possono essere costanti, variabili o espressioni.
19
Funzioni Tutte le variabili dichiarate allinterno di funzioni sono variabili locali. –Note solo nella definizione della funzione Parametri –Comunicano informazioni tra funzioni
20
Definizione di funzioni Formato per definizione di funzioni tipo-restituito nome-funzione ( lista-parametri ) { dichiarazioni e istruzioni }
21
Definizione di funzioni –Tipo-restituito: tipo di dato del risultato (default int ) void – la funzione non restituisce nulla –Nome-funzione: qualunque nome di identificatore valido
22
Definizione di funzioni –Lista-parametri: dichiarazione dei parametri, separati da virgole che saranno ricevuti dalla funzione. Se non deve ricevere alcun valore uso void oppure () Ogni parametro deve essere specificato con il suo tipo (default int ) (float x, y) (float x,int y) (float x, float y) NO! SI!
23
Definizione di funzioni –Dichiarazioni e istruzioni: corpo della funzione (blocco) Si possono dichiarare variabili allinterno di blocchi (variabili locali) Non si puo dichiarare come variabile locale un parametro della funzione Non si puo definire una funzione dentro unaltra funzione
24
Definizione di funzioni –Ritorno del controllo Se nulla deve essere restituito –return; –o, si raggiunge semplicemente la parentesi } Se qualcosa deve essere restituito –return espressione ;
25
Sommario Prototipo Funzione (3 parametr) Input Chiamata funzione Definizione funzione Prototipi di funzione Function prototy pe Functio n nam e Paramet ers - what the funct ion takes in Return type - data type funct ion retur ns (defa ult int ) Used to valid ate funct ions Prototyp e only need ed if funct ion defin ition com es after use in prog ram int max imu m( int, int, int ); Tak e s i n 3 i n t s Ret u r n s a n i n t Promotion rules and convers ions Convert ing to lowe r types can lead to error s 1/* Fig. 5.4: fig05_04.c 2 trovare il massimo di tre interi */ 3#include 4 5int maximum( int, int, int ); /* prototipo 6 7int main() 8{8{ 9 int a, b, c; 10 11 printf( "Enter three integers: " ); 12 scanf( "%d%d%d", &a, &b, &c ); 13 printf("Maximum is: %d\n", maximum( a, b, c )); 14 15 return 0; 16} 17 18/* Definizione della funzione massimo */ 19int maximum( int x, int y, int z ) 20{ 21 int max = x; 22 23 if ( y > max ) 24 max = y; 25 26 if ( z > max ) 27 max = z; 28 29 return max; 30} funzione */
26
Prototipi di funzioni –Nome della funzione –Parametri ricevuti dalla funzione –Tipo restituito dalla funzione (default int ) –Si usano per validare le funzioni –Sono necessari solo se la definizione della funzione viene dopo il suo utilizzo nel programma int maximum( int, int, int ); Prende 3 int Restituisce int
27
Header File (File di intestazione) Header File –Contiene i prototipi delle funzioni di una certa libreria –,, etc –Si includono con #include #include Header file personalizzati –Creo file con i prototipi delle mie funzioni –Lo salvo come filename.h –Lo includo nei programmi con #include "filename.h" –Permette di riutilizzare delle funzioni fatte da noi
28
Generazione di numeri random funzione rand –Si trova in –Restituisce un numero "random" 0 e RAND_MAX (almeno 32767) i = rand(); Pseudorandom –Sequenza prefissata di numeri "random" –Stessa sequenza ogni volta che si chiama la funzione
29
Generazione di numeri random Scaling –Per avere un numero random tra number tra 1 e n 1 + ( rand() % n ) rand % n restituisce un numero tra 0 e n-1 1 + ( rand() % 6) // numero tra 1 e 6
30
Generazione di numeri random funzione srand –Si trova in –Prende un intero seed – salta in una locazione della sequenza "random srand( seed ); –srand( time( NULL ) ); //load time( NULL )- ora corrente espressa in sec.
31
Sommario 1. Dichiara la variabile seed 2. Input valore per seed 2.1 Usa srand per cambiare la sequenza random 2.2 Definisce Loop 3. Genera e da in output numeri random 1/* Fig. 5.9: fig05_09.c 2 Randomizing die-rolling program */ 3#include 4#include 5 6int main() 7{7{ 8 int i; 9 unsigned seed; 10 11 printf( "Enter seed: " ); 12 scanf( "%u", &seed ); 13 srand( seed ); 14 15 for ( i = 1; i <= 10; i++ ) { 16 printf( "%10d", 1 + ( rand() % 6 ) ); 17 18 if ( i % 5 == 0 ) 19 printf( "\n" ); 20 } 21 22 return 0; 23}
32
Sommario Output Enter seed: 867 2 4 6 1 6 1 1 3 6 2 Enter seed: 67 6 1 4 6 2 1 6 1 6 4 Enter seed: 67 6 1 4 6 2 1 6 1 6 4
33
Esercizi: Esercizio 4.33 Scrivere un programma che visualizzi una tabella contenente tutti i numeri romani in corrispondenza dei numeri interi decimali da 1 a 100.
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.