Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
1
Lezione 9 – A.A. 2016/2017 Prof. Giovanni Acampora
Informatica Informatica - A.A Lezione 9 – A.A. 2016/2017 Prof. Giovanni Acampora
2
Introduzione alla programmazione in linguaggio C
Strutture condizionali Strutture iterative Informatica - A.A
3
Strutture condizionali
I costrutti usati per esprimere una decisione in C sono due: Il costrutto if - else ( e else-if) Il costrutto switch Informatica - A.A
4
Il costrutto if ....... double a, b, max_ab; .........
scanf(“%lf %lf”, &a, &b); if(a > b){ max_ab = a; printf(“Il massimo vale %f”, a); } Informatica - A.A
5
Il costrutto if –else (I)
if (a>b) { max_ab = a; printf(“Il massimo vale %f”,a); } else max_ab = b; printf(“Il massimo vale %f”,b); scanf(“%lf %lf”, &a, &b); Indentazione Informatica - A.A
6
Il costrutto else if Quando la scelta è fra più di due alternative il costrutto if-else può essere esteso utilizzando il costrutto else if : if (n>0) { printf(“n è positivo”); } else if (n=0) printf(“n è nullo”); else printf(“n è negativo”); Le alternative vengono esaminate in sequenza, e l’ultimo else (opzionale) corrisponde alla scelta “nessuna delle precedenti”. Informatica - A.A
7
Il costrutto switch (I)
Viene usato per una scelta multipla fra un insieme di costanti : switch (nBusta){ case 1: printf(“Hai scelto la busta numero 1”); break; case 2: printf(“Hai scelto la busta numero 2”); case 3: printf(“Hai scelto la busta numero 3”); default: printf(“Non hai scelto una busta valida”); } Informatica - A.A
8
Il costrutto switch (II)
scanf(“%c”,&carattere_letto); switch (carattere_letto){ case ‘a’: case ’e’ : case ‘i’ : case ‘o’: case ’u’: printf(“Hai scritto una vocale”); break; default: printf(“Hai scritto una consonante”); } Informatica - A.A
9
Strutture iterative L’ultimo elemento da considerare per poter implementare qualsiasi algoritmo sono le strutture iterative. In C esse sono, essenzialmente: Ciclo while Ciclo for Ciclo do-while Informatica - A.A
10
Ciclo while La condizione di controllo viene verificata prima di eseguire qualunque istruzione: il ciclo potrebbe non venire mai eseguito. somma = 0; i = 0; while(i <= 100){ somma = somma + i; i++; } printf(“\n Somma = %d\n”,somma); Informatica - A.A
11
Ciclo for La condizione di controllo viene verificata prima di eseguire qualunque istruzione: il ciclo potrebbe non venire mai eseguito. somma = 0; for(i = 0; i <= 100; i++){ somma = somma + i; } printf(“\nSomma = %d\n”,somma); Informatica - A.A
12
Ciclo do while La condizione di controllo viene verificata dopo che il ciclo è stato eseguito almeno una volta. do{ scanf(“%c”,&inputchar); printf(“Hai digitato %c\n”,inputchar); } while( inputchar !=‘q’ ) Informatica - A.A
13
break e continue Talvolta può essere utile uscire da un ciclo senza controllare, all’inizio o alla fine dell’iterazione, la condizione di terminazione. L’istruzione break provoca l’uscita incondizionata da un for, un while oppure un do, così come consente di uscire da uno switch. L’istruzione continue è simile al break ma forza l’inizio della successiva iterazione di un for, un while oppure un do: essa cioè provoca l’immediata esecuzione della parte di controllo del ciclo. Informatica - A.A
14
Esempio #include <stdio.h> int main(){ int i, k;
for(i = 0; ; i++){ printf(“\n Dammi un numero intero: ”); scanf(“%d”, &k); if(k == -1) break; printf(“\n %d”, k); } printf(“\nHai inserito %d numeri ”, i); return 0; Informatica - A.A
15
Esempio int main(){ int i, k, n = 0; for(i = 0; ; i++){
printf(“\n Dammi un numero intero: ”); scanf(“%d”, &k); if(k == 0){ printf(“\nZero non permesso\n”); continue; //ritorna alla testa del ciclo senza eseguire il resto del corpo } if(k == -1) break; //esce dal ciclo printf(“\n %d”, k); n++; printf(“\nHai inserito %d numeri ”, n); return 0; Informatica - A.A
16
Esempio #include <stdio.h> int main(){ int i, k, n = 0;
for(i = 0; ; i++){ printf(“\n Dammi un numero intero: ”); scanf(“%d”, &k); // if(k == 0) continue; if(k == -1) break; printf(“\n %d”, k); n++; } printf(“\nHai inserito %d numeri ”, n); return 0; Informatica - A.A
17
Esempio for(i = n-1; i >= 2; i--){ resto = n%i;
if(resto == 0) break; } if(i==2) printf(“%d è un numero primo”, n); else printf(“%d non è un numero primo”, n); Informatica - A.A
18
Esempio: area di un cerchio
/* programma per il calcolo dell’area di un cerchio */ #include<stdio.h> int main(){ float raggio, area; printf(“\n Dammi il raggio [cm]: ”); scanf(“%f”,&raggio); area = * raggio * raggio; printf(“\n Area = %f ”, area); return 0; } Informatica - A.A
19
Uso di una funzione function prototype o function declaration
#include<stdio.h> float CircleArea(float Radius); int main(){ float raggio, area; printf(“\n Dammi il raggio [cm]: ”); scanf(“%f”, &raggio); area = CircleArea(raggio); printf(“\n Area = %f ”, area); return 0; } float CircleArea(float Radius){ const float PI = ; float a; a = PI * Radius * Radius; return (a); function prototype o function declaration function definition Informatica - A.A
20
. . continua con Error Checking nel main
#include<stdio.h> float CircleArea(float Radius); int main(){ float raggio, area; printf(“\n Dammi il raggio [cm]: ”); scanf(“%f”, &raggio); if(raggio < 0) area = 0.; else area = CircleArea(raggio); printf(“\n Area = %f ”, area); return 0; } Informatica - A.A
21
. . continua con Error Checking nella funzione
float CircleArea(float Radius){ const float PI = ; float a; if( Radius < 0) return 0.; a = PI * Radius * Radius; return (a); } float CircleArea(float Radius){ const float PI = ; float a; a = ( Radius < 0. )? 0.: PI*Radius*Radius; return (a); } Informatica - A.A
22
Operatore Condizionale: ?:
espressione1 ? espressione2 : espressione 3; Viene prima valutata l’espressione1; se risulta vera, viene valutata l’espressione2 il cui valore diviene il valore della espressione condizionale. Se invece l’espressione1 risulta falsa, l’espressione3 viene valutata ed il suo valore diviene il valore dell’espressione condizionale. if(a > b) max = a; else max = b; max = (a > b)? a: b; Informatica - A.A
23
Area di diversi cerchi #include<stdio.h>
float CircleArea(float Radius); int main(){ int i, n; float raggio; printf(“\n Quanti cerchi? ”); scanf(“%d”,&n); for(i = 0 ; i < n ; i++){ printf(“\n Cerchio no. %d: Raggio ? “, i+1); scanf(“%f”,&raggio); printf(“\n Area = %f ”, CircleArea(raggio)); } return 0; Informatica - A.A
24
Area di un numero imprecisato di cerchi (I)
int main(){ int i; float raggio; printf(“\n Enter 0 to QUIT.”); printf(“\n Radius ? ”); scanf(“%f”, &raggio); for(i = 0 ; raggio != 0. ; i++){ printf(“\n Area = %f ”, CircleArea(raggio)); printf(“\n Radius ? “); scanf(“%f”,&raggio); } return 0; Informatica - A.A
25
Area di un numero imprecisato di cerchi (II)
int main(){ float raggio; printf(“\n Enter 0 to QUIT.”); printf(“\n Radius ? ”); scanf(“%f”, &raggio); while(raggio != 0){ printf(“\n Area = %f ”, CircleArea(raggio)); printf(“\n Radius ? “); scanf(“%f”,&raggio); } return 0; Informatica - A.A
26
. . . nota che while(raggio != 0) while(raggio)
Nel C, qualunque numero diverso da zero e’ interpretato come valore logico vero, e lo zero come valore logico falso. Le due espressioni seguenti sono pertanto equivalenti: while(raggio != 0) while(raggio) Informatica - A.A
27
Area di un numero imprecisato di cerchi (III)
int main(){ float raggio; printf(“\n Enter 0 to QUIT.”); do{ printf(“\n Radius ? “); scanf(“%f”, &raggio); printf(“\n Area = %f ”, CircleArea(raggio)); } while(raggio != 0) return 0; } Informatica - A.A
28
un’altra variante In alcuni casi e’ necessario conservare un insieme di valori “omogenei” calcolati in sequenza. Il C consente l’uso degli array (vettori): int main(){ int i = -1, n = 0; float raggio[100], area[100]; printf(“\n Enter 0 to QUIT.”); do{ i++; printf(“\n Radius ? “); scanf(“%f”, &raggio[i]); area[i] = CircleArea(raggio[i]); } while( raggio[i] != 0) Informatica - A.A
29
continua n = i; for(i = 0; i < n; i++){ printf(“\n Radius = %f, Area = %f”, raggio[i], area[i]); } return 0; Reminder: se un array e’ composto di n elementi, l’indice degli elementi dell’array corre da 0 a n-1. Attenzione: che succede se i > 99? E’ necessario includere anche un controllo sul numero massimo di cerchi: i non puo’ superare il valore 99!! Informatica - A.A
30
. . . un’altra variante con error checking
int main(){ int i = -1, n = 0; float raggio[100], area[100]; printf(“\n Enter 0 to QUIT.”); do{ i++; printf(“\n Radius ? “); scanf(“%f”, &raggio[i]); area[i] = CircleArea( raggio[i] ); } while( (raggio[i] != 0) && (i < 100) ) Il controllo sull’indice i non e’ pero’ comprensibile all’utente del programma (che non conosce il codice sorgente) Informatica - A.A
31
. . . un’altra variante con error checking
int main(){ int i = -1, n = 0; float raggio[100], area[100]; printf(“\n Enter 0 to QUIT.”); do{ i++; if(i > 99) { printf(“\nhai esaurito la memoria\n”); break; } printf(“\n Radius ? “); scanf(“%f”, &raggio[i]); area[i] = CircleArea(raggio[i]); } while( raggio[i] != 0) Informatica - A.A
32
Area di un numero imprecisato di rettangoli(I)
double RectArea( double w, double h); int main(){ double width, height; printf(“\n Enter 0 to QUIT.”); do{ printf(“\n Width, Height [cm] ? “); scanf(“%lf %lf”, &width, &height); printf(“\n Area = %lf ”, RectArea(width, height)); } while(width != 0) return 0; } Informatica - A.A
33
Che controlli si dovrebbero fare in questa funzione?
double RectArea( double w, double h ) { return w * h; } Che controlli si dovrebbero fare in questa funzione? Informatica - A.A
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.