Sei sulla pagina 1di 23

LINGUAGGIO C

Per permettere una pi facile utilizzazione della programmazione dei


microcontrollori PIC usando il linguaggio C esaminano le nozioni di base
del linguaggio C.
Il programma in C viene scritto mediante un EDITOR per testi, in
formato ASCII, senza formattazione. Quello che si ottiene il file
sorgente del tipo nome_file.cpp

Il programma sorgente, per divenire eseguibile, deve essere


opportunamente compilato, servendosi del compilatore proprio del
linguaggio che si sta adoperando. Quindi mediante il compilatore C il
sorgente viene trasformato in file oggetto del tipo nome_file.obj.

Il file oggetto mediante il Linker viene tradotto nel file eseguibile del
tipo nome_file.exe.

Oggi tutti i compilatori C (TurboC, C++Builder, DevC++,ecc.) sono


sistemi integrati che permettono di ottenere il file eseguibile in modo
automatico.

Tipi di dati primari


I valori di tipo numerico o alfanumerico utilizzati e elaborati allinterno di un
programma devono essere dichiarati prima di essere utilizzati. Occorre
definire a quale tipo di dati appartengono mediante lutilizzo di parole
chiave:
Tab. 1 Tipi di dati
Parola
chiave
char
int
float

double

Tipo di
dato
Carattere
ASCII
Intero
relativo
virgola
mobile
sing.
precis.
doppia
precis.

Occupazione
memoria
1 byte

Campo definizione
0

255

2 byte

32768

+32767

4 byte

3.4E38

3.4E+38

8 byte

1.7E308

1.7E+308

(il campo di definizione dei dati primari e l'occupazione della memoria sono
strettamente legati all'architettura del computer e al compilatore con cui si
opera. I campi di definizione della tabella 1, sono tipici di un compilatore in
ambiente a 16 bit.)
Esempi di dichiarazione:
int area;
float radice;
char lettera;

Per il C non esiste come dato primario il tipo stringa (unione di caratteri
alfanumerici). Le stringhe vengono pertanto trattate come un insieme
(array) di dati tipo char.(es. Char nome[20])

Modificatori di tipo
I dati primari possono subire delle modifiche utilizzando i modificatori di
tipo:
sono parole chiave che anteposte ai tipi primari ne variano
l'estensione numerica (tab. 2).
Tab. 2 Modificatori di tipo
signed
unsigned
long
short

con
segno
senza
segno
lungo
corto

Non sempre i modificatori di tipo operano variazioni sui dati primari su cui
agiscono. Nel C si hanno in genere le modifiche esposte nella tabella 3 (i
valori sono legati al compilatore utilizzato).

Tab. 3 Effetti dei modificatori di tipo sui dati di tipo int


Forma
abbreviata
unsigned
unsigned
long
long
long
double
short

Forma
completa
unsigned
int
unsigned
long int
long int

Short int

da

65535

4.294.967.295

2.147.483.648

+2.147.483.648

3.4E4932

1.1E4932

-127

+127

n
byte
2
byte
4
byte
4
byte
10
byte
1byte

VARIABILI
Sono tutti i dati, di tipo numerico o carattere, che possono assumere valori
diversi durante elaborazione del programma.
I dati variabili sono individuati nel C con un nome, detto identificatore, che
permette di distinguere una variabile dall'altra. Gli identificatori validi
possono essere formati da un insieme di caratteri alfabetici e numerici,
debbono iniziare necessariamente con un carattere alfabetico e non
devono eccedere i 32 caratteri.

Il C case sensitive: i caratteri maiuscoli e minuscoli sono considerati


diversi: Alfa, alfa e ALFA sono considerati tutti distinti.

Non possono essere usate come identificatori le parole chiave


del linguaggio.
Non bisogna mai confondere lidentificatore assegnato ad una
variabile (nome) con il valore che essa assume nel corso del
programma. Se per esempio si scrive alfa = 3, il nome della
variabile alfa ed il suo valore 3.

