





Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
La dispensa affronta l'argomento della programmazione base in linguaggio C. In particolare viene mostrato come usare tutti gli strumenti e le tecniche di programmazione per creare un semplice software
Tipologia: Dispense
1 / 9
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!






Il primo programmino in C sarà un programma abbastanza semplice, che stampa sullo schermo della console "Hello world!" ed esce. Vediamo il codice: /* hello.c / #include <stdio.h> int main(void) { printf ("Hello world!\n"); return 0; } Una volta scritto questo codice con il nostro editor preferito, salviamolo come hello.c e compiliamolo con il nostro compilatore. Se usiamo GCC: gcc -o hello hello.c Quando lo eseguiamo (ovviamente in modalità console) apparirà la scritta "Hello world!". Ma vediamo cosa fa nel dettaglio... Innanzitutto, la prima riga è un commento. I commenti in C iniziano con / e finiscono con /, ma la maggior parte dei compilatori riconoscono anche i commenti in stile C++ (che iniziano con // e finiscono con la fine della riga). Esempio: codice codice / Questo è un commento in stile C / codice / Anche questo è un commento in stile C */ codice // Questo è un commento in stile C++ All'interno di un commento è possibile scrivere informazioni sul programma, o commenti su un passaggio di codice eventualmente poco chiaro. La prima vera e propria linea di codice è #include <stdio.h>: come ho accennato nel paragrafo precedente, questa è una direttiva al preprocessore, ovvero un'istruzione che dice al calcolatore che nel programma che segue si useranno le funzioni definite nel file stdio.h (i file header dovreste trovarli nella cartella include del vostro compilatore). Il file stdio.h contiene le funzioni principali per lo STanDard Input/Output, ossia le funzioni che permettono, ad esempio, di scrivere messaggi in
modalità testo, di leggere valori dalla tastiera, di manipolare files e buffer... se non includessimo questa istruzione non potremmo usare la funzione printf() più avanti. Il file stdio.h è il file che useremo maggiormente nel corso di questo tutorial. A questo punto inizia il programma vero e proprio: viene eseguito tutto ciò che si trova all'interno della funzione main() (la funzione principale di ogni programma), che inizia con { e finisce con }. Nel paragrafo dedicato alle funzioni vedremo meglio come funziona il main (scusate per il gioco di parole). Intanto anticipo che quell'int situato prima del main() dice al chiamante (in questo caso il sistema operativo stesso) che la funzione main() ritorna un numero intero (e questo spiega la riga return 0). A questo punto chiamiamo la funzione printf(), definita nel file stdio.h. Questa funzione stampa un messaggio sullo standard output (la console sul monitor). Ovviamente, il messaggio è racchiuso fra parentesi tonde e i doppi apici "". La sequenza \n è una escape sequence, che dice al compilatore di andare a capo dopo aver scritto ciò che è contenuto nella printf() (\n sta per "new-line"). Ecco le principali sequenze di escape usate nel C:
Caratteri di testo ASCII 8 Numeri interi piccoli (da -32768 a 32768) 16 Numeri positivi interi piccoli (da 0 a 65536) 16 Numeri interi (da -2147483648 a 2147483648) 32 Numeri interi positivi (da 0 a 4294967296) 32 Numeri interi grandi 32 Numeri a virgola mobile (precisione singola) 32 Numeri a virgola mobile (doppia precisione, notazione 64 scientifica) Esempio: int a; inizializzarla int b = 3; char c = 'q'; carattere q float d = 3.5; // Dichiaro una variabile float d che vale 3.5 a = 2; // Adesso a vale 2 inte=a+b; //evalelasommadiaeb,ossia
È possibile fare con le variabili ogni tipo di operazione matematica elementare: addizione (+), sottrazione (-), moltiplicazione (*), divisione (/), resto della divisione (%). Diamo però un'occhiata a questo codice:
int a = 2; // Variabile int float b = 3.5; // Variabile float int c = a+b; // ERRORE! Quello che ho riportato sopra è un errore molto frequente anche fra i programmatori più esperti, se provo a compilare un codice del genere otterrò un warning (un "avvertimento del compilatore, che però non pregiudica la compilazione vera e propria) o, più spesso, un errore vero e proprio (la compilazione viene arrestata). Non posso effettuare operazioni fra due tipi di variabili diversi fra loro (int questo caso, int e float): per farlo devo ricorrere alla conversione di cast, ovvero specificare esplicitamente al compilatore in che tipo di variabile voglio salvare il risultato. Esempio corretto: int a = 2; float b = 3.5; int c = (int) a+b; questo caso Oppure: // Converto il risultato in int. c vale 5 in // Dichiaro una variabile intera chiamata a senza // Dichiaro una variabile intera b che vale 3 // Dichiaro una variabile char che contiene il int a = 2; float b = 3.5; float c = (float) a+b; // Converto il risultato in float. c vale 5.5 in questo caso A differenza delle variabili "matematiche", in C una scrittura del genere è concessa: int a = a+2; // Aggiorno il valore di a Oppure, in modo più sintetico: int a += 2; La scrittura a += 2 sta per a = a+2 (sono concesse scritture come += -= *= /= %=). La scrittura a++ è invece un incremento della variabile a, ed equivale a a=a+1 (così come la scrittura a-- equivale a a=a-1).
float x = 3.14; printf ("x vale %f",x); dove la scrittura %f dice al compilatore di stampare una variabile di tipo float. Ecco i formati di stringa principali usati per stampare i principali tipi di variabili: Esempio: /* variabili.c */ #include < stdio.h > int main() { int a,b,c; // Dichiaro 3 variabili int a = 3; b = 4; c = a+b; // c vale 7 printf ("c vale %d\n",c); a += 3; b++; c = a-b; // Ora a vale 6 // Ora b vale 5 // Ora c vale - 1 printf ("Ora c vale %d\n",c); return 0; } Il fatto interessante è che possiamo eseguire opeazioni anche sulle variabili char. Le variabili char, infatti, vengono considerate dal programma come codici ASCII, ovvero ogni variabile ha il suo codice numerico (da 0 a 255) che viene convertito in runtime in un carattere (attenzione che in linguaggi come Java queste operazioni non sono concesse, in quanto i caratteri non sono in formato ASCII ma Unicode). Ecco un esempio: char c = 65; // Equivale a scrivere char c = 'A', infatti // 65 è il codice per la lettera A charc+=4; //OraavaleE printf ("a = %c\n",c);
Finora abbiamo preso in esame programmi che eseguono delle istruzioni ed escono. Ma un programma non ha molto senso se non può interagire con l'utente che lo usa. Il C mette a disposizione molte funzioni per l'I/O (Input/Output) da tastiera (quelle che useremo sono definite perlopiù in in stdio.h). Abbiamo già incontrato la printf() per l'output sul monitor, ora facciamo conoscenza con la scanf(), per la lettura di valori dalla tastiera. Ecco la forma della scanf(): scanf ("tipo_da_leggere",&variabile); Ed ecco un piccolo esempio: int a; // Dichiaro una variabile int printf ("Inserisci una variabile intera: "); scanf ("%d",&a); // Dico al programma di leggere il valore immesso Ecco nel frammento di programma di sopra cosa succede: Attraverso la scanf() dico al programma di leggere un valore intero dalla tastiera (già abbiamo visto che la sequenza %d dice al programma che quella che si sta per leggere o scrivere è una variabile intera) e di salvare questo valore all'indirizzo della variabile a (capiremo meglio questo concetto quando parleremo dei puntatori), ossia copio questo valore nella variabile intera a. Ecco un programmino facile facile che somma fra loro due numeri reali: /* somma.c */ #include <stdio.h> double somma(double a, double b); // Prototipo della funzione somma() int main() { double a,b; // Dichiaro 2 variabili double printf ("Inserire il primo numero: "); scanf ("%lf",&a); // Leggo il primo valore double e lo salvo all'indirizzo di a printf ("Inserire il secondo numero: "); scanf ("%lf",&b); // Leggo il secondo valore double e lo salvo all'indirizzo di b printf ("Somma fra %lf e %lf = %lf\n",a,b,somma(a,b)); // Stampo la somma fra a e b return 0; }