58
Esercizio Esercizio
Scrivere un programma che legge prima tre caratteri e poi li stampa in ordine inverso.
Esempio:
Se leggo CDE stampa:EDC
59
Soluzione Soluzione
#include<stdio.h>
main() {
char x, y, z;
printf("Digita tre caratteri: ");
scanf("%c%c%c", &x, &y, &z);
printf("Hai digitato (ordine inverso): ");
printf("%c%c%c", z, y, x);
}
60
Esercizio Esercizio
Scrivere un programma che legge prima un carattere e poi stampa il carattere che lo segue e quello che lo precede
Esempio:
Se leggo D stampa: E C
Soluzione Soluzione
#include<stdio.h>
main() {
char x;
printf("Digita un carattere: ");
scanf("%c", &x);
x=x+1;
printf("Il succ = %c\n", x);
x=x-2;
62
Operatori di incremento e Operatori di incremento e decremento
decremento
63
Operatori di incremento e decremento Operatori di incremento e decremento Operatori unari
++ aggiunge uno -- sottrae uno
x++ equivale a x=x+1
x-- equivale a x=x-1
64
Operatori di incremento e decremento Operatori di incremento e decremento Operatori
Operatori postfissi postfissi
x++; prima usa x, poi incrementala
Operatori prefissi Operatori prefissi
++x; prima incrementa x, poi usala
Operatori di incremento e decremento Operatori di incremento e decremento
La variabile viene comunque incrementata
Attenzione: quando compaiono in istruzioni meno semplici
x++; //equivale a x=x+1;
++x; //equivale a x=x+1;
y=x++; //equivale a y=x; x=x+1;
y=++x; //equivale a x=x+1; y=x;
66
Operatori di incremento e decremento Operatori di incremento e decremento int n, m=0;
n=m++;
n vale 0 m vale 1
int n, m=0;
n=++m;
n vale 1 m vale 1
int n, m=0;
n=m=m+1; //(n=(m=m+1));
n vale 1 m vale 1
67
Costanti
Costanti
68
Perché usare costanti?
Perché usare costanti?
Evitare di scrivere più volte in un programma un'espressione che rappresenta un numero,
per esempio quando è molto complicata, o per garantire che non ci siano difformità tra le varie occorrenze
Migliorare la leggibilità dei programmi,
per esempio usare sempre una costante per pigreco
Riutilizzare i programmi
per esempio un programma che manipola matrici quadrate di dimensione 100 può essere facilmente riutilizzato per le matrici di dimensione 200, se tale dimensione è
rappresentata da una costante
#define
#define Sintassi Sintassi
#define Nome costante
Semantica Semantica
Tutte le occorrenze di Nome (purché non siano racchiuse tra apici e non facciano parte di un’altra stringa) vengono rimpiazzate con costante
70
Nota Nota
Nomi delle costanti scritti con caratteri maiuscoli (per convenzione)
Dopo alla fine #define non serve il ;
71
Esempio Esempio
#define SIZE 10
int i=SIZE;
Viene tradotto dal preprocessore preprocessore in
int i=10;
72
La definizione di costante implica che il suo valore non può essere modificato
Costanti Costanti
/* Calcolo area cerchio */
#include <stdio.h>
#define PI_GRECO 3.14 main()
{
float raggio, area;
printf("Dammi raggio: ");
scanf("%f", &raggio);
area = raggio*raggio*PI_GRECO;
printf("Area: %f", area);
}
NOTA
Le direttive non terminano con il ;
Esempio Esempio
#include<stdio.h>
#define SIZE 3 main()
{
int x=SIZE;
int y= SIZE+2;
printf("%d %d", x, y);
Stampa:
3 5
3 3
74
Esempio Esempio
#include<stdio.h>
#define SIZE 3 main()
{
printf("SIZE");
}
Stampa:
SIZE
Semantica Semantica
Tutte le occorrenze (purché non siano racchiuse tra apicie non facciano parte di un’altra stringa) vengono rimpiazzate con costante
75
Esempio Esempio
#include<stdio.h>
#define SIZE 3 main()
{
int MYSIZE = 2;
int y = MYSIZE;
printf("%d", y);
}
Stampa:
2
SIZE parte di MYSIZE, quindi non si rimpiazza con 3 SIZEparte di MYSIZE, quindi
non si rimpiazza con 3
Semantica Semantica
Tutte le occorrenze (purché non siano racchiuse tra apici e non facciano parte di un’altra stringa) vengono rimpiazzate con costante
76
Strutture di controllo
Teorema di
Teorema di Bohm Bohm e Jacopini e Jacopini
Tutti i programmi possono essere scritti in termini di tre strutture di controllo:
La sequenza, permette di eseguire le istruzioni secondo l’ordine sequenziale in cui sono scritte
La selezione, permette di scegliere, in base al valore di una condizione, l’esecuzione di quale istruzione eseguire
L’iterazione, permette di eseguire ripetutamente un blocco di istruzioni
78
Linguaggio naturale Linguaggio naturale
se...allora...altrimenti....
qualora...ma ...nel caso in cui...
ripeti ... fino a quando...
mentre...
nel primo caso...., nel secondo caso...,... nell’ennesimo caso...
nei linguaggi di programmazione questi costrutti sintattici vengono chiamati
strutture di controllo strutture di controllo
79
Strutture di controllo del flusso Strutture di controllo del flusso Le strutture di controllo del flusso specificano l’ordine secondo il quale le operazioni devono essere effettuate
istruzioni decisionali
istruzioni cicliche
80
Istruzioni decisionali Istruzioni decisionali 1. if
2. if-else
3. switch
La struttura di selezione singola if
Usata per scegliere tra diverse azioni alternative.
Esempio (Pseudocodice):
Se il voto di uno studente è maggiore o uguale a 18 Stampa “Promosso”
Se la condizione è true, viene eseguita l’istruzione di stampa e il programma prosegue con la prossima istruzione.
Se la condizione è false, l’istruzione di stampa è ignorata e il programma prosegue con la prossima istruzione.
• L’indentazione delle istruzioni migliora la leggibilità del programma
82
if if
Sintassi Sintassi
if (espressione) istruzione Semantica
Semantica
Valuta espressione
Se l’espressione è vera (cioè assume valore diverso da zero) viene eseguita istruzione
In ogni caso continua eseguendo la prima istruzione successiva alla struttura di controllo
83
if if : diagramma di flusso : diagramma di flusso
I0;
if (E) I1;
I2;
I0
I1
I2 E
vero falso
la struttura introduce due possibili sequenze:
1. la sequenza (se E è vera):
I0 I1 I2
2. la sequenza (se E è falsa):
I0 I2
84
Esempio Esempio
#include <stdio.h>
main() {
int i;
printf("Dammi un intero: ");
scanf("%d", &i);
if (i<100)
printf("Minore di 100\n");
}
Stampa "Minore di 100" se il
numero letto è minore di 100
Sintassi Sintassi
if (espressione)
istruzione
if if
86
Operatori relazionali Operatori relazionali
== uguale
!= diverso
< minore
<= minore o uguale
> maggiore
>= maggiore o uguale
Restituiscono 0 quando il risultato è falso, 1 quando il risultato è vero
87
Attenzione Attenzione
== diverso da =
uguaglianza
assegnamento
88
blocco
#include <stdio.h>
main() {
int i;
int min_100=0;
printf("Dammi un intero: ");
scanf("%d", &i);
if (i<100) {
printf("Minore di 100\n");
min_100=1;
} }
if if + istruzione composta + istruzione composta
Esercizio Esercizio
Scrivere un programma che richieda in ingresso un valore intero e stampa il suo valore assoluto.
Valore assoluto di un numero n:
Se n < 0: -n Se n >= 0: n Esempio
Esempio
90
Soluzione Soluzione
#include<stdio.h>
main() {
int n;
printf("Dammi un intero: ");
scanf("%d", &n);
if (n<0) n=-n;
printf("Risultato: %d", n);
}