Nella stesura di un programma deve essere sempre fatta la


dichiarazione delle variabili e delle costanti che debbono essere
usate nel corso del programma stesso. Nel C la dichiarazione
deve essere fatta prima dellinizio del blocco in cui esse
vengono usate.

Esempi di dichiarazione di variabili

int

alfa, numero;

float somma, risultato, area;


char car, lettera;
int y = 4;

La variabile y durante la dichiarazione viene anche inizializzata, ovvero


viene assegnato ad essa un valore.

COSTANTI

Per attribuire ad un identificatore un valore che non pu essere modificato


dopo lassegnazione, si deve usare il modificatore daccesso const.
Esempi di dichiarazione di costanti

const float num = 45.765;


const int

z = 32;

I valori assegnati in fase di dichiarazione agli identificatori num e z non


possono essere cambiati nella parte restante del programma.

Si definiscono costanti (letterali) quei valori di tipo numerico, letterale o


alfanumerico usati durante la scrittura del codice.
Esempi di costanti assegnate nella scrittura del codice
i = 10
area = 2 3.1415 raggio.
I numeri 10, 2 e 3.1415 sono delle costanti.

In C sono presenti costanti intere, in virgola mobile, a caratteri :

1. Costanti intere. Possono assumere gli stessi valori compresi


nel range dei dati del tipo unsigned int. Le costanti intere
possono essere decimali, ottali ed esadecimali.
Costanti
intere
Decimali

10

Modalit di
rappresentazione
Senza 0 iniziale

32576

Ottali

Iniziano con 0

03765 (= 2037)

Esadecimali

16

Iniziano con 0x

0 F5A4
62884)

Base

Esempi

(=

2. Costanti in virgola mobile. Sono rappresentate da un numeri


con la virgola. Per default sono di tipo double.
3. Costanti di caratteri. Sono rappresentate da un carattere
racchiuso tra apici: '3' , 'A', a.
Tra le costanti di caratteri sono da annoverare le cos dette
"sequenze di Escape" che servono per rappresentare dei
caratteri speciali non stampabili. Per introdurre la sequenza
utilizzato il carattere \ (barra rovesciata). Sequenze di Escape:
Caratteri
\a
\b
\n
\f
\r
\t
\v
\\
\
\

Tipo
attivazione
segnale
acustico
spazio indietro
nuova riga
nuova pagina
ritorno carrello
tabulazione orizzontale
tabulazione verticale
barra rovesciata
apice
doppio apice

Un caso particolare di costanti di caratteri la costante stringa. In questo


caso i caratteri sono racchiusi tra doppi apici: Questa una
stringa.

Campo dazione delle variabili e delle costanti

Un blocco di programma costituito da un insieme di istruzioni racchiuse


tra due parentesi graffe. Le variabili (o le costanti) dichiarate allinizio di un
blocco hanno campo dazione in quel blocco e in tutti i sottoblocchi in esso
contenuti. Se non sono dichiarate allinizio del blocco esse hanno campo
dazione dal punto in cui vengono dichiarate fino alla fine del blocco. Le
variabili dichiarate in un blocco sono dette locali.
Le variabili dichiarate fuori da tutti i blocchi sono dette globali ed hanno un
campo dazione in tutto il programma.

Schematizzazione dei programmi in C


Tutte le funzioni del C sono in gran parte racchiuse in un file di libreria
fornito insieme con il compilatore. Sono inoltre forniti all'utente un certo
numero di file di intestazione (header) detti anche include file (perch
utilizzati con la direttiva #include) che contengono i prototipi delle funzioni
da usare con i relativi tipi di dati e i nomi delle variabili usate nelle funzioni
stesse.
La stesura dei programmi in C deve seguire uno schema ben
preciso. Esso si presenta nel modo seguente:
1)

Elenco dei file include contenenti i prototipi delle funzioni che


debbono essere utilizzate. I nomi dei file debbono essere
preceduti dal simbolo # e debbono essere racchiusi tra apici o
tra i segni < >. I file include hanno estensione ".h". Esempio
stdio.h o <stdio.h>

2)

