Scopo di questa sessione è di continuare ad esercitarsi con l' interprete di comandi (bash) in ambiente UNIX, apprendere il ciclo basilare di scrittura di semplici programmi C, loro compilazione ed esecuzione. I programmi si limitano a leggere un input e mostrare l' output, eventualmente dopo semplici elaborazioni Già così si dispone di un potente strumento di calcolo.
#include <stdio.h>Verificare con in comando ls quali sono i files presenti nella directory. Compilare il programma con il comando
int main()
{
char inputchar; /* input è il nome di una variabile di tipo carattere*/
scanf("%c",&inputchar); /* istruzione di lettura da stdin */
printf(" %c \n",inputchar); /* istruzione di scrittura su stdout */
return 0;
}
gcc -std=c99 -pedantic primo.cVerificare con il comando
man gcc
ls -lquali sono e quanto sono grandi i files presenti.
ATTENZIONE: si puo' fare in modo che il compilatore generi il file eseguibile direttamente con un nome assegnato (invece del default a.out) mediante l' istruzione
gcc -std=c99 -pedantic -o secondo.x secondo.c
cpp primo.c primo.icpp e'il preprocessore che legge il file primo.c per generare il file sorgente C, primo.i, in cui le direttive del proprocessore sono state eseguite.
gcc -c primo.iviene generato da primo.i (senza più passare per il preprocessore) un file primo.o che contiene le istruzioni macchina relative al solo sorgente e quindi non eseguibili (provare ad eseguire primo.o).
gcc primo.oviene generato il file a.out contenente le istruzioni macchina in forma eseguibile.
cd ~/Labo2/dir # cambia la working directory
ls -l # lista tutti files presenti
n=0 # azzera la variabile n (contatore)
elenco_files=* # il carattere speciale * viene sostituito dai
# nomi di tutti i files presenti nella directory
# corrente
for nome in $elenco_files # itera su tutti i nomi dei files (ogni volta
# la variabile "nome" assume un diverso valore)
do
if ( [ ! -d $nome ] ) # quel che segue fino a fi viene eseguito solo
then # se il file di nome $nome NON (!) e'una dir
n=$[$n+1] # il contatore viene incrementato
mv $nome $nome.$n # si cambia nome a ciascun file aggiungendo al vecchio nome un intero progressivo
fi
done # fine del blocco da iterare
pwd # scrive la dir corrente
a=4 # attribuisce 4 come valore della variabile a
echo $[$a*2] # valuta il prodotto del valore di a per 2 e lo mostra su schermo
Nella lettura e scrittura di dati corrispondenti a numeri reali,
le istruzioni scanf
e
printf richiedono un descrittore di conversione %f (o %e) invece di %c,
come
nel programma primo.c, o di %d, come nel caso di lettura e scrittura di
interi.
(Suggerimento: per immettere valori reali molto grandi o
molto
piccoli e' preferibile usare la notazione scientifica per le costanti:
2.3
1035 in C si scrive 2.3e35, 7 10-23 diviene 7e-23)