Sei sulla pagina 1di 4

INTRODUZIONE ALLA PROGRAMMAZIONE IN C (Capitolo 2)

Alcune notazioni di base

//… /*…*/
Queste due notazioni vengono usate per scrivere un commento all’interno del codice. I comenti sono inseriti
per documentare i programmi e migliorare la leggibilità degli stessi. Vengono ignorati dal compilatore C e
non inducono la generazione di alcun codice.

Prima di scrivere un qualsiasi programma, è importante includere all’interno del codice opportune funzioni
standard, fondamentali per l’esecuzione del codice da parte del compilatore.
Tutto ciò può essere fatto tramite il comando #include <…>. Una libreria che non può mai mancare
all’interno di un programma C è: #include <stdio.h> (“standard input/output”) contenente le funzioni
preimpostate fondamentali per la programmazione in C.

Le { } sono i confini della scrittura del nostro codice ed opereremo sempre all’interno di esse. La porzione di
programma racchiusa in esse è spesso detta blocco.

Quando si inizia a scrivere un programma, è importante partire sempre da una funzione principale (che verrà
eseguita per prima).

main () {…} all’interno delle parentesi graffe troveremo il blocco di costruzione del programma chiamato
funzione (principale in questo caso). All’interno delle parentesi tonde invece, generalmente
troviamo gli input della funzione.

I programmi in C possono contenere una o più funzioni, tuttavia una deve essere sempre la funzione main ().

Una funzione (o sottoprogramma) che posso chiamare quando mi serve si scrive in questo modo:
1. Trovare il nome per la funzione
2. Indicare tra le parentesi un parametro di input formale preceduto dal suo tipo di dato
3. Indicare prima del nome della funzione il tipo di dato che mi aspetto di avere come output.

ESERCIZIO:

#include <stdio.h>
#include <math.h>
float radiceq (float y) {
float z, epsilon = 0.0001;
z = y;
while (fabs(z*z - y) > epsilon) { /*fabs indica la funzione valore assoluto*/
z = (z + y/z)/2;
}
return z;
}

main() {
printf("%f\n", radiceq(2));
}
Compilazione
Il processo di compilazione, è la traduzione di una serie di istruzioni scritte in un determinato linguaggio di
programmazione (codice sorgente) in istruzioni di un altro linguaggio (codice oggetto).
Come compilatore ci serviremo del terminale di Linux. Di seguito troviamo alcuni dei comandi più
importanti:
cd nome_cartella/ consente di cambiare la directory corrente in quella indicata;
cd .. porta alla directory superiore (o padre);
cd ~ porta nella directory home;

pwd mostra la directory corrente;

ls (opzioni) (nome) visualizza il contenuto di una directory in lista;


possiamo anche richiedere informazioni aggiuntive tramite i comandi:
-a lista anche i file nascosti
-l mostra tutte le informazioni per ogni file (formato lungo)
-k dimensione dei file è in Kb (normalmente è in byte).
-F classifica i file a seconda del tipo.

cp file1 cart1 copia file1 dentro la directory cart1;


cp -r cart1 cart2 copia tutta la directory cart1 dento a cart2;

mv vecchio nuovo rinomina un il file;


mv file1 cart1 sposta il file1 nella cart1;

cat file1 visualizza il contenuto del file1;

df –h visualizza lo spazio libero sul disco;

mkdir creo una directory;

rm file1 file2 vengono eliminati (definitivamente) i file1 e file2;


rm *.* cancella TUTTO il contenuto della directory corrente. Le eventuali directory presenti
non saranno rimosse;
rm -rf cart1 elimina tutto il contenuto della cart1;

altri comandi utili possono essere facilmente trovati su internet.

Comando di esecuzione
Per Linux è disponibile un compilatore integrato C/C++: questo può essere richiamato tramite i comandi gcc
(per il C) e g++ (per il C++)
1. Accedi alla directory in cui hai salvato il codice sorgente del programma da compilare;
2. Digita il comando: gcc nome_programma.c -o nome_assegnato_al_file_compilato;
3. Esegui il file del programma appena compilato: ./nome_assegnato_al_file_compilato.