Dichiarazione delle variabili globali cio quelle variabili che


possono essere utilizzate e modificate da tutte le funzioni
presenti nel programma.

3)

Prototipi delle funzioni (cio una dichiarazione della funzione


che indichi sia il tipo del valore che la funzione ritorner al
programma chiamante, sia il tipo di parametri che le saranno
passati dal programma chiamante).

4)

Funzione main( ); deve essere sempre presente in ogni


programma.

5)

Codice di tutte le funzioni utilizzate, ognuna di esse strutturata


come precedentemente esposto. Non si dimentichi che tutte le
istruzioni componenti ciascuna funzione debbono essere
racchiuse tra due parentesi graffe (blocco di programma).
Poich le parentesi graffe non sono presenti nella normale
tastiera, si ricorda che si possono ottenere:

ALT + 123 per aprire parentesi:

ALT + 125 per chiudere parentesi:

(Nei notebook AltGr+Ctrl+Shift+ tasto [ oppure ] )


La funzione printf() serve per visualizzare dati e messaggi sul video, scanf()
per acquisire dati dalla tastiera.
Allinterno della funzione printf(), si utilizzano i caratteri:
\n per andare a capo ad ogni riga;
%d

per la visualizzazione di un numero intero;

%f

per la visualizzazione di un numero di tipo float;

%c

per la visualizzazione di un carattere;

%s per la visualizzazione di una costante stringa.


Per le costanti stringa si dovuto assegnare (tra parentesi quadre) il
numero di caratteri che le compongono pi uno, non visibile, che serve da
terminatore della stringa ed aggiunto automaticamente dal compilatore.
Tutti i programmi in C, come detto, debbono contenere la funzione main( ).

Programma 1 - Esempio
/* PROGRAMMA DI ESEMPIO */
#include "stdio.h";

