47 Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio
C - Strutture di controllo
Sequenza o blocco
{
<istruzioni>
}
{ printf("Immetti un numero intero: ");
scanf("%d", &i);
a = i * 4 + b - c;
printf("%d", a);
} Esempio:
C - Strutture di controllo
Selezione
if (<condizione>)
<istruzione>;
se <condizione> è vera è eseguita <istruzione>
dove <istruzione> è formata da 1 sola istruzione altra forma:
if (<condizione>) {
<istruzioni>;
}
se <condizione> è vera sono eseguite le <istruzioni>
dove <istruzioni> è più di 1 istruzione
N.B. < condizione> è un’espressione di tipo intero (in C non esiste il tipo logico) ed essa è falsa se ha un valore uguale a zero
49 Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio
………
if (i<100) {
a = b - i;
printf(”%f”, a);
} ………
C - Strutture di controllo
Esempi : Selezione
………
if (a>100)
printf(”%f”, a);
………
#include<stdio.h>
main ( )
/* questo programma calcola l’area di un rettangolo */
{
float base, altezza, area;
printf ("immetti base \n");
scanf ("%f" , &base);
printf("immetti altezza \n");
scanf("%f" , &altezza);
if ((base > 0) && (altezza > 0)) { area = base * altezza;
printf("Area= %f \n", area);
} }
Un semplice programma esempio
Modificare il seguente programma C per il calcolo dell’area di un rettangolo
per verificare il rispetto delle precondizioni ...
51 Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio
#include<stdio.h>
main ( )
/* questo programma calcola l’area di un rettangolo */
{
float base, altezza, area;
printf ("immetti base \n");
scanf ("%f" , &base);
printf("immetti altezza \n");
scanf("%f" , &altezza);
if ((base > 0) && (altezza > 0)) { area = base * altezza;
printf("Area= %f \n", area);
}
if ((base <= 0) || (altezza <= 0))
printf("Errore: base e/o altezza non maggiori di zero \n");
}
Un semplice programma esempio
... il programma C modificato con l’aggiunta di un messaggio di errore...
Programma esempio in C
#include<stdio.h>
main ( )
{ // calcola il volume di un parallelepipedo float LBase, ABase, H, Area_Base, Volume;
printf ("immetti valore della lunghezza di base \n");
scanf ("%f" , &LBase);
printf("immetti valore altezza di base \n");
scanf("%f" , &ABase);
printf("immetti valore altezza parallelepipedo\n");
scanf("%f" , &H);
Area_Base = LBase* ABase;
Volume=Area_Base*H;
printf ("Volume= %f \n",Volume);
}
Modificare il seguente programma C del calcolo del volume di un
parallelepipedo per verificare il rispetto delle precondizioni ...
53 Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio
#include<stdio.h>
main ( )
{ // programma per il calcolo del volume di un parallelepipedo float LBase, ABase, H, Area_Base, Volume;
printf ("immetti valore della lunghezza di base \n");
scanf ("%f" , &LBase);
printf("immetti valore altezza di base \n");
scanf("%f" , &ABase);
printf("immetti valore altezza parallelepipedo\n");
scanf("%f" , &H);
if ((LBase>0)&&(ABase>0)&&(H>0)) {Area_Base = LBase* ABase;
Volume=Area_Base*H;
printf ("Volume = %f \n",Volume);
}
if ((LBase<=0)||(ABase<=0)||(H<=0))
printf("\nErrore:almeno una dimensione non maggiore di zero\n");
}
Programma esempio in C
... il programma C del calcolo del volume del parallelepipedo modificato per verificare il rispetto delle precondizioni e visualizzazione di un messaggio di errore ...
#include<stdio.h>
main ( )
{ // calcola la capacità in hl di un tino
float Diametro, Capacita, Altezza, Area_Base, Volume;
printf ("immetti valore lunghezza del diametro (in dm)\n");
scanf ("%f" , &Diametro);
printf("immetti valore altezza del cilindro (in dm) \n");
scanf("%f" , &Altezza);
Area_Base = (Diametro/2)*(Diametro/2)* 3.14;
Volume=Area_Base*Altezza;
Capacita = Volume/100;
printf (" Capacita tino ettolitri = %f \n",Capacita);
}
Programma esempio in C
... Modificare il programma C del calcolo della capacità di un tino cilindrico per verificare il rispetto delle precondizioni ...
55 Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio
#include<stdio.h>
main ( )
{ // calcola la capacità in hl di un tino
float Diametro, Capacita, Altezza, Area_Base, Volume;
printf ("immetti valore lunghezza del diametro (in dm)\n");
scanf ("%f" , &Diametro);
printf("immetti valore altezza del cilindro (in dm) \n");
scanf("%f" , &Altezza);
if ((Diametro>0)&&(Altezza>0))
{ Area_Base = (Diametro/2)*(Diametro/2)* 3.14;
Volume=Area_Base*Altezza;
Capacita = Volume/100;
printf (" Capacita tino ettolitri = %f \n",Capacita);}
if ((Diametro>0)||(Altezza>0))
printf("\nErrore:almeno una dimensione non maggiore di zero\n");
}
Programma esempio in C
... il programma C del calcolo della capacità di un tino cilindrico modificato per verificare il rispetto delle precondizioni ...
C - Strutture di controllo
Selezione
if (<condizione>)
<istruzione1>;
else
<istruzione2>;
se <condizione> è vera è eseguita <istruzione1> (è 1 sola istruzione) altrimenti, se <condizione> è falsa, è eseguita <istruzione2> (è 1 sola istruzione)
57 Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio
C - Strutture di controllo
Selezione altra forma:
if (<condizione>) {
<istruzioni1>;
} else {
<istruzioni2>;
}
se <condizione> è vera sono eseguite le <istruzioni1>
altrimenti se, <condizione> è falsa, sono eseguite le <istruzioni2>
dove <istruzioni1> e <istruzioni1> sono formate da più di 1 istruzione
C - Strutture di controllo
Esempio : Selezione
………
if (numero > 1000) {
a = b * numero;
printf(”%f”, a);
} else
c = b - numero;
………
59 Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio
Program area_rettangolo;
// questo programma calcola l’area di un //
// rettangolo
FLOAT base, altezza, area;
begin
write (“immetti base”);
read (“%f” base);
write (“immetti altezza “);
read (“%f” altezza);
if ((base > 0) and (altezza > 0)) then begin
area = base * altezza;
write (“Area= “, “%f” area);
end else
write (“Errore: base o altezza = <0”);
endif end.
#include<stdio.h>
main ( )
/* questo programma calcola l’area di un rettangolo */
{
float base, altezza, area;
printf (“immetti base \n”);
scanf (“%f” , &base);
printf(“immetti altezza \n“);
scanf(“%f” , &altezza);
if ((base > 0) && (altezza > 0)) {
area = base * altezza;
printf(“Area= %f \n”, area);
} else
printf(“Errore: base o altezza = <0 \n”);
}
Un semplice programma esempio
LDP C
#include<stdio.h>
main ( )
/* questo programma calcola l’area di un rettangolo */
{
float base, altezza, area;
printf (“immetti base \n”);
scanf (“%f” , &base);
printf(“immetti altezza \n“);
scanf(“%f” , &altezza);
if ((base > 0) && (altezza > 0)) {
area = base * altezza;
printf(“Area= %f \n”, area);
} else
printf(“Errore: base o altezza = <0 \n”);
}
Un semplice programma esempio
61 Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio
#include<stdio.h>
main ( )
/* questo programma calcola l’area di un rettangolo */
{
float base, altezza, area;
printf (“immetti base \n”);
scanf (“%f” , &base);
printf(“immetti altezza \n“);
scanf(“%f” , &altezza);
if ((base > 0) && (altezza > 0)) {
area = base * altezza;
printf(“Area= %f \n”, area);
} else
printf(“Errore: base e/o altezza = <0 \n”);
}
… if ( ) … … if ( ) … else …
#include<stdio.h>
main ( )
/* questo programma calcola l’area di un rettangolo */
{
float base, altezza, area;
printf ("immetti base \n");
scanf ("%f" , &base);
printf("immetti altezza \n");
scanf("%f" , &altezza);
if ((base > 0) && (altezza > 0)) {
area = base * altezza;
printf("Area= %f \n", area);
}
if ((base <= 0)||(altezza <= 0)) printf("Errore: base e/o altezza =<0 \n");
}
… confronto tra le due versioni …
Selezione a più vie in C Struttura switch in C:
switch (<espressione>) {
case c1:
S1;
break;
case c2:
S2;
break;
…
case cN:
Sn;
break;
[ default: Sdefault; break;
] }
semantica
Valuta valore <espressione>
caso valore c1 esegui S1; esci dalla struttura switch (break);
caso valore c2 esegui S2; esci dalla struttura switch (break);
…
caso valore cN esegui Sn; esci dalla struttura switch (break);
[caso valore diverso da c1 ,..., cN )
esegui Sdefault; esci dalla struttura switch (break);
] …. (è opzionale)
N.B. :break provoca l’uscita immediata dalla struttura switch
63 Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio
#include<stdio.h>
main ( )
/* questo programma stampa da 1 a 3 stelle o un ! */
{ ...
scanf("%d", &num);
switch (num) {
case 1: {printf("*\n"); break;}
case 2: {printf("**\n"); break;}
case 3: {printf("***\n"); break;}
default: {printf("!\n"); break;}
} }
Esempio: stampa da 1, 2, o 3 stelle in base al numero (compreso tra 1 e 3) immesso , altrimenti stampa un ‘!’
Selezione a più vie in C Struttura switch in C:
#include<stdio.h>
main ( )
/* questo programma stampa da 1 a 3 stelle o un ! */
{ ...
scanf("%d", &num);
if(num==1) printf("*\n");
else
if(num==2) printf("**\n");
else
if(num==3) printf("***\n");
else
printf("!\n");
Esempio: stampa da 1, 2, o 3 stelle in base al numero (compreso tra 1 e 3) immesso , altrimenti stampa un ‘!’
Selezione a più vie in C
La struttura switch può essere sostituita con una serie di strutture if else if
65 Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio
#include<stdio.h>
main ( )
/* questo programma stampa da 1 a 3 stelle o un ! */
{ ...
scanf("%d", &num);
if(num==1) printf("*\n");
else
if(num==2)
printf("**\n");
else
if(num==3)
printf("***\n");
else
printf("!\n");
}
Selezione a più vie in C
#include<stdio.h>
main ( )
/* questo programma stampa da 1 a 3 stelle o un ! */
{ ...
scanf("%d", &num);
switch (num) {
case 1:{printf("*\n");
break;}
case 2: {printf("**\n");
break;}
case 3: {printf("***\n");
break;}
default: {printf("!\n");
break;}
} }
Esercizio:
Scrivere un programma che letto un carattere in ingresso stampa un messaggio indicante se il carattere immesso è una lettera minuscola o maiuscola
… LPD …
// stampa se il carattere immesso è una cifra o una lettera minuscola o maiuscola
…..
char c;
read(“%c”, c);
switch ( c ) begin
case '0' : case '1' : case ’2' : case ’3' : case ’4' : case ’5' : case ’6' : case ’7' : case ’8' : case '9' : write( ‘Cifra ‘); break;
case 'a' : ...… : case 'z' : write( ‘ Lettera minuscola ‘); break;
case 'A' : ...… :case 'Z' : write( ‘ Lettera maiuscola ‘ ); break;
default : write( ‘ Altro Carattere ‘);
end
Selezione: switch
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 67
Program cifra_Lettera;
// stampa se il carattere immesso è una cifra o una lettera minuscola o maiuscola
char c;
begin read(“%c”, c);
if ((c >= ‘0’) and (c <= ‘9’)) then
write ( ‘Cifra’);
else
if ((c >= ‘a’) and (c <= ‘z’)) then
write( ‘ Lettera minuscola‘);
else
if (c >= ‘A’ and c <= ‘Z’) then
write( ‘ Lettera maiuscola ‘ );
else
write( ‘ Altro Carattere\n ‘);
endif endif endif end.
Soluzione con if then else if LPD
La struttura switch può essere sostituita con una serie di strutture if else if
#include <stdio.h>
main()
{// stampa se il carattere immesso è una cifra o una lettera minuscola o maiuscola char c;
scanf(“%c”, &c);
if ((c >= ‘0’) && (c <= ‘9’)) printf( "Cifra \n”);
else
if ((c >= ‘a’) && (c <= ‘z’))
printf( ‘ Lettera minuscola\n ‘);
else
if (c >= ‘A’ && c <= ‘Z’)
printf( ‘ Lettera maiuscola \n‘ );
else
printf( ‘ Altro Carattere\n ‘);
}
Soluzione con if else if in C
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 69
#include <stdio.h>
main() {
// stampa se il carattere immesso è una cifra o una lettera minuscola o maiuscola char c;
scanf(“%c”, c);
if ((c >= ‘0’) && (c <= ‘9’)) printf( ‘Cifra\n ‘);
else if ((c >= ‘a’) && (c <= ‘z’))
{ printf( ‘ Lettera minuscola\n ‘);
}
else if (c >= ‘A’ && c <= ‘Z’)
{ printf( ‘ Lettera maiuscola\n ‘ );
}
else printf( ‘ Altro Carattere\n ‘);
}
Soluzione con if else if
H
Lettera maiuscola
Schermo del video l’utente digita H
c = H
FALSO
FALSO
Vero