* * Abbiamo visto come dichiarare, modificare e stampare variabili numeriche * di tipo intero (INT). Ora vediamo di fare un po' piu' di pratica. * Innanzitutto si puo' dichiarare piu' di 1 variabile alla volta, se * queste sono dello stesso tipo. Per dichiarare 2 variabili di tipo intero * in un solo colpo, ad esempio, basta fare: * * int pluto, pippo; * * Ossia mettere la lista delle variabili INT da dichiarare, separate da * una virgola, terminando con il consueto punto e virgola. * Allo stesso modo, se si vogliono dichiarare piu' variabili di tipo FLOAT: * * float topo, papero; * * Naturalmente si potrebbero dichiarare singolarmente, se si vuole. * Allo stesso modo, si possono stampare valori di piu' variabili con una * sola funzione printf(). Per stampare delle variabili numeriche * abbiamo gia' visto che occorre mettere un %d o %f nel punto del * testo che ci interessa, e mettere poi il nome della variabile * dopo la stringa. Per stampare piu' di una variabile si fa cosi': * * printf("Pluto = %d , Pippo = %d\n", pluto, pippo); * * Ossia si mettono i %d dove ci interessa, e poi la lista delle variabili * che li sostituiranno nello stesso ordine, separate da virgole. * Ecco una tabella riassuntiva dei tipi di dati definibili: * * Tipo | Lungh. | Range (valori minimi e massimi) * ---------------+---------+---------------------------------------------- * unsigned char | 8 bits | 0 fino 255 * char | 8 bits | -128 "" 127 * unsigned int | 16 bits | 0 "" 65,535 * short int | 16 bits | -32,768 "" 32,767 * int | 16 bits | -32,768 "" 32,767 * unsigned long | 32 bits | 0 "" 4,294,967,295 * long | 32 bits | -2,147,483,648 "" 2,147,483,647 * float | 32 bits | 3.4 * (10**-38) "" 3.4 * (10**+38) * double | 64 bits | 1.7 * (10**-308) "" 1.7 * (10**+308) * long double | 80 bits | 3.4 * (10**-4932) "" 1.1 * (10**+4932) * * Come si vede i tipi interi (char,int,long) possono essere unsigned, ossia * solo positivi, in questo modo contengono il doppio di valori positivi, * risparmiandosi di supportare quelli negativi. I tipi a virgola mobile, * ossia float, double e long double, sono comunque signed. * Se si va fuori del raggio di azione di una variabile, ad esempio se si * aggiunge 100 ad una variabile int che vale gia' 32700, il risultato * e' -32736! Questo per l'aritmetica in complemento a 2, che per * semplificare fa "ricominciare" dal numero piu' basso quando si supera * quello piu' alto... dato che non e' segnalato alcun errore e il * risultato erroneo puo' essere usato, ATTENTI A NON FAR ECCEDERE MAI I * TIPI, piuttosto definite dei long, se sospettate un int non basti. * Ricordandoci che %d si usa per stampare una variabile INT, mentre %f si * usa per stampare una variabile float, ecco un esempio pratico: */ #include <stdio.h> /* Includiamo la libreria standard */ int pluto, pippo; /* Dichiaro 2 variabili di tipo intero */ float topo, papero; /* Dichiaro 2 variabili di tipo float */ main() /* Funzione principale, eseguita per prima */ { /* Inizio della funzione main() */ pluto = 1000; /* Assegno a pluto il valore 1000 */ pippo = pluto + 500; /* Assegno a pippo il valore di pluto + 500 */ topo = 21.06; /* Assegno a topo il valore 21,06 */ papero = 3.1415; /* Assegno a papero il valore 3.1415 */ /* Stampo il valore di 2 variabili di tipo INT con un solo printf() */ printf("Pluto = %d , Pippo = %d\n", pluto, pippo); /* Stampo il valore di 2 variabili di tipo FLOAT con un solo printf() */ printf("Topo = %f , Papero = %f\n", topo, papero); /* Stampo il valore di tutte le 4 variabili con un solo printf() */ printf("Pluto=%d ,Pippo=%d ,Topo=%f ,Papero=%f\n",pluto,pippo,topo,papero); } /* Fine della funzione main() */ /* Ci sono un paio di cose da notare. * La prima e' che abbiamo assegnato il valore 1500 a pippo in questo modo: * * pippo = pluto + 500; * * Abbiamo cioe' ottenuto un valore sommando una variabile con un numero. * Ovviamente e' possibile inserire nelle espressioni numeri e variabili. * Gli operatori aritmetici fondamentali sono: * * + addizione * - sottrazione * * moltiplicazione * / divisione * % modulo (il resto di una divisione intera) * * Naturalmente si possono usare le parentesi per costituire espressioni, * ad esempio: * * pippo = (topo-30+pluto*(pippo+papero))/(pluto*5); * * Come si vede vanno usate solo le parentesi tonde per evidenziare le * precedenze dell'espressione. Le parentesi quadre e graffe infatti sono * usate per altri scopi, come l'indicizzazione degli array e la definizione * di inizio e fine di una funzione. * Il C ha molti altri operatori speciali (+=, -=, *=, /=, ++,...), ma li * vedremo piu' avanti. * */