22 dicembre 2015
Laboratorio di informatica 1
(Programmazione)
Avvisi:
La lezione di ieri e’ in rete (da 10 minuti fa)
1 /* Fig. 2.5: fig02_05.c
2
Addition program */
3 #include <stdio.h>
4
5 int main()
6 {
7
int integer1, integer2, sum; /* dichiarazione */
8
9
printf(“Scrivi il primo intero\n"); /* prompt */
10
scanf( "%d", &integer1 ); /* legge un intero */
11
printf("Scrivi il secondo intero\n");/* prompt*/
12
scanf( "%d", &integer2 ); /* legge un intero */
13
sum = integer1 + integer2;
/* assegnazione */
14
printf(“La somma e’ %d\n", sum);/*stampa somma*/
15
16
return 0;
/* il programma finisce OK */
17 }
Scrivi il primo intero
45
Scrivi il secondo intero
72
La somma e’ 117
Sommario
Inizializza le
variabili
Input
Somma
Stampa
Output
Programma 2 : sommare due interi
• Come caso precedente
– Commenti, #include <stdio.h> e main
• int integer1, integer2, sum;
– Dichiarazioni di variabili
• Variabili: locazioni di memoria dove scrivere un valore
• int significa che le variabili contengono valori interi
(-1, 3, 0, 47)
– integer1, integer2, sum nomi di variabili (identificatori)
• Identificatori : lettere, cifre (non iniziare con cifra), e
underscores, case sensitive
– Dichiarazioni vanno prima delle istruzioni di esecuzione
• Se NO, errore di sintassi
1 /* Fig. 2.5: fig02_05.c
2
Addition program */
3 #include <stdio.h>
4
5 int main()
6 {
7
int integer1, integer2, sum; /* dichiarazione */
8
9
printf(“Scrivi il primo intero\n"); /* prompt */
10
scanf( "%d", &integer1 ); /* legge un intero */
11
printf("Scrivi il secondo intero\n");/* prompt*/
12
scanf( "%d", &integer2 ); /* legge un intero */
13
sum = integer1 + integer2;
/* assegnazione */
14
printf(“La somma e’ %d\n", sum);/*stampa somma*/
15
16
return 0;
/* il programma finisce OK */
17 }
Sommario
Input
Programma 2 : sommare due interi
• scanf( "%d", &integer1 );
– Ottiene un valore dall’utente
• scanf usa standard input (di solito la tastiera)
– Questo scanf ha due argomenti:
• %d – indica che il dato deve essere un intero
• &integer1 – locazione in memoria che contiene
la variabile
• & crea un po’ di confusione all’inizio
– Ricorda di includerlo sempre con il nome della
variabile in scanf
– Sara’ discusso in seguito
– Utente risponde a scanf digitando un numero, poi
pressando enter (return)
Nozioni sulla Memoria
• Variabili
– I nomi delle variabili corrispondono alle locazioni nella
memoria del computer.
– Ogni variabile ha un nome, un tipo, una taglia e un valore.
– Quando nuovo valore e’ assegnato a variabile (ad es. via
scanf), sostituisce (e distrugge) valore precedente
– Leggere una variabile dalla memoria non modifica il suo
valore
1 /* Fig. 2.5: fig02_05.c
2
Addition program */
3 #include <stdio.h>
4
5 int main()
6 {
7
int integer1, integer2, sum; /* dichiarazione */
8
9
printf(“Scrivi il primo intero\n"); /* prompt */
10
scanf( "%d", &integer1 ); /* legge un intero */
11
printf("Scrivi il secondo intero\n");/* prompt*/
12
scanf( "%d", &integer2 ); /* legge un intero */
13
sum = integer1 + integer2;
/* assegnazione */
14
printf(“La somma e’ %d\n", sum);/*stampa somma*/
15
16
return 0;
/* il programma finisce OK */
17 }
Sommario
Somma
Stampa
Programma 2 : sommare due interi
• = (operatore di assegnazione)
– Assegna un valore ad una variabile
– Operatore Binario (2 operandi)
sum = variable1 + variable2;
sum riceve variable1 + variable2;
– Variabile riceve il valore sulla sinistra
• printf( "Sum is %d\n", sum );
– Simile a scanf - %d significa che verra’ stampato un intero
decimale
• sum specifica quale intero verra’ stampato
• I calcoli possono essere effettuati all’interno di printf
printf( "Sum is %d\n", integer1 + integer2 );
Nozioni sulla Memoria
• Una rappresentazione visuale:
integer1
45
Aritmetica
• Calcoli aritmetici sono molto usati
– Usa * per moltiplicazione e / per divisione
– La divisione intera tronca il resto
7 / 5 restituisce 1
– Operatore modulo restituisce il resto
7 % 5 restituisce 2
• Precedenza tra operatori
– Alcuni operatori agiscono prima di altri (es., moltiplicazione prima
dell’addizione)
• Usare le parentesi all’occorrenza
Esempio: Trova la media tra le variabili a, b e c
• NO: a + b + c / 3
• SI: (a + b + c ) / 3
Aritmetica
nome
+
Addizione
Sottrazione
Moltiplicazione *
/
Divisione
%
Modulo
algebra
f+7
p–c
bm
x/y
r mod s
C
f
p
b
x
r
+
*
/
%
7
c
m
y
s
Aritmetica
Regole di precedenza tra operatori:
Operatori
()
*, /, %
+ ,-
Operazioni
Parentesi
Moltiplicazione
Divisione
Modulo
Addizione
Sottrazione
Ordine di precedenza
Primo
(da sinistra verso destra)
Secondo
(da sinistra verso destra).
Ultimo
(da sinistra verso destra)
Prendere delle decisioni:
operatori di uguaglianza e relazionali
• Istruzioni eseguibili
– Compiono azioni (calcoli, input/output di dati)
– Prendono decisioni
• Struttura di controllo if
– Versione semplice, piu’ dettagli in seguito
– Se una condizione e’ vera, allora il corpo dell’istruzione
if viene eseguita
• 0 e’ FALSO , non-zero e’ VERO (TRUE)
– Il controllo ritorna sempre dopo la struttura if
• Keywords (parole chiave)
– Parole speciali risevate per il C
– Non possono essere usate per gli identificatori o per le
variabili.
Prendere delle decisioni:
operatori di uguaglianza e relazionali
algebra
C Esempio
Significato
Operatori relazionali
>
<
>
<
>=
<=
x>y
x<y
x >= y
x <= y
Operatori di uguaglianza
=
== x == y
!= x != y
x e’ maggiore di y
x e’ minore di y
x e’ maggiore o uguale a y
x e’ minore o uguale a y
x e’ uguale a y
x non e’ uguale a y
Parole chiave
Keyw o rd s
auto
double
int
struct
break
case
char
const
continue
default
do
else
enum
extern
float
for
goto
if
long
register
return
short
signed
sizeof
static
switch
typedef
union
unsigned
void
volatile
while
1 /* Fig. 2.13: fig02_13.c
2
Uso dell’istruzione if, degli operatori
3
relazionali e di uguaglianza */
4 #include <stdio.h>
5
6 int main()
7 {
8
int num1, num2;
9
10
printf( “Inserisci due interi e ti diro’ \n" );
11
printf( “la relazione che soddisfano: " );
12
scanf( "%d%d", &num1, &num2 );
/* legge due
interi */
13
14
if ( num1 == num2 )
15
16
17
18
19
20
21
22
23
24
25
printf( "%d e’ uguale a %d\n", num1, num2 );
if ( num1 != num2 )
printf("%d e’ diverso da %d\n",num1,num2 );
if ( num1 < num2 )
printf( "%d e’ minore di %d\n", num1, num2 );
if ( num1 > num2 )
printf("%d e’ maggiore di %d\n",num1,num2 );
Sommario
Dichiara le
variabili
Input
Istruzione if
Stampa
26
27
28
if ( num1 <= num2 )
printf( "%d e’ minore o uguale a %d\n",
num1, num2 );
Sommario
29
30
31
if ( num1 >= num2 )
printf( "%d e’ maggiore o uguale a
32
33
34
%d\n",
num1, num2 );
return 0;
/* indica che il programma finisce
con successo */
3.1 Esce da
main
35 }
Inserisci due interi e ti diro’ la relazione che
soddisfano: 3 7
3 e’ diverso da 7
3 e’ minore di 7
3 e’ minore o uguale a 7
Inserisci due interi e ti diro’ la relazione che
soddisfano: 22 12
22 e’ diverso da 12
22 e’ maggiore di 12
22 e’ maggiore o uguale a 12
Output
Attenzione…. Errori in vista!
if ( num1 = num2 )
printf( "%d e’ uguale a %d\n", num1, num2 ); NO!
if ( num1 == num2);
printf( "%d e’ uguale a %d\n", num1, num2 ); NO!
if ( num1 == num2)
printf( "%d e’ uguale a %d" \n, num1, num2 ); NO!
if ( num1 == num2)
printf( “&d e’ uguale a &d \n ", num1, num2 ); NO!
if ( num1 == num2 )
printf( "%d e’ uguale a %d\n", num1, num2 );
Esercizi:
• Esercizio 2.23
Usando solo le tecniche viste finora, scrivere un programma che prenda in
input cinque numeri interi e quindi determini e visualizzi il maggiore e il
minore all’interno del gruppo.
Esercizi:
• Esercizio 2.30
Usando solo le tecniche viste finora, scrivere un programma che prenda in
input un numero di cinque cifre e le visualizzi ognuna separata dall’altra
da tre spazi.
Per esempio, se l’utente digitasse 24614, il programma dovrebbe visulizzare:
2
4
6
1
4
Esercizi:
• Esercizio 2.31
Usando solo le tecniche viste finora, scrivere un programma che calcoli i
quadrati e i cubi dei numeri da 1 a 10 e utilizzi le tabulazioni (\t) per
visualizzare la seguente tabella di valori:
numero
0
1
2
.
.
quadrato
0
1
4
.
.
cubo
0
1
8
.
.
10
100
1000
Scarica

versione power point