1
Programmare in C
Esercizi … Esercizi …
semplici
3
Esercizio Esercizio
Determinare il valore di x e y
#include <stdio.h>
main() {
int x,y;
x=2;
y=4;
y=3*y;
x=y+x;
printf("%d\n", x);
printf("%d\n", y);
}
y 12 memoria
x 14
Esercizio Esercizio
Determinare i valori di p, q ed r al termine delle seguenti istruzioni:
p=2;
q=3;
r=q;
q=q+1;
p=p+q-(2*r);
r=p+r+1;
r q 4
memoria
4 0
p
5
Come si fa a scambiare il valore di due variabili?
Prima
Dopo
Esercizio Esercizio
3 x
y 5
5 x
y 3
Esercizio: scambio variabili Esercizio: scambio variabili
E’ corretto questo programma
#include <stdio.h>
main() {
int x,y; NO!
alla fine ottengo:
7
Soluzione Soluzione
#include <stdio.h>
main() {
int x,y,temp;
x=3;
y=5;
temp=x;
x=y;
y=temp;
printf("%d\n", x);
printf("%d\n", y);
}
E’ corretto questo programma?
E’ corretto questo programma?
#include<stdio.h>
main() {
int y;
y=0;
x=y+12;
printf("%d\n", x);
printf("%d\n", y);
}
NO!!
uso x senza dichiarare
9
E’ corretto questo programma?
E’ corretto questo programma?
#include<stdio.h>
main() {
printf("Ciao.\n");
int x;
x=3;
} NO!!
dichiarazione prima dell’uso, ma la dichiarazione all’inizio
Versione corretta Versione corretta
#include<stdio.h>
main() {
int x;
printf("Ciao.\n");
x=3;
11
Come … Come …
… leggere l’input??
/* Calcolo area rettangolo */
#include <stdio.h>
main() {
int base, altezza, area;
printf("Valore base: ");
scanf("%d", &base);
printf("Valore altezza: ");
scanf("%d", &altezza);
area = base*altezza;
printf("Area: %d", area);
}
L’utente deve poter immettere i valori di base e altezza
Area del rettangolo
Area del rettangolo
13
Input Input
scanf("%d", &base);
valore intero in formato decimale, che verrà assegnato alla variabile
base
indirizzo di memoria in cui si trova la variabile base
Leggi un intero e mettilo nella variabile base
&base
Risultato
Risultato
15
Errori tipici Errori tipici
• Dimenticare una o entrambe le virgolette che circondano la stringa di controllo del formato in una printfo in una scanf
• Dimenticare il %in una printf o in una scanf
• Dimenticare, in una scanf,il simbolo &
• Far precedere da & una variabile in una printf, quando, di fatto, questa non dovrebbe essere preceduta da &
… … abbiamo visto abbiamo visto
Struttura di un programma
Commenti
Dichiarazioni di variabili
Istruzioni semplici:
istruzione di uscita
istruzione di ingresso
istruzione di assegnamento
17
Riepilogo: struttura di un programma Riepilogo: struttura di un programma
direttive
main() {
dichiarazioni;
istruzioni;
}
Riepilogo: commenti Riepilogo: commenti
// commenti in questo modo il compilatore non valuta una riga intera
/* commenti */ in questo modo il compilatore non valuta quello che c'è dentro
19
Riepilogo: dichiarazioni di variabili Riepilogo: dichiarazioni di variabili
int x,y,z;
Dichiarazione di tre variabili (x, y, z) di tipo intero
… … ancora sulle dichiarazioni ancora sulle dichiarazioni
Nelle dichiarazioni può essere anche definito un valore iniziale, che viene automaticamente assegnato alle posizioni di memoria
Esempio:
Esempio:
int y;
int x=5;
21
Riepilogo: istruzione di uscita (output) Riepilogo: istruzione di uscita (output)
printf("stringa")
stampa tutti i caratteri che compongono stringa uno dopo l'altro
Nota: stringa è semplicemente una sequenza di caratteri.
Riepilogo: istruzione di uscita (output) Riepilogo: istruzione di uscita (output)
printf: usata anche per stampare il contenuto di una variabile
Sintassi
printf(< stringa di formato >, < argomenti >)
< stringa di formato >: messaggio che deve essere visualizzato, comprensivo dei riferimenti ai tipi di dati
23
Riepilogo: istruzione di uscita (output) Riepilogo: istruzione di uscita (output)
Bisogna specificare il formato della variabile utilizzando il carattere speciale di formattazione % seguito dal carattere che definisce un certo formato per una variabile: %d per il tipo intero
printf("%d%d%d", x, y, z);
Provoca la stampa di tre valori interi contenuti in x, ye z.
Ogni occorrenza del carattere % nel primo argomento è associata al corrispondente argomento di printf, a partire dal secondo:
affinché non si verifichino errori, la corrispondenza deve riguardare sia il numero che il tipo di argomenti.
Esempi di
Esempi di printf printf
#include<stdio.h>
main() {
int x=3;
int y=5;
printf("Valore di x: %d\n", x);
printf("Valore di y: %d\n", y);
}
Valore di x: 3 Valore di y: 5
Valore di x: 3 Valore di y: 5
#include<stdio.h>
main() {
int x=3;
int y=5;
printf("Valore di x: %d\nValore di y: %d\n", x, y);
}
25
Cosa stampa?
Cosa stampa?
int a=0;
int b=2;
int c=4;
int d=6;
int e=8;
int f=10;
printf("Numeri pari da 1 a 10: %d %d %d
%d %d \n",a,b,c,d,e);
Messaggio visualizzato:
Numeri pari da 1 a 10: 0 2 4 6 8
Cosa stampa?
Cosa stampa?
int a=0;
int b=2;
int c=4;
int d=6;
int e=8;
int f=10;
printf("Numeri pari da 1 a 10: %d %d %d
27
Cosa stampa?
Cosa stampa?
int a=0;
int b=2;
int c=4;
int d=6;
int e=8;
int f=10;
printf("Numeri pari da 1 a 10: %d %d %d
%d %d \n",a,b,c,d,e,f);
Messaggio visualizzato:
Numeri pari da 1 a 10: 0 2 4 6 8 5 6
Cosa stampa?
Cosa stampa?
int a=0;
int b=2;
int c=4;
int d=6;
int e=8;
int f=10;
printf("Numeri pari da 1 a 10: %d %d %d
%d %d %d \n",a,b,c,d,e);
Messaggio visualizzato:
Numeri pari da 1 a 10: 0 2 4 6 8 2293472 6
5
29
Ancora
Ancora printf printf
I calcoli possono essere eseguiti all’interno di una printf.
#include<stdio.h>
main() {
int x=3;
int y=5;
x=y+x;
printf("x=%d\n", x);
}
#include<stdio.h>
main() {
int x=3;
int y=5;
printf("x=%d\n", y+x);
}
Entrambi stampano:
x=8
Riepilogo: istruzione di ingresso(input) Riepilogo: istruzione di ingresso(input)
Sintassi
scanf(< stringa di formato >, < argomenti >)
< stringa di formato >: indica il formato in cui saranno inseriti i valori
variabili che devono contenere i
31
Riepilogo: istruzione di ingresso(input) Riepilogo: istruzione di ingresso(input)
scanf("%d", &x)
legge la prossima sequenza di caratteri sullo standard input che rappresentano un valore di tipo interoe assegna tale valore alla variabile x; occorre premettere al nome della variabile &
Posso anche scrivere:
scanf("%d%d", &x, &y);
Riepilogo: istruzione di assegnamento Riepilogo: istruzione di assegnamento
x = 1 + 4 * (y + 2);
calcola il valore dell’espressione a destra del segno = ed lo assegna alla variabile x
33
Esercizi Esercizi
… … per iniziare per iniziare
Esercizio Esercizio
Scrivere un programma che, utilizzando una sola istruzione printf, visualizzi:
Prove
35
Soluzione Soluzione
#include<stdio.h>
main() {
printf("Prove\n\n tecniche\ndi\n visualizzazione");
}
Prove
tecniche di
visualizzazione
Cosa avrebbe stampato
#include<stdio.h>
main() {
printf("Prove\n\n tecniche\n di\n visualizzazione");
}
Avrebbe stampato
Prove tecniche di
#include<stdio.h>
main() {
printf("Prove\n\n tecniche\n di\n visualizzazione");
}
37
Esercizio Esercizio
Che sarà visualizzato (se lo sarà), quando ognuna delle seguenti istruzioni C verrà eseguita? Assumete che x=2 e y=3.
printf("%d", x);
printf("%d", x+x);
printf( «x=%d», x);
z=x+y;
scanf("%d%d", &x, &y);
/* printf("x+y=%d", x+y)*/;
2 4 niente niente niente niente
Esercizio Esercizio
Scrivere un programma che richieda all’utente un numero intero. Il programma deve quindi calcolare e visualizzare il doppio.
Esempio Esempio
Dammi un numero
39
Soluzione Soluzione
#include<stdio.h>
main() {
int numero;
printf("Dammi un numero\n");
scanf("%d", &numero);
numero = numero+numero;
printf("Il risultato = %d", numero);
}
Cygwin
Cygwin
41
Esercizio Esercizio
Scrivere un programma che richieda all’utente tre numeri interi. Il programma deve quindi calcolare la differenza dei tre numeri e moltiplicare il risultato per il primo numero. Visualizzare il risultato.
Il risultato = 50
10 Esempio
Esempio
Dammi il primo numero 2 Dammi il secondo numero Dammi il terzo numero 3
Soluzione Soluzione
#include<stdio.h>
main() {
int primo, secondo, terzo, risultato;
printf("Dammi il primo numero ");
scanf("%d", &primo);
printf("Dammi il secondo numero ");
scanf("%d", &secondo);
43
Cygwin Cygwin
Soluzione alternativa Soluzione alternativa
#include<stdio.h>
main() {
int primo, secondo, terzo, risultato;
printf("Dammi i tre numeri separati da spazio\n");
scanf("%d %d %d", &primo, &secondo, &terzo);
risultato = (primo-secondo-terzo)*primo;
printf("Il risultato = %d", risultato);
}
#include<stdio.h>
main() {
int primo, secondo, terzo;
printf("Dammi i tre numeri separati da spazio\n");
scanf("%d %d %d", &primo, &secondo, &terzo);
printf("Il risultato = %d", (primo-secondo-terzo)*primo);
45
Cygwin Cygwin
Esercizio Esercizio
Indicare tutti gli errori commessi nel seguente listato e fornire una versione corretta.
#include<stdio.h>;
*/ programma con errori /*
main()
47
NO
%
Indicare tutti gli errori commessi nel seguente listato e fornire una versione corretta.
#include<stdio.h>;
*/ programma con errori /*
main()
Printf("programmi con errori");
int num = 9 scanf("d", num);
ris+2 = num;
printf("Risultato=" ris);
}
Esercizio Esercizio
/*
*/
;
&
=%d", dichiarare ris
{
Versione corretta Versione corretta
#include<stdio.h>
/* programma con errori */
main() {
int ris;
int num = 9;
printf("programmi con errori");
scanf("%d", &num);
ris = num+2;
printf("Risultato=%d", ris);
}
49
Esercizio Esercizio
Cosa stampa il seguente programma?
#include<stdio.h>
main() {
int x=2, y=3;
scanf("%d %d", &x, &y);
y=x*y;
printf("Il prodotto x*y = y", y);
}
Soluzione Soluzione
Stampa:
Il prodotto x*y = y
Se volevo stampare la somma di due numeri letti dall’esterno avrei dovuto usare questa istruzione: