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