Tipi di dato
Quando introduco un dato devo sempre dire che tipo di dato sto immettendo e dove andrà memorizzato.
Esistono vari tipi di dato, tuttavia tutti possono essere ricondotti a due specifiche famiglie: atomici (non
divisibili) e strutturati (tipi di dato composti da più dati atomici).

Il tipo booleano ha due soli valori: true ("vero") e false ("falso"). Essi vengono utilizzati in modo speciale
nelle espressioni condizionali per controllare il flusso di esecuzione e possono essere manipolati con gli
operatori booleani AND, OR, NOT e così via.
I tipi di dati numerici includono i numeri interi (int) e i numeri razionali in virgola mobile (float a
precisione singola 32bit o double a precisione doppia 64 bit).

Il tipo carattere (char) contiene un carattere, memorizzato in byte che generalmente segue il sistema ASCII


che implementa la codifica dei caratteri fino a 7 bit (128 caratteri possibili).

I dati sono immessi secondo la seguente dicitura:


tipo di dato _ nome della variabile = assegnazione alla variabile di un valore coerente con il tipo di dato;

Specificatori di formato delle variabili in C


In C esistono vari tipo di variabili, che servono per rappresentare tipi di dato diversi:
char = %c
int = %d
unsigned int = %n
float = %f
str = %s

per definire il grado di precisione (in particolar modo per quando riguarda i float) bisogna utilizzare la
notazione %.nf con n uguale al numero delle cifre che voglio visualizzare dopo la virgola.
Se andiamo oltre l’intervallo di bit possibili per ogni tipo di dato il compilatore non ci darà un errore, bensì
un valore di output diverso da quello previsto.

Funzione printf()
La funzione printf(), permette di visualizzare sul terminale una stringa di caratteri.

printf(“welcome to C!”); riporterà schermo esattamente la stringa welcome to C!

Sequenza di escape
Il carattere backslash (/) è detto carattere di escape. Esso indica alla printf che dovrà fare qualcosa fuori
dall’ordinario. Nel momento in cui avrà incontrato un backslash in una stringa, il compilatore guarderà il
carattere succesivo e lo unirà con il backslash per formare una sequenza di escape.

Di seguito alcune sequenze di escape:


\n: Newline _ posiziona il cursore all’inizio della riga successiva
\t : Tabulazione orizzontale _ muovee il cursore alla tabulazione successiva
\a: Allarme _ il sistema emette un suono
\\ : Backslash _ inserisce un carattere backslash
\”: Virgolette _ inserisce un carattere virgolette

Funzione scanf()
La funzione scanf permette al compilatore di leggere e salvare data immessi dalla tastiera.

scanf(“%d”,&int1); “%d” è la stringa di controllo del formato (in questo caso intero decimale). Inserire
il tipo di dato serve per far capire al compilatore quanta memoria dovrà riservare per
eseguire tale programma e che tipo di dato l’utente scriverà sulla tastiera.
& è l’operatore di indirizzo. Questo collega la variabile (in questo caso int1) a una
locazione di memoria dove il carattere immesso potrà essere immagazzinato.
ESERCIZIO (printf e scanf):

#include <stdio.h>

main() {
int a; ← inizializzazione variabile
printf("Immetti sulla tastiera un numero intero: ");
scanf("%d", &a);
printf("Il numero immesso e': %d\n",a);
return 0;
}

ESERCIZIO: Sviluppa un programma prese due variabili a, b ne scambia il valore a esse collegato

#include <stdio.h>

void scambia( float*, float* );

void main(){
float a = 3, b = 5;

scambia(&a, &b);

printf("%f, %f\n", a, b);


}

void scambia( float *x, float *y){


float t;

t = *x;
*x = *y;
*y = t;
}