Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
Esempi:
int a; è possibile separare, nel caso in cui si dovessero dichiarare diverse
int b,c[10],d[2][5]; variabili che contengono lo stesso tipo di dato, mediante la virgola.
char e,f; Attenzione! Per come sono scritti “e” e “f” possono contenere UN
float g; SOLO carattere. Nel caso di h[5], esso può contenere un massimo di 5
caratteri, ma il caso delle stringhe lo vedremo più avanti
(c[10] e d[2][5] sono rispettivamente un array e una matrice, che
studieremo più avanti)
Attenzione! Non è possibile assegnare a variabili un nome che appartiene ad una funzione o ad
una parola chiave del linguaggio (ad esempio int, float ecc. sono parole chiave); le parole chiave
sono facilmente identificabili perché il compilatore le mette in evidenza applicando loro il
grassetto.
Una variabile può essere di due tipi diversi:
- Globale: se viene dichiarata al di fuori delle funzioni; in questo caso può essere letta e
modificata da qualsiasi sottoprogramma (sinonimo di funzione) scritta nel codice
- Locale: se dichiarata all’interno di una funzione; così facendo può essere letta e modificata
solo da quel particolare sottoprogramma in cui è definita.
A volte si richiede di dover passare uno o più valori da una funzione ad un’altra.
Nel corso non sono state svolte le funzioni e passaggio di variabili da una funzione ad un’altra
Solitamente una variabile locale viene dichiarata a inizio funzione (ricorda che il main è anch’esso
una funzione), ma ciò non toglie che si possa dichiarare in qualsiasi altro punto del codice.
Attenzione! Per essere utilizzata una variabile deve essere dichiarata in un punto precedente alla
riga di codice in cui si utilizza.
Una variabile può essere anche inizializzata (gli si può affidare un valore) direttamente nella sua
dichiarazione.
Esempi:
int a,b,c; Corretto: ogni variabile è stata dichiarata prima di essere utilizzata
c=b+a; Sbagliato: il compilatore restituirà un errore perché non sono state
inizializzate le variabili a e b (non sa cosa inserire nella variabile c)
int a=5,b=4; Corretto: a e b sono state inizializzate
c=a*b; Sbagliato: la variabile c è stata dichiarata dopo essere stata utilizzata, di
int c; conseguenza verrà visualizzato un messaggio di errore
Vedremo più avanti come non sia necessario stabilire un valore (numero o carattere) per una
variabile in quanto può essere richiesta l’immissione da parte di un operatore (richiesta a video).
Se nel programma abbiamo bisogno di un valore definito possiamo sfruttare la #define. Questa è
particolarmente utile in fase di scrittura e test del programma, perché ci permette di sostituire
valori alti che ci farebbero perdere tempo testando il programma (= provando ad eseguirlo) con
valori molto ridotti controllando quindi se ci sono grossi errori strutturali; il tutto senza dover
cercare e cambiare nel programma numero a numero.
Define: #define nome valore
Attenzione! Non devono esserci né operatori di assegnamento (=) né punti e virgola (;).
Errori comuni
Qui NON tratteremo di array, matrici, stringhe o strutture, in quanto non ancora trattati come
argomenti
È importante sapere come dichiarare le variabili e ancora di più cosa succede operando con queste
ultime se di tipo diverso.
Le variabili int sono numeri interi, quindi se inizializzate con un numero decimale, o comunque se
venisse effettuata un’istruzione di assegnamento da un numero float a uno decimale risulterebbe
troncata la parte decimale.
Attenzione! Operazioni tra int (float) restituiscono int (float). Operazioni tra int e float
restituiscono un valore float.
Attenzione! Il fatto che venga restituito un valore float non implica che venga salvato come tale: se
la variabile a cui si assegna il valore è una variabile di tipo int, la parte decimale viene troncata.
Esempi:
int a=3,b=5,c; Al termine dell’esecuzione “c” assume il valore 5/3=1 perché, essendo
c=b/a; un’operazione diretta tra due numeri interi, le cifre decimali vengono troncate
int a=3,b=5; Come prima, solo che, essendo “c” una variabile di tipo float, il valore finale
float c; non sarà 1, bensì 1.0
c=b/a;
float c=5/3.0; “c” assume il valore 1.6666 perché è il risultato di un’operazione tra un intero e
un float e la variabile stessa è dichiarata come float (quindi non viene troncata
la parte decimale)
Per quanto riguarda l’inizializzazione di variabili char, esse vengono dichiarate ponendo IL
carattere tra due apici:
Dichiarazione char: char NomeVariabile = ’lettera’;
dove in “lettera” va messa un’unica lettera.
Esempi:
char a=’b’; Corretto: inserita un’unica lettera e tra apostrofi
char a=”b”; Errato: non si può inizializzarla tra virgolette
char a=’bb’; Errato: non possono essere inserite due o più lettere
char a=’\n’; Attenzione! Corretto: i caratteri di escape sono considerati come un carattere
char a=’7’; “a” contiene il settimo carattere della tabella ASCII
Attenzione! Incrementando una variabile char di uno (o decrementandola), viene modificata
assumendo il valore della tabella ASCII successivo (o precedente)
Printf
Il comando printf() è un comando di stampa a video, e serve per visualizzare a chi manda in
esecuzione il programma cosa sta succedendo, ovvero ad esempio cosa deve inserire o cosa gli è
stato mandato a video.
Senza nemmeno un comando di stampa a video l’operatore non avrebbe traccia né modo di
conoscere ciò che sia successo o comunque se i calcoli che ha eseguito siano andati a buon fine.
Stampa a video: printf ( “ messaggio stampato a video “ );
Attenzione! Vanno messe le virgolette e non gli apostrofi. Verrà stampato solo ciò che è tra esso
compreso.
Esistono dei caratteri speciali (caratteri di escape), formati da un backslash e da una lettera;
ognuno ha compiti diversi. I principali sono:
\n Manda a capo per la stampa di testo successivo
\t Sposta il testo che segue di una tabulazione
Esempi:
printf(“Hello World\n”); stampa la scritta Hello World e poi manda a capo
printf(“ \n Hello World”); manda a capo e poi stampa la scritta Hello World
printf(‘Hello World’); Sbagliato: non si possono usare gli apostrofi
printf(“Hello \n World”); stampa Hello, manda a capo e poi scrive World
printf(“Hello\n”); scrittura equivalente a quella precedente, solo che abbiamo
printf(“World”); utilizzato due istruzioni, aumentando la lunghezza del codice
All’interno del printf() si può aggiungere la stampa di una o più variabili.
In base al tipo di dato viene utilizzato un codice diverso:
%d Stampa di un decimale (un solo numero); d=decimale
%f Stampa di un reale; f=float
%c Stampa di un carattere (uno solo); c=char
%s Stampa di una stringa (non abbiamo ancora visto cosa sia una stringa, ma è bene
segnarlo qui per completezza delle informazioni)
Questi vanno inseriti all’interno delle virgolette, e successivamente, dopo alla chiusura di queste
ultime, va messa una virgola alla quale seguono la o le variabili relative a ciò che si vuole stampare.
Attenzione! L’ordine delle variabili deve essere quello in cui compaiono i %d, %f, %c o %s inseriti
nel printf, altrimenti il compilatore segnalerà il relativo errore (se mettiamo il %d a un char ad
esempio).
Stampa con variabili: printf( “ Messaggio %Tipo1 %Tipo2 “ , Variabile1 , Variabile2 );
Attenzione! Tipo1 e Tipo2 vanno sostituiti con d, f, c o s in base al tipo della variabile, mentre al
posto di Variabile1 e Variabile2 vanno messi i nomi delle variabili da voler stampare
Esempio:
int a=1,b=5; corretto: se avessi per caso invertito “a” e “b” non mi
char c=’m’; avrebbe segnalato un errore, ma avrebbe semplicemente
scambiato di posto i valori stampati a monitor. Se invece
printf(“Variabili: %d %d %c\n”,a,b,c); avessi messo “c” al primo o secondo posto sarebbe stato
visualizzato un messaggio di errore
Per quanto riguarda la stampa delle variabili esistono delle modifiche apportabili per rendere più
gradevole la visualizzazione del testo stampato a terminale (monitor).
Per quanto riguarda il %d possiamo inserire tra il % e la d un numero, che indica il numero di cifre
riservate per la stampa del numero; insorgono problemi quando il numero di queste ultime è
maggiore dello spazio indicato nel codice. Se invece il numero risulta più “corto” dello spazio
dedicato a lui, esso verrà allineato a destra
Esempio:
int a=534; Stampa il numero 534 riservandogli spazio per massimo 5 cifre, che
printf(“a= %5d\n”,a); verranno allineate a destra, quindi visualizzeremo due spazi vuoti tra
l’uguale e la prima cifra del numero.
Per il %f anziché decidere quanto spazio riservargli, possiamo stabilire quante cifre decimali
lasciare; otteniamo ciò interponendo tra il % e la f un numero (il numero di cifre decimale
desiderate) precedute dal punto.
Esempio:
float pi= Stampa pi greco con solo le prime due cifre decimali, in quanto tra % e f
3,141592;
printf(“%.2f\n”,pi); abbiamo inserito .2. Se avessimo inserito ad esempio .4 avrebbe
stampato 3.1415
Scanf
La scanf() è l’istruzione complementare al printf(); serve a leggere dati immessi da tastiera per
poterli poi utilizzare nello svolgimento del programma.
Se non esistesse lo scanf() non potremmo ad esempio sviluppare applicazioni che permettono
anche solo di svolgere la somma tra due numeri richiesti a monitor dall’utente.
Acquisizione dati: scanf ( “ %TipoVaribile “ , &NomeVariabile );
Attenzione! Al posto di TipoVariabile va inserito appunto il tipo della variabile (d, f, c o s), mentre
al posto di NomeVariabile va messo il nome della variabile nella quale deve essere salvato il valore
immesso da tastiera. Ricorda che la variabile deve essere stata dichiarata in precedenza.
Attenzione! se il tipo di variabile è una stringa (%s) non va messa la e commerciale (&).
È buona norma prima di mettere uno scanf() inserire un printf() nel quale illustrare l’utente su
cosa deve inserire (perché se ci sono più inserimenti non si può sapere quale sia il dato immesso, e
oltretutto se non si vengono a verificare errori nell’acquisizione di dati).
Esempi:
int numero; Acquisizione intero
scanf(“%d”,&numero);
float numDec; Acquisizione decimale
scanf(“%f”,&numDec);
char stringa[30]; Acquisizione stringa. Nota che prima di stringa NON c’è la e
scanf(“%s”,stringa); c