Avolio Maria Vittoria [email protected] IL PRIMO PROGRAMMA IN C #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { system("PAUSE"); return 0; } ATTENZIONE: OGNI PROGRAMMA C DEVE CONTENERE UNA E UNA SOLA FUNZIONE int main() Rappresenta il programma principale, ed è il punto di inizio dell'esecuzione del programma. · La parentesi graffa aperta { indica l'inizio di un blocco di istruzioni. · La parentesi graffa chiusa } indica la fine di un blocco di istruzioni · Per ogni parentesi graffa aperta { deve essercene una chiusa } · I commenti possono essere posti ovunque, l'inizio del commento è dato dalla coppia /*, la fine del commento è indicata da */ (oppure //) · Non si puo' inserire un commento in un altro (vietato l'annidamento dei commenti. In C ci vuole un ; dopo ogni istruzione Istruzioni input/output (I/O) funzione printf: printf(" Messaggio….", valore1, valore2,…..); La funzione printf formatta e scrive una serie di caratteri e valori sul dispositivo standard di output (stdout), e restituisce al programma chiamante il numero di caratteri effettivamente scritti (oppure un numero negativo in caso di errore). Quando si usa la funzione printf bisogna prima includere il file header <stdio.h> Istruzioni input/output (I/O) Argomenti della funzione printf La funzione printf riceve dal programma chiamante uno o più argomenti. Solo il primo è obbligatorio e deve essere una stringa, che si chiama stringa di controllo. Scrittura della stringa di controllo sullo schermo Quando printf è chiamata con un solo argomento, la striga di controllo viene trasferita sullo schermo, carattere per carattere (compresi gli spazi bianchi), salvo quando sono incontrati i seguenti caratteri particolari: " (termina la stringa di controllo) % (introduce uno descrittore di formato - da non usare in questo caso) \ (introduce una sequenza di escape) Istruzioni input/output (I/O) Principali sequenze di escape Il carattere \ (backslash) non viene trasferito sullo schermo, ma utilizzato in combinazione con i caratteri successivi (un solo carattere se si tratta di una lettera, oppure una sequenza di cifre numeriche); l'insieme viene detto: escape sequence, e viene interpretato come un unico carattere. Le sequenze di escape sono usate tipicamente per specificare caratteri speciali che non hanno il loro equivalente stampabile (come newline, carriage return, tabulazioni, suoni ecc...), oppure caratteri, che da soli, hanno una funzione speciale, come le virgolette o lo stesso backslash Tipo di opzione Descrizione \n Ritorno a capo \t Tabulazione orizzontale \b Tabulazione verticale \a Torna indietro di uno spazio \f Salto pagina Istruzioni input/output (I/O) Eventuali altri argomenti successivi alla stringa di controllo , nella chiamata a printf, rappresentano i dati da formattare e scrivere, e possono essere costituiti da costanti, variabili, espressioni, o altre funzioni (in questo caso in realtà l'argomento è il valore di ritorno della funzione, la quale viene seguita primadella printf). Descrittore di formato %type Principali descrittori di formato type può assumere uno dei seguenti valori: %f, % e valori floating, notazione normale o esponenziale %g come f o e (sceglie il più comodo) % d, % i valori interi relativi, base decimale %c carattere %s stringa di caratteri ……….. Istruzioni input/output (I/O) funzione printf: printf(" Messaggio….", valore1, valore2,…..); Esempio: printf("Colore %s, numero1 %d, numero2 %d, float %f.\n", "rosso", 123456, 89, 3.14); stamperà la seguente linea (incluso il carattere di nuova linea, \n): Colore rosso, numero1 123456, numero2 89, float 3.14. Istruzioni input/output (I/O) funzione printf: printf(" Messaggio….", valore1, valore2,…..); printf("Ci sono %d iscritti a questo corso!\n Temevo fossero solo %d!",3215+1, 2); scrive su video la frase: Ci sono 3216 iscritti a questo corso! Temevo fossero solo 2! LE VARIABILI • Una variabile è una porzione della memoria che contiene dati (di ingresso o di uscita) codificati in un qualche modo. • Nei linguaggi evoluti, sono identificate da un nome, nei linguaggi macchina da un indirizzo. • Posseggono le seguenti caratteristiche: • Tipo: specifica il tipo di codifica usato • Dimensione: indica la quantità di memoria occupata • Modo di allocazione: indica la strategia usata per riservare lo spazio in memoria • Scope (visibilità): indica quali pezzi di un programma possono vedere (e usare) una variabile. • Valore iniziale: il valore della variabile all’inizio dell’esecuzione del programma. Variabili I formati possibili sono: • Interi con o senza segno (int) • Reali cioè numeri rappresentati in virgola mobile (float, double) • Stringhe di caratteri alfanumerici (char[]) • Variabili logiche (bool) • Tipi composti (array) • Rappresentazioni definite dall’utente… Cos’è una variabile • Le variabili, in un linguaggio di programmazione, sono dei contenitori. • Possono essere riempiti con un valore che poi può essere riletto oppure sostituito. Le variabili • Formalmente ogni variabile è una porzione della memoria del computer in cui è possibile memorizzare un valore da utilizzare all’interno di un programma. • Tutte le variabili devono avere un nome e un tipo. Variabili • Tutte le variabili devono essere dichiarate prima di essere usate. La dichiarazione delle variabili è così fatta: Tipo ElencoVariabili; Esempi: Il programmatore deve essere sicuro che tutte le parti di un programma che utilizzano una data variabile siano d’accordo sul suo tipo; in caso contrario i risultati saranno imprevedibili. int i; float aus, x, y; double num1,num2; TIPI di variabili più usati Tipi di dichiarazione Rappresentazione N. di byte char Carattere 1 (8 bit) int Numero intero 2 (16 bit) short Numero intero “corto” da –32768 e +32767 2 (16 bit) long Numero intero “lungo” 4 (32 bit) float Numero reale 4 (32 bit) double Numero reale “lungo” 8 (64 bit) Le variabili NOTA: Le variabili dichiarate double occupano più spazio di quelle dichiarate float. Solo quando si utilizzano un gran numero di variabili ha senso preoccuparsi di risparmiare sullo spazio valutando al meglio il tipo di variabile sufficiente allo scopo. TIPI di variabili Il tipo char può contenere qualsiasi carattere definito secondo lo standard ASCII, quindi qualsiasi lettera (maiuscola o minuscola), cifra (da 0 a 9) e simbolo previsto dalla codifica. È molto importante ricordare che un char può contenere uno ed un solo carattere. Per memorizzare una successione di caratteri si utilizza un array di char. L’array è un contenitore di variabili dello stesso tipo e ne approfondiremo la conoscenza più avanti. Per dichiarare una variabile char, ad esempio inizializzandola con la lettera ‘r‘, basta scrivere: es. char a; TIPI di variabili I numeri interi, rappresentati da int, sono quelli “senza la virgola” o parti frazionate. ESEMPIO con gli interi int x = 7; int y = 3; int z; z = x / y; // z vale 2, cioè la parte intera della divisione tra 7 e 3 I tipi float e double sono i cosiddetti numeri in virgola mobile, che rappresentano l’insieme dei numeri reali: con essi possiamo rappresentare numeri molto piccoli o numeri molto grandi, positivi e negativi e naturalmente con e senza decimali. ESEMPIO con i double double x = 7.0; double y = 2.0; double z; z = x / y; // z vale 3.5 Le variabili Primo programma con variabili, somma di due numeri int main { /* dichiarazione di una variabile di tipo intero */ int risult; /* assegno alla variabile il risultato dell'operazione */ risult = 134+987; /* stampo il contenuto della variabile risult */ printf(«la somma è %d», risult); } ATTENZIONE! Quando si vuole stampare il contenuto di una variabile il suo nome non va messo tra virgolette ma solo tra parentesi. I nomi delle variabili si scelgono solitamente in modo che sia facile intuire il loro contenuto. Le variabili Programma evoluto della somma di due numeri int main { int risult; int num1, num2; num1=134, num2=987; risult = num1+num2; /* stampo il contenuto della variabile risult */ printf("la somma di num1= %d e di num2 =%d è ", num1, num2, risult); } GLI operatori • Operatori aritmetici. Comprendono somma, sottrazione, moltiplicazione, divisione intera, divisione con modulo ecc. • Operatori di confronto. Operatori che permettono di verificare determinate condizioni, come ad esempio l’uguaglianza o la disuguaglianza. • Operatori logici. Da utilizzare con le istruzioni condizionali ed iterative. GLI operatori Aritmetici Operazioni con gli int Simbolo Esempio Addizione + 4 + 27 = 31 Sottrazione - Moltiplicazione Divisione intera 76 – 23 = 53 Operazioni con i double Simbolo Esempio * 4 * 7 = 28 Addizione + 2.5 + 14.3 = 16.8 / 10 / 3 = 3 Sottrazione - 43.8 – 12.7 = 31.1 Moltiplicazione * 7.5 * 3.0 = 22.5 Divisione / 5.0 / 2.0 = 2.5 (3 è il n di volte divisibili senza resto) Divisione con modulo % 11 %6 = 5 (5 è il resto della divisione) Un operatore binario fondamentale è l’operatore di assegnazione =. a=2 indica che alla variabile a è assegnato il valore 2 k=k+1 vuol dire assegna a k il suo valore incrementato di 1 Operatori di confronto Gli operatori di confronto permettono di verificare determinate condizioni, come ad esempio l’uguaglianza, la disuguaglianza, o semplicemente se un elemento è maggiore di un’altro; la seguente tabella mostra nel dettaglio gli operatori di confronto e la loro funzione: Simbolo Significato Utilizzo == uguale a a == b != diverso da a != b < minore a<b > maggiore a>b <= minore o uguale a <= b >= maggiore o uguale a >= b A=B DIVERSO A==B A=B IMPLICA A=AL VALORE DI B A==B MI DOMANDO SE A È UGUALE A B Operatori logici Anche gli operatori logici vengono utilizzati con le istruzioni condizionali ed iterative, e permettono di fare l’AND e l’OR tra due operandi; nella tabella mostriamo i simboli usati e il loro utilizzo: Simbolo Significato Utilizzo && AND logico a && b || OR logico a || b La funzione scanf() serve per leggere dallo stdin (generalmente la tastiera) una sequenza di caratteri (lettere o cifre) che verranno memorizzate all’interno di opportune variabili. Scanf è, quindi, definita come segue: int scanf(char *formato, lista argomenti ...) A differenza di printf(), però la variabile deve essere messa preceduta dal simbolo &, perché in realtà tra gli argomenti non dobbiamo passare il nome della variabile, ma il suo indirizzo. PRIMO ESEMPIO CON SCANF #include <stdio.h> int main() { int i; scanf("%d ", &i); printf("%d ", i); } Lettura di un numero #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int numero; printf("Inserisci un numero intero.\n"); scanf("%d", &numero); printf("Il numero inserito e' %d",numero); printf("\n"); system("PAUSE"); return 0; } Conversione di lire in euro //convertitore lire/euro #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int lire; float euro; float FattConvLireEuro = 1936.27; Printf("Programma di converione Lire->Euro.\n" ); Printf(" Inserisci il valore in Lire da convertire in Euro: \n"); scanf("%d ", &lire); euro = lire / FattConvLireEuro; printf("Il valore corrispondente in Euro e': %f" , euro ); printf("\n"); system("PAUSE"); return 0; } Conversione di unità di misura #include <stdio.h> #include <stdlib.h> Il punto di congelamento dell'acqua è di 32 int main(int argc, char *argv[]) gradi Fahrenheit, mentre il punto di { ebollizione si trova a 212 gradi double tc, tf, offset, conv_FC, conv_CF; offset=32.; conv_FC=5./9.; printf(Inserisci il valore in gradi Fahrenheit \n); scanf("%f, & tf); Fahrenheit Celsius tc=(tf-offset)*conv_FC; congelamento 32 0 printf("Valore in gradi Celsius %f" ,tc ); printf(" \n" ); ebollizione 212 100 conv_CF=9./5.; printf("Inserisci il valore in gradi celsius ); printf(" \n" ); scanf("%f, & tc); tf=tc*conv+offset; printf( "Valore in gradi fahrenheit %f ", tf); printf(" \n" ); Un grado Fahrenheit è 5/9 di system("PAUSE"); un grado Celsius. return 0; } ATTENZIONE: Le costanti 32., 9. e 5. sono tutte seguite dal . ad indicare che i relativi numeri sono usati nella rappresentazione in virgola mobile. Una costante razionale la cui parte decimale sia nulla va comunque scritta con il punto decimale, altrimenti sarà interpretata come intera