IL LINGUAGGIO C Sviluppato agli inizi degli anni `70 nei Bell

Transcript

IL LINGUAGGIO C Sviluppato agli inizi degli anni `70 nei Bell
IL LINGUAGGIO C
Sviluppato agli inizi degli anni '70 nei Bell Laboratories per
ricerca, ha caratteristiche che lo rendono ideale per uso
scientifico. Si sviluppa e si diffonde parallelamente a Unix.
•
È “portabile” Programmi scritti in C possono essere
eseguiti su piattaforme hw/sw diverse.
•
Facilita approccio strutturato e ordinato al progetto di
programmi
•
Ha standard dal 1990
ANSI/ISO C
Il linguaggio C è il più usato per la scrittura dei nuclei di sistema
operativo e di altre operazioni di basso livello, come driver per il
controllo di periferiche; è stato pensato come sostituto
dell’assembler per aumentare la portabilità dei programmi. La
sua traduzione in codice macchina risulta molto diretta e le
tecniche di ottimizzazione del codice sono ben sviluppate.
Conoscendo il C, in pochi giorni si può imparare il C++ .
NOSTRO APPROCCIO AL C
Sempre con esempi che illustrano le caratteristiche del linguaggio.
SCRIVERE ED ESEGUIRE IL PRIMO PROGRAMMA C
•
Scrivere un file sorgente di nome hello.c:
/* Il mio primo programma */
#include <stdio.h>
int main()
{
printf("Ciao\n");
return 0;
}
•
Creare il file eseguibile (di nome a.out) con il comando:
gcc hello.c
•
Eseguire a.out nel modo seguente:
a.out
oppure in questo modo:
./a.out
La funzione main può ricevere argomenti (che per ora ignoriamo)
e ritornare un numero intero; quando il main ritorna, cioè incontra
una istruzione return, il programma termina;
• se ritorna zero vuol dire che il programma ha avuto successo,
• se ritorna non-zero vuol dire che c’è stato un errore; il numero
ritornato può indicare il tipo di errore riscontrato (se chi ha
chiamato il programma sa come usarlo).
Ogni programma C è espresso come una sequenza di funzioni che
possono ritornare un valore oppure nessun valore.
Il C è un linguaggio tipizzato: il tipo di ogni variabile deve essere
esplicitamente dichiarato dal programmatore.
Il fatto di scrivere le istruzioni su righe diverse è una pura
convenzione stilistica che serve per identificare a colpo d’occhio
le istruzioni di un programma.
I commenti sono porzioni di testo che non vengono considerate
dal compilatore al momento di generare il file oggetto; vengono
inseriti normalmente per permettere una più facile lettura o
rilettura e comprensione del codice. È sempre buona norma
commentare un programma spiegando come, perchè e cosa fa.
Due opzioni per scrivere commenti:
• delimitati da
/* e
*/
• estesi da
//
fino alla fine della riga
(forma che viene dal C++)
Esempio:
/* questo e' un commento */
// anche questo e' un commento
/ * anche questo
e'
un commento su più righe */
Oss. Il comando unix (da provare):
echo $PATH
specifica il cammino di ricerca che il S.O. segue per trovare i files
da eseguire.
Se il cammino non contiene la directory corrente (che si indica
con un punto) occorre aggiornare la variabile PATH, o in modo
temporaneo con il comando:
PATH = $PATH:.
o in modo permanente (scrivendo tale comando nel file .bashrc )
così in questo modo l'esecuzione di a.out avviene sempre con
successo.
Oss.
•
Si può creare il file eseguibile con un nome a piacere, ad es.
con il nome salutami, usando il comando:
gcc -o salutami hello.c
•
Eseguire salutami:
salutami
•
Si può redirezionare l'output su un file a piacere di nome,
ad esempio, risultato:
a.out > risultato
•
Osservare il contenuto del file risultato con il comando:
cat risultato
PER LAVORARE A CASA
CON PROFITTO E SEMPLICITÀ
Cominciate ad eseguire il programma hello.c a casa sul vostro
computer seguendo le istruzioni seguenti. Se queste istruzioni non vi
bastano fatevi aiutare ma dovete farcela!
COME LAVORARE CON MAC OS
1) Scaricare ed installare Xcode (ambiente di sviluppo integrato
(Integrated development environment, IDE) sviluppato da Apple; è
gratuito)
Scrivere sul Desktop, usando l'editor di Xcode, il file hello.c seguendo le
istruzioni:
Xcode → File → New File → C and C++ → C File--> hello.c
2) Tra le Utilities c'è un Terminale che va avviato. Poi dal terminale digitare i
comandi Unix:
cd Desktop
ls
e proseguire normalmente come in classe.
Oss.
Potete usare Xcode per creare un progetto. Ma inizialmente è un pò più
complicato. Potete seguire le indicazioni sotto indicate aprendo le finestre:
Xcode → File → New Project → Command Line Utility → Standard Tool
Poi date un nome al progetto, ad esempio Prova, e salvatelo sul Desktop;
apritelo, scrivete nel main.c il vostro hello.c e cliccate su:
Buid and Run
Nei Products appare l'output del programma.
COME LAVORARE CON WINDOWS
1) Scaricare ed installare Dev-C++ (è un “full-featured Integrated
Development Environment (IDE); è gratuito ed è anche installato sui PC
del laboratorio a matematica.
Se invece volete installare Cygwin che è un ambiente “Linux-like” per
Window andate al link:
http://fdi.labmedinfo.org/FdIIB/lucidi/pratica/cygwininstallazione.pdf
2) Dopo aver installato Dev-C++ seguite le istruzioni:
1) file → new → source file
2) scrivere e poi salvare in hello.c :
#include <stdio.h>
#include <stdlib.h>
int main(){
printf(“Ciao\n”);
system(“PAUSE”);
return 0;
}
execute → compile & run
3)
Osservate dove viene messo l'eseguibile che è stato generato.
Le istruzioni seguenti serviranno più tardi per eseguire un programma
con redirezione dell'input o dell'output:
1) aprire la console di DOS (start → esegui → digitare “cmd” )
2) spostarsi nella cartella dove si è creato l'eseguibile (che in Dev- C ++ ha
estensione .exe) ad esempio con il comando:
cd Desktop
3) listare il contenuto della cartella con il comando:
dir
e controllare l'esistenza del file eseguibile e di eventuali files di dati.
4) eseguire il programma con la redirezione dell'input e/o dell'output; ad
esempio se l'eseguibile è hello.exe si può fare nel seguente modo:
hello.exe < dati.txt
> risultati.txt
Infine se avete installato Cygwin ricordate che l'eseguibile generato dal
comando gcc si chiama a.exe (non a.out).
Per eseguire un programma quindi basta scrivere semplicemente:
./a.exe
IN OGNI CASO
Qualunque sia il vostro ambiente di lavoro, cercate subito di eseguire i
primi programmi svolti insieme in classe.
Come inviare a casa gli esercizi svolti in classe
1) Con un browser andare sul sito www.unipv.eu e cliccare in alto su
webmail.
2) Cliccare su Webmail Studenti ed entrare con le vostre credenziali;
scrivere a voi stessi una mail con allegati i files che volete inviare.
SOMME/SOTTRAZIONI DI INTERI
USO DI FUNZIONI DI LIBRERIA
1) Scrivere un file sorgente di nome radice.c nel modo seguente:
/* programma che calcola la radice quadrata di un numero reale */
#include <math.h>
#include <stdio.h>
int main(){
float
x, z;
puts("Scrivi un numero reale:");
scanf("%f",&x);
z = sqrt(x);
printf("La radice quadrata di %f e' %f\n", x,z);
return 0;
}
Si è usata la funzione sqrt()della libreria matematica quindi occorre dire
al compilatore dove è definito il codice (programma) della funzione.
gcc radice.c –lm
gcc –o stamparadiceq radice.c -lm
In ogni caso l’output del file eseguibile, se l' input è 1.44, contiene:
La radice quadrata di 1.44 e' 1.2
2 ) Scrivere un file sorgente di nome potenza.c nel modo seguente:
/* programma che calcola la potenza di un numero
#include <math.h>
#include <stdio.h>
*/
int main(){
int
x, y, ris;
puts("Scrivi base ed esponente:");
scanf("%d%d",&x,&y);
ris = pow(x,y);
printf("%d^%d = %d\n", x,y,ris);
return 0;
}
L’output del file eseguibile, con i numeri 5 e 2 in input, contiene:
5^2 = 25
Oss: in questi due programmi tutte le variabili potevano essere dichiarate di tipo
double. Le variabili double si leggono con %lf e si stampano con %f.
UN PROGRAMMA IN ESECUZIONE
CHE LEGGE E SCRIVE
(FA INPUT/OUTPUT)
Memoria Principale
PROGRAMMA
IN
TASTIERA
ESECUZIONE
VIDEO
FILE SU DISCO
FILE SU DISCO
DATI
IN CORSO DI
STAMPANTE
ELABORAZIONE
N.B. Cosi come è possibile mandare (ridirezionare) l’output su un
file è anche possibile prendere (ridirezionare) l’input da file.
Si fa così:
a.out
come
< nomefileinput
> nomefileoutput
LE VARIE FASI DEL PROCESSO
1.
Edit
Editor
file sorgente (su disco)
hello.c
#include <stdio.h>
int main()
{
printf(“Ciao\n”);
return 0;
}
2.
Preprocess
Preprocessor
file di testo (su disco)
.
.
int
printf (const char*, ...);
int
scanf (const char*, ...);
int
fprintf (FILE*, const char*, ...);
.
int main()
{
printf(“Ciao\n”);
return 0;
}
3.
Compile
Compiler
file oggetto (su disco)
hello.o
001010101010000
101010100001011
110100101000101
file oggetto (su disco)
hello.o
001010101010000
101010100001011
110100101000101
altri files oggetto
(da librerie su disco)
0010101010100000
1111000101010101
1101010101111100
Linker
4. Link
file eseguibile (su disco)
a.out
010101010101010101010101010101010
101010101001110101000000000000001
5. Load
Loader
6. Execute
Memoria principale
010101010101010101010101010101010
101010101001110101000000000000001
CPU
N.B. Se vogliamo ottenere solamente il risultato della
compilazione, cioè solo il file oggetto, il comando è:
gcc –c
hello.c
e viene prodotto hello.o
Se poi vogliamo procedere con la generazione dell'eseguibile:
gcc
hello.o