int
num1;
float num2;
char car = 'A' ;
char stringa1 [7] = "INTERO";
char stringa2 [11] = "TIPO FLOAT";
main()
{
printf ("\n INTORDUCI UN NUMERO INTERO COMPRESO TRA
-32578 E +32767 ");
scanf ("%d",&num1);
printf ("\n INTRORDUCI UN NUMERO CON VIRGOLA ");
scanf ("%f",&num2);
printf ("\n QUESTA E' UNA COSTANTE DI TIPO CHAR: %c",car);
printf ("\n IL PRIMO NUMERO %d E' %s", num1,stringa1);
printf ("\n IL SECONDO NUMERO %f E' %s", num2,stringa2);
}

Operatori
Gli operatori servono per manipolare i valori assegnati alle variabili ed alle costanti. Di
seguito sono elencati gli operatori usati nel C suddivisi in gruppi funzionali:
1. operatore di assegnazione,
2. operatori aritmetici,
3. operatori di relazione,
4. operatori logici,
5. operatori sui singoli bit.

Tab. 5 Elenco degli operatori di assegnazione

assegnazione
assegna il prodotto
assegna il quoziente
assegna il resto
assegna la somma
assegna la differenza
assegna lo
scorrimento a sinistra
assegna lo
scorrimento a destra
assegna lAND dei bit
assegna lo XOR dei
bit
assegna lOR dei bit

=
=
/=
%=
+=
=
<<=

num = 123 assegna alla variabile


posta a sinistra del simbolo il valore
posto a destra
num = a equivale a: num = num a
num /= a equivale a: num = num / a
num %= a equivale a: num = num % a
num += a equivale a: num = num + a
num = a equivale a: num = num a
num <<= 1 equivale a: num = num << 1

>>=

num >>= 1 equivale a: num = num >> 1

&=
^=

num &= a equivale a: num = num & a


num ^= a equivale a: num = num ^ a

|=

num |= a equivale a: num = num | a

Tab. 6 Elenco degli operatori aritmetici

moltiplicazione

divisione

addizione

sottrazione

pi unario
meno unario
resto divisione tra interi

preincremento
incremento

postincremento

++

predecremento
decremento

postdecremento

num = num1 * num2 assegna a


num il prodotto delle due
variabili num1 e num2
num = num1 / num2 assegna a
num il quoziente delle due
variabili num1 e num2
num = num1 + num2 assegna a
num la somma delle due
variabili num1 e num2
num = num1 num2 assegna a
num la differenza tra le due
variabili num1 e num2
num = + num1
num = num1
res = num1 % num2 se num1 e
num2 sono due interi, alla
variabile res assegnato il
valore del resto della divisione
tra num1 e num2
B = ++A il valore di A viene
aumentato di 1 e poi
assegnato alla variabile B
B = A++ il valore di A viene
assegnato alla variabile B e
poi aumentato di 1
B = A il valore di A viene
diminuito di 1 e poi assegnato
alla variabile B
B = A il valore di A viene
assegnato alla variabile B e
poi diminuito di 1

Tab. 7 Elenco degli operatori di relazione

maggiore di
minore di
uguale a
maggiore o
uguale
minore
o
uguale
non uguale

>

if (a > b) se a maggiore di b

<
==
>=
>=

if (a < b) se a minore di b
if (a== b) se a uguale a b
if (a >= b) se a maggiore o uguale a
b
if (a <= b) se a minore o uguale a b

!=

if (a != b) se a diverso da b

Tab. 8 Elenco degli operatori logici su variabili


AND

&&

A && B

OR

||

A || B

NOT

!A

AND logico tra A e B. (A e B di


tipo scalare, risultato int).
OR logico tra A e B. (A e B di tipo
scalare, risultato int).
negazione logica di A. (A di tipo
scalare, risultato int).

Gli effetti degli operatori logici su dati di tipo scalare riportato nella tabella
che segue:
A
falso (0)

A and B
falso (0)

A or B
falso (0)

falso (0)

B
falso
(0)
vero ()

falso (0)

vero (1)

vero
(0)
vero
(0)

falso
(0)
vero
(0)

falso (0)

vero (1)

vero (1)

vero (1)

A
falso
(0)
vero
(0)

not A
vero (1)
falso (0)

In C si ha:
il dato vero se 0

(diverso da zero)

il dato falso se = 0

(uguale a zero)

Quando il risultato delle operazioni logiche vero, viene restituito 1 (che


diverso da zero).

Gli operatori finora esaminati agiscono tutti sull'intera variabile. Si


analizzano ora gli operatori che influenzano i singoli bit della variabile, che
deve pertanto essere scritta in binario; non bisogna assolutamente
confondere gli operatori logici AND, OR e NOT che operano a livello di
variabili con i corrispondenti operatori logici che operano sui singoli bit della
variabile. I primi infatti producono solo un risultato logico di vero o falso,
mentre i secondi operano una vera e propria trasformazione delle variabili.

Gli operatori sui singoli bit


a) Operatori logici sui singoli bit
Tab. 9 Elenco degli operatori logici su singoli bit
AND
OR
XOR
complemento
a uno

&

A&B

A|B

A^B

Opera la AND bit a bit delle variabili


(int) A e B
Opera la OR bit a bit delle variabili
(int) A e B
Opera la XOR bit a bit delle variabili
(int) A e B
Opera il complemento dei singoli bit
della variabile (int) A

Gli effetti degli operatori logici su singoli bit riportato nella tabella che
segue:
bit1

bit2

0
0
1
1

0
1
0
1

AND
(&)
0
0
0
1

OR
(|)
0
1
1
1

XOR
(^)
0
1
1
0

bit

complemento

0
1

1
0

b) Operatori di scorrimento dei bit


Tab. 10 Elenco degli operatori logici su singoli bit
Scorrimento a >>
destra

A >> 1 tutti bit della variabile (int) A sono


traslati di una posizione a destra; l'ultimo

Scorrimento a <<
sinistra

bit a destra (meno significativo) viene


perso; al posto del primo bit a sinistra (pi
significativo) viene posto uno zero.
Possono effettuarsi pi traslazioni
variando il numero posto dopo il segno di
scorrimento.
A << 1 tutti bit della variabile (int) A sono
traslati di una posizione a sinistra; l'ultimo
bit a sinistra (pi significativo) viene
perso; al posto dell'ultimo bit a destra
(meno significativo) viene posto uno zero.
Possono effettuarsi pi traslazioni
variando il numero posto dopo il segno di
scorrimento.

Per chiarire la differenza che intercorre tra gli operatori che operano
sullintera variabile e quelli che invece agiscono sui singoli bit, si forniscono
alcuni esempi:
int a, b, c,
d;
a=5 ;b=
8;
c=a&b
d = a && b

/* si definiscono le variabili
intero */

a, b ,c, d di tipo

/* si assegnano alle variabili a e b dei


valori */
/* si esegue loperazione logica AND sui
singoli bit */
/* si esegue loperazione logica AND sulle
intere variabili */

Dopo loperazione AND bit a bit, la variabile c sar uguale a:

Valore in binario
a=5
0000 0101
b=8
0000 1000
c=0
0000 0000
Dopo loperazione AND sulle variabili a e b, ricordando che unoperazione
logica su due variabili pu restituire solo due valori, vero (1) o falso (0), la
variabile d sar uguale:
a=5
b=8
d=1

a 0 quindi

= vero ( 0)

b 0 quindi
vero AND vero

= vero ( 0)
= vero (1)

Deve essere quindi ben chiaro che gli operatori logici sulle intere variabili
producono come risultato sempre solo due possibili valori: 0 (falso) o 1
(vero); le operazioni logiche sui bit invece creano valori diversi che
dipendono dalloperazione logica effettuata sui singoli bit e dal valore
attribuito inizialmente alle variabili.
Programma 2 - Uso di operatori aritmetici
#include "stdio.h"
main()
{
int a,b,c,d,g; /*si definiscono le variabili a, b ,c, d di tipo intero*/
clrscr();
/*si cancella il contenuto dello schermo*/
a = 10 ;
/*si assegnano alle variabili a e b dei valori*/
b = 16;
c = a + b;
/*si esegue la somma tra i valori assegnati ad a e b*/
d = c * a;
/*si esegue il prodotto tra i valori assegnati ad a e b*/
printf ("\n a = %d",a);
/*si visualizza il valore assegnato ad a*/
printf ("\n b = %d",b);
/*si visualizza il valore assegnato ad b*/
printf ("\n c = a + b = %d",c); /*si visualizza il valore trovato per c*/
printf ("\n d = c * a = %d",d); /*si visualizza il valore trovato per d*/
a = d / b;
/*ad a viene assegnato il nuovo valore
risultato della divisione tra d e b*/
g = d % b;
/*a g viene attribuito il valore del resto
della divisione tra d e b*/
printf ("\n a = d : b = %d",a); /*si visualizza il valore trovato per a*/
printf ("\n g = resto = %d",g); /*si visualizza il valore di g*/
getch();
/*attende che si prema un tasto*/
}

Programma 3 - Uso di operatori sui bit


#include "stdio.h"
main()
{
char a, b, c, d; /*si definiscono le variabili a, b ,c, d di tipo carattre*/
a = 5 ; b = 8; /*si assegnano alle variabili a e b dei valori*/
c = a & b;
/*si esegue l'operazione logica AND sui singoli bit*/
d = a && b;
/*si esegue l'operaz. logica AND sulle intere variabili*/
printf ("\n a = %d",a); /*si visualizza il valore assegnato ad a*/
printf ("\n b = %d",b); /*si visualizza il valore assegnato ad b*/
printf ("\n c = a & b = %d",c); /*si visualizza il valore trovato per c*/
printf ("\n d = a && b = %d",d); /*si visualizza il valore trovato per d*/
getch();
}

Le funzioni printf( ) e scanf( )

Si prendono ora in esame le due funzioni che permettono di effettuare


l'input e l'output verso la consolle. Queste due funzioni fanno parte della
libreria standard del C e i loro prototipi si trovano nel file include stdio.h
(standard input-output)
Funzione di output: printf()
Sintassi:
printf ("messaggio da visualizzare e direttive di conversione",
argomenti).
La parte racchiusa tra virgolette generalmente costituita da due tipi di
elementi diversi:
1. il messaggio da visualizzare rappresentato da caratteri alfanumerici

che vengono visualizzati, cos come sono, sul video;


2.
le direttive di conversione servono invece per rappresentare
correttamente gli eventuali argomenti posti dopo la virgola. Le
direttive di conversione sono sempre formate dal carattere "%"
seguito da una lettera.
Tab. 11 Direttive di conversione
Direttiva
%d
%c
%u
%f
%e
%s
%x

Viene Visualizzato
un intero
un carattere
un intero senza segno
un numero in virgola mobile
un numero in virgola mobile in
formato esponenziale
una stinga
un intero in formato esadecimale

Esempio di utilizzo della funzione printf()


int num1,num2; float num3;
char alfa,beta;

/*dichiara le variabili di tipo


int*/
/*dichiara le variabili di tipo
char*/
/*assegna i valori alle variabili*/

num1=23;num2=55;
num3=3.14;
alfa='A'; beta='b';
printf("i numeri sono: %d %d
printf ("\n i caratteri sono:

%f", num1, num2, num3);


%c %c", alfa, beta);

Il frammento di programma dellesempio visualizza sul video:

i numeri sono :
i caratteri sono :

23 55 3.14
A b

Notare che la spaziatura tra il messaggio e tra i singoli caratteri ottenuta


inserendo opportuni spazi sia dopo il messaggio che tra i simboli di
formattazione (%d, %f e %c). Vale a dire il contenuto delle variabili
visualizzato esattamente in corrispondenza della posizione del relativo
carattere di formattazione.

Il simbolo speciale "\n" serve per andare a capo. Siccome la barra


retroversa "\" precede sempre un carattere speciale e il segno "%" un
carattere di formattazione se in un messaggio si vogliono visualizzare
detti simboli bisogna porli duplicati; cio "\\" visualizza una barra
rovesciata e "%%" fa visualizzare un segno di percentuale.

A volte necessario impostare a priori la lunghezza del campo


occupato nella visualizzazione di un dato; in tal caso si impone tale
lunghezza ponendo un numero tra il segno "%" e il carattere di
formattazione. Esso rappresenter appunto il numero di spazi riservati
al campo. Per esempio "%5d", riserver al dato intero da visualizzare 5
posizioni e lo allineer sulla destra premettendovi spazi bianchi. Se il
dato pi lungo dello spazio riservato vengono visualizzate tutte le
cifre.

Se si vogliono limitare le cifre decimali dopo la virgola, per un


numero in virgola mobile, si dovr porre dopo l'ampiezza del campo un
punto seguito dal numero di cifre decimali che si vogliono visualizzare.
Per esempio con "%8.3f", il numero in virgola mobile visualizzato
occuper otto o pi spazi (se pi lungo), con un totale di tre cifre
decimali dopo la virgola.

Funzione di input:

scanf()

Sintassi:
scanf ("stringa di formato" , indirizzi degli argomenti);
La stringa di formato utilizza per lo pi gli stessi formati utilizzati per
printf(). La novit pi rilevante del comando di input rispetto a quello di

output risiede nel fatto che scanf(), come argomento, richiede non il valore
di una variabile, ma l'indirizzo in cui essa posta in memoria.
E' chiaro che il programmatore non conosce esplicitamente tale indirizzo,
ma il compilatore s; per indicare quindi quale tale indirizzo si fa
precedere il nome della variabile dall'operatore "&".
char car;
scanf
("%c",&car);
Quando viene trovata l'istruzione scanf(), il programma si arresta e il
computer rimane in attesa che venga introdotto un carattere attraverso la
tastiera. Il carattere digitato sar attribuito all'identificatore car e
memorizzato all'indirizzo &car.
Se si vuole introdurre da tastiera pi di una variabile, utilizzando la stessa
funzione scanf(), queste possono essere separate da uno spazio. Verr in
tal caso usata la seguente sintassi:
char car1;
int num;
..........
printf ("INTRODUCI UN CARATTERE ED UN INTERO ");
scanf ("%c %d",&car1,&num);
In tal caso lo spazio bianco tra i simboli di formato indica che in fase di
digitazione delle variabili da introdurre esse debbono essere separate da uno o pi
spazi o da un comando "a capo". Nel caso precedente si dovr quindi introdurre
prima un carattere, poi uno o pi spazi bianchi ed infine un intero.
Il messaggio visualizzato prima dell'acquisizione, avverte l'operatore su
cosa deve immettere dalla tastiera.

Altre funzioni di input e output


A volte, in modo pi semplice, possono essere usate altre funzioni di input
gi predefinite. Tra le principali si indicano:
Tab.12 - Funzioni di input e output

getch()
getche()
getchar()
gets()
putchar()
puts()

acquisisce un carattere da tastiera senza visualizzarlo


sul video; non attende che venga digitato il ritorno a
capo.
acquisisce un carattere da tastiera e lo visualizza su
video; non attende che venga digitato il ritorno a capo.
acquisisce un carattere da tastiera e lo visualizza su
video; attende che venga digitato il ritorno a capo.
acquisisce una stringa da tastiera; la stinga deve
terminare con un ritorno a capo
visualizza un carattere sul video.
visualizza una stringa sul video.

Le strutture di controllo in C
Le strutture condizionali: la selezione binaria
Struttura if
In questa struttura selettiva viene posta una condizione, se essa verificata
si esegue unistruzione, o un blocco di istruzioni, altrimenti il programma
procede dalla prima istruzione dopo il blocco. Questa struttura in C viene
implementata con if ....
La sintassi del comando la seguente:
if (condizione)
{blocco istruzioni;}

Se presente una sola istruzione le parentesi graffe possono essere


omesse e listruzione viene posta sulla stessa riga di if.
Struttura if...else
Una seconda forma, pi versatile, della struttura condizionale
rappresentata dalla
struttura if...else che utilizza la seguente sintassi:

if (condizione)
{blocco istruzioni;}
else
{blocco istruzioni;}

ove il blocco istruzioni pu essere in una o tutte due le parti una singola
istruzione. Il costrutto appena visto permette di operare la scelta tra due
possibilit diverse eseguendo o un gruppo o l'altro di istruzioni. Nel caso di
istruzioni singole queste vanno poste sulla stessa riga di if ed else.
In figura sono rappresentati i diagrammi di flusso corrispondenti alla struttura
di controllo if e alla struttura if ... else .

Si possono avere strutture if-else nidificate:

Le strutture condizionali: la selezione multipla


Struttura

switch...case

Quando bisogna operare scelte multiple invece di utilizzare una serie di if ...
else anche nel C presente una struttura condizionale di tipo particolare.
Essa la struttura switch...case che ha la seguente sintassi:

switch(variabile tipo int o char)


{
case valore1:
blocco istruzioni;
break;
case valore2:
blocco istruzioni;
break;
..................
default:
blocco istruzioni;
}

La struttura ora esaminata controlla che il valore della variabile dopo switch
coincida con uno dei valori posti dopo case ed in caso affermativo esegue il
gruppo di istruzioni fino a quando incontra break. Se non si verifica alcuna
uguaglianza viene saltata l'intera struttura.
La parola chiave default; pu essere messa alla fine del costrutto qualora si
vogliano eseguire delle istruzioni quando non si verifichi alcuno dei "case".
Bisogna osservare che con tale costrutto per possibile effettuare solo un
controllo di uguaglianza ed inoltre la variabile dopo switch deve essere di
tipo compatibile con valori di tipo int.

In figura il diagramma di flusso corrispondente alla struttura condizionale


switch:

Potrebbero piacerti anche