Obiettivo del corso e' quello di imparare ad implementare idee nel linguaggio di programmazione C ed a capire cosa succede nel nostro elaboratore quando eseguite un programma. Il corso contiene molti esempi. E' importante che ogni esempio venga non solo letto e capito, ma soprattutto provato, modificato, anche riutilizzato.
Le lezioni di questo sito sono cosi' articolate:
Prima di iniziare il corso si consiglia assolutamente di leggere queste informazioni.
OBIETTIVO DELLA LEZIONE
Capire cosa e' un programma, come possa diventare eseguibile su un processore attraverso la compilazione, quali sono gli strumenti per iniziare a scrivere programmi ed a eseguirli e e dove trovarli in rete.
#include <stdio.h> int main() { printf("Hello World!"); }Vediamo la stessa stampa a video in linguaggio Java.
class helloworld { public static void main(String args[]) { System.out.println("Hello World!"); } }Nel linguaggio Fortran, ancora diffuso per simulazioni numeriche, sarebbe stato:
PROGRAM HELLOWORLD C Le prime sei colonne sono vuote WRITE(UNIT=*,FMT=*) 'Hello World!' END
#include <stdio.h> int main() { int x; int i; x = 1; i=x+3; printf("Il risultato di i=x+3 e' %d" , i); getchar(); // trucco per far rimanere aperta la finestra di testo }l'istruzione C
i=x+3;diventa qualcosa del tipo (Microsoft Assembler)
mov eax, [x] add eax, 3 mov [i], eax
eax
è un registro del processore; [x]
è il contenuto della cella di memoria di indirizzo x
.
#include <stdio.h> int main() { char sex; int eta; printf("Inserire il proprio sesso:\n M sta per maschio:\n F sta per femmina:\n"); scanf("%c", &sex); printf("Inserire l'eta\n"); scanf("%d", &eta); if((sex=='M') || (sex=='m')) printf("Sei un maschio e hai %d anni", eta); else printf("Sei una femmina e hai %d anni",eta); printf("\n\nPremi un tasto per uscire"); fflush(stdin); getchar(); // trucco per far rimanere aperta la finestra di testo }
Un programma scritto il linguaggio C deve contenere, nell'ordine:
... if((sex=='M') || (sex=='m')) printf("Sei un maschio e hai %d anni", eta); else printf("Sei una femmina e hai %d anni",eta); ....Modo2:
.... if((sex=='M') || (sex=='m')) { printf("Sei un maschio e hai %d anni", eta); } else { printf("Sei una femmina e hai %d anni",eta); } ...
Abbiamo visto cosa serve un compilatore. Ma come si utilizza? Il modo più semplice è attraverso un "Ambiente di sviluppo", cioè un software che ci permette di editare il file, di produrre l'eseguibile premendo un tasto e di controllarne l'esecuzione nel caso ci siano comportamenti anomali ("debug" del codice).
Microsoft Visual Studio .NET è un tipico ambiente di sviluppo per piattaforma Windows.
Un ambiente freeware alternativo è Dev-C++. Vi suggeriamo di utilizzare questo IDE durante le esercitazioni. Lo si può scaricare da qui.
In alternativa possiamo utilizzare direttamente il compilatore da riga di comando. Come?
Apriamo un "prompt" dei comandi (Start->Programmi->Accessori->Prompt dei comandi).
Invochiamo il compilatore (GCC è un compilatore freeware multipiattaforma, lo stesso utilizzato a nostra insaputa da Dev-C++.) con:
C:>gcc -o helloworld.exe helloworld.c
Oppure in due "passate" (prima produco il codice oggetto poi lo unisco ("link") alle librerie necessarie:
C:>gcc -c helloworld.c C:>gcc -o helloworld.exe helloworld.o
Il precompilatore (come commento/accenno)
titano\miaDir\ \lez1\ hallo.c eccc \lez2\ tutti i file della lezione 2 ....eccma anche su un tuo supporto (dischetto, chiavetta USB, posta elettronica..).
Esercizio 1
Usando NOTEPAD, creare il file halloword.c copiando il programma sotto riportato e compilarlo con DEV-C
# include <stdio.h> int main() { printf("Hello World!"); }
Esercizio 2
Compilare il file halloword.c con il compilatore gcc da riga di comando. Esplorare le varie opzioni di compilazione chiamando l'help.
- Per prima cosa apriamo un command prompt;
- VERIFICHIAMO di essere nella cartella dove abbiamo messo il file da compilare!
- Aggiungiamo al PATH la cartella dove è installato il GCC, per esempio in C:\Dev-Cpp\bin
con set PATH=%PATH%;C:\Dev-Cpp\bin- Invochiamo il compilatore come spiegato a lezione.
Se non diversamente specificato, da adesso in poi, useremo sempre in aula TUTTI DEV-C. A casa, prova sempre ad usare altri compilatori e a compilare da riga di comando.
Esercizio 3
Usando l'interfaccia grafica di DEV-C, creare il file sesso.c copiando il programma sotto riportato , compilarlo con DEV-C
#include <stdio.h> int main() { char sex; int eta; printf("Inserire il proprio sesso:\n M sta per maschio:\n F sta per femmina:\n"); scanf("%c", &sex); printf("Inserire l'eta\n"); scanf("%d", &eta); if((sex=='M') || (sex=='m')) printf("Sei un maschio e hai %d anni", eta); else printf("Sei una femmina e hai %d anni",eta); printf("\n\nPremi un tasto per uscire"); fflush(stdin); getchar(); // trucco per far rimanere aperta la finestra di testo }
Esercizio 4
Inziamo a vedere come si manifestano gli errori di sintassi in C.
Dal programma dell'esercizio precedente togliere getchar(); compilare, cosa cambia?
Togliere il punto e virgola a int eta; cosa accade? Dove si manifesta l'errore? Perche'?
Togliere una graffa in varie posizione del costrutto if. cosa accade? Dove si manifesta l'errore? Perche'?
Modificare (sex=='m') in (sex='m') cosa cambia?
Esercizio 5
Svolgere l'esercizio seguendo le indicazioni di seguito riportate.
Leggi attentamente il programma:#include <stdio.h> int main() { char sex; int eta; printf("Inserire il proprio sesso:\n M sta per maschio:\n F sta per femmina:\n"); scanf("%c", &sex); printf("Inserire l'eta\n"); scanf("%d", &eta); if((sex=='M') || (sex=='m')) printf("Sei un maschio e hai %d anni", eta); else printf("Sei una femmina e hai %d anni",eta); printf("\n\nPremi un tasto per uscire"); fflush(stdin); getchar(); // trucco per far rimanere aperta la finestra di testo return 0; }Ora prova a rispondere ai quesiti di seguito elencati.
- E' presente una direttiva per il pre-complilatore?
- Perché è presente una parte di codice chiamata main?
- Dove vengono definite le variabili e quante sono?
- Dove inizia e finisce la parte esecutiva?
Controlla le tue risposte con questa soluzione:#include <stdio.h> // direttiva int main() // tutti i programmi C devono contenere una parte che si chiama main { char sex; // dichiarazione prima var. int eta; // dichiarazione seconda var. // inizio parte esecutiva printf("Inserire il proprio sesso:\n M sta per maschio:\n F sta per femmina:\n"); scanf("%c", &sex); printf("Inserire l'eta\n"); scanf("%d", &eta); if((sex=='M') || (sex=='m')) printf("Sei un maschio e hai %d anni", eta); else printf("Sei una femmina e hai %d anni",eta); printf("\n\nPremi un tasto per uscire"); fflush(stdin); getchar(); // trucco per far rimanere aperta la finestra di testo return 0; // fine parte esecutiva }
Esercizio 6
Prova a rispondere alle seguenti domande.
Se non trovi le risposte o non sei sicuro, rivedi la lezione.
-------------------------------------------------------------------------------- 1. Un programma scritto in Fortran, C o Java è: - un file di testo - una sequenza di istruzioni in linguaggio macchina - un insieme di 0 e 1 - una sequenza di numeri binari che il processore può interpretare -------------------------------------------------------------------------------- 2. Il C è un linguaggio di quale livello? -------------------------------------------------------------------------------- 3. Esiste un linguaggio di programmazione migliore degli altri? -------------------------------------------------------------------------------- 4. Cosa è un programma eseguibile? -------------------------------------------------------------------------------- 5. Cosa è il codice assembly? -------------------------------------------------------------------------------- 6. Una istruzione in C corrisponde sempre ad una istruzione assembly? -------------------------------------------------------------------------------- 7. La definizione di una etichetta può essere posta: - ovunque, tanto è una sostituzione che avviene a livello di pre-compilazione, ma e' prassi inserirla sopra il main del programma - solo sopra il main del programma --------------------------------------------------------------------------------
Esercizio 7 (facoltativo)
Compilare il file halloword.c creato nell'esercizio 1 con Microsoft .NET
Compilare il file halloword.c creato nell'esercizio 1 con Microsoft Visual Studio .NET. La procedura e' in questo caso piu' laboriosa perche' dobbiamo necessariamente definire un progetto. Quindi:
- Per prima cosa apriamo MSVS .NET;
- Dal menu' file, selezioniamo nuovo progetto. Scegliamo un progetto "Visual C++" (anche se noi inseriremo solo un file C), per win32. IMPORTANTE: nel menu' successivo, tra le opzioni avanzate, ricordarsi di selezionare che volete una applicazione di CONSOLE che sia VUOTA (il file lo aggiungeremo manualmente al prossimo punto).
- A questo punto dal menu file, aggiungiamo al progetto il nostro file halloword.c
- Possiamo compilare il progetto ed eseguirlo.