




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
Nel file allegato è presente una spiegazione riguardo la programmazione in C con relativi esempi.
Tipologia: Dispense
1 / 8
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!





In questa lezione inizieremo a concentrarci sulla programmazione in C vera e propria. L’impostazione che intendiamo seguire è quella di spiegare i concetti “per esempi”. Perciò può capitare che per spiegare un concetto si deve fare ricorso a costrutti, o istruzioni che verranno spiegate solo nelle lezioni successive. Niente paura quindi se a volte alcune cose sembreranno poco chiare, tutto sarà comunque spiegato.
Il primo programma in C , il più semplice in assoluto è il famoso “Hello World!” (Ciao Mondo) che ha soltanto lo scopo di stampare a video la scritta per spiegare la sintassi basilare del linguaggio. #include main () { printf("Hello World!"); }
Proviamo a confrontare questo semplice programma con programmi che fanno lo stesso in altri linguaggi.
Hello world in Pascal:
program main; begin writeln('Hello World!'); end.
Hello world in C++:
#include main() { cout << "Hello World!"; }
Hello world in Java:
class Saluto { public static void main(String args[]) { System.out.println("Hello World!"); } }
Ecco le differenze più evidenti:
Il C è completamente diverso dal Pascal, perché ha una logica molto più pratica, ad esempio non dobbiamo dichiarare ogni variabile fuori dal programma prima di usarla;
in C++, a differenza del C, si hanno a disposizione comandi alternativi e costrutti di nuova concezione, sia come nomi che come sintassi;
a differenza di Java, in C non bisogna effettuare una miriade di dichiarazioni prima di poter scrivere il programma e non sono costretto a seguire delle regole rigide per strutturare un programma (in Java c’è un forte controllo sui tipi, lo si può evincere anche dal codice proposto, in cui la funzione main deve essere “esplicitamente” dichiarata pubblica, statica e void, ed inoltre devono essere messi gli argomenti della funzione – args[] – anche se all’interno del codice questi non vengono utilizzati).
Ora che avete chiaro tutto ciò vi starete giustamente chiedendo a cosa serve l’#include? Cosa è il main()? A cosa servono le graffe? E i punti e virgola? Procediamo con ordine riportando il codice scritto nella lezione C precedente:
#include
main () { printf(“Hello World!”); } #include è una direttiva del preprocessore, un comando, che permette di richiamare le librerie standard del C. Senza librerie un programma non avrebbe a disposizione i comandi
Iniziamo creando un file prova.c. A questo punto è necessario includere un file di intestazione, in cui sono dichiarate le funzioni standard di input/output del C, di cui parleremo durante il resto del documento. Per far questo, iniziamo il programma in questo modo:
#include __
A questo punto dobbiamo dichiarare la funzione main , che come spiegato prima, ci permetterà di eseguire il programma. Ciò va fatto aggiungendo il seguente codice:
int main () {
}
In questo modo abbiamo dichiarato la funzione main che per la semplicità estrema di questo programma di esempio, conterrà tutto il codice necessario. Se tentassimo di compilare il file prova.c così ottenuto
#include __
int main () {
}
otterremmo un programma perfettamente funzionante ma che non esegue nessuna operazione (provare per credere). Per creare un primo programma che stampi la classica frase "Hello world!" sul video, utilizzeremo la funzione di libreria printf , di cui parleremo in seguito, in questo modo:
printf ("Hello world! \n ");
Questo codice va inserito tra le due parentesi graffe della funzione main in questo modo:
#include __
int main () { printf ("Hello world! \n "); }
La sequenza di caratteri \n , è una sequenza di escape che consente di inserire un carattere new line in una stringa.
Se siete in ambiente linux, potete compilare ed eseguire questo file prova.c in questo modo:
$ gcc - o prova prova.c $ ./prova Hello world! $
dove $ indica la shell. In questo caso è stato utilizzato il compilatore gcc: il parametro - o prova indica che il file eseguibile deve chiamarsi prova ; mentre prova.c è il file sorgente che deve essere compilato. In questo esempio ho mostrato anche l'output del programma.
Ora proviamo a modificare questo programma per eseguire qualche operazione in più: dichiariamo tre variabili, assegnamo loro alcuni valori, facciamone la somma e stampiamola:
#include __
int main () { int a = 5 , b = 10 , risultato;
risultato = a + b;
printf ("La somma di %d e %d è uguale a %d \n ", a, b, risultato);
return 0 ; }
In questo esempio abbiamo introdotto alcune novità: dichiarazione di più variabili in un'unica riga, novità sull'utilizzo della funzione printf, l'aggiunta dell'istruzione return 0. Andiamo per ordine. Precedentemente avevamo dichiarato sempre una sola variabile per volta, è possibile però dichiarare più variabili separandole con una virgola, purché siano tutte dello stesso tipo.
La variabile risultato non è stata inizializzata durante la dichiarazione perché viene comunque inizializzata alla riga 6, quando le viene assegnata la somma dei valori delle variabili a e b.
Il Link editor ha il compito di collegare tutti i file oggetto risolvendo eventuali dipendenze e creando il programma (che non è altro che un file eseguibile).
Ricordiamo che tutte queste operazioni, per quanto molto avanzate, possono individuare facilmente errori di sintassi, ma mai e poi mai potranno trovare errori logici (come ad esempio un ciclo che non finisce), anche se spesso vengono segnalati dei Warning che non costituiscono errore, ma che segnalano parti di codice strane e quindi sulle quali porre attenzione per eventuali errori logici. Qui ci viene in aiuto il debugger che ha il compito di aiutare a gestire la correzione degli errori con svariati strumenti come i breakpoint ed i watchpoint. Avete ancora il vostro file “hello.c”? spero di si, perché è giunto il momento di compilarlo; se possedete un ambiente di sviluppo come Dev-C++ o Visual C++ dovete solamente cercare il comando “Compila” od “Esegui”, il programma provvederà, non solo ad eseguire tutte le operazioni citate, ma, una volta compilato, manderà in esecuzione il vostro programma presentandovi il risultato a video.
Per chi stesse usando, invece, compilatori come il DJGPP o GCC , la compilazione (intesa in tutte le sue fasi) deve essere fatta da riga di comando (dalla shell per capirsi), e, successivamente, sempre da riga di comando, si deve lanciare il file eseguibile risultante (in linux con gcc, di default il file eseguibile si chiama a.out , mentre in ambiente Dos/Windows generalmente ha lo stesso nome del sorgente ma con estensione .exe , invece che “.c”). Per compilare basta posizionarsi nella solita cartella dove risiede il file sorgente e scrivere:
Adesso avete visto un riassunto di come si possa scrivere un programma e compilarlo, tanto perché non vi troviate disarmati quando procederemo con le spiegazioni; molti dei concetti sopra esposti verranno approfonditi mano a mano che procediamo, come la strutturazione del linguaggio, la compilazione, le funzioni disponibili nelle varie librerie.