Sei sulla pagina 1di 38

Linguaggio C:

Cenni

Linguaggio C:

storici
Identificatori
Tipi di dati
Costanti
Operatori
Precedenze
Strutture di controllo
2

Introduzione al linguaggio C

Cenni storici
v Il

Caratteristiche del linguaggio


- General Purpose (Adatto a tutti gli usi)
- Conciso
- Medio livello di difficolt
- Formato libero ( Incoraggia lo stile individuale)
- Permette di progettare bene i programmi
F Progettazione Top-Down
F Programmazione Strutturata
3

linguaggio C stato sviluppato intorno al 1972


nei Bell Laboratories AT&T americani, da Dennis
Ritchie.
v E nato come linguaggio di sviluppo del Sistema
Operativo UNIX.
v Gli antenati del C possono essere riuniti in linea
genealogica:
F Algol 60
1960 (Comitato Int.)
F CPL
1963 (Cambridge)
F BCPL
1967 (Cambridge)
F B
1970 (Thompson)
F C
1972 (Ritchie )
4

Evoluzione

Cenni storici
v LAlgol presentava

v
v
v

1978: Definizione precisa del linguaggio C


F (B.W. Kernigham & D. Ritchie)
1983: Standardizzazione da parte dellANSI
1986: Objective C (Cox), C++ (Stroustrup)
1999: Ultima release dello standard ANSI

le seguenti caratteristiche:
Fregolarit della sintassi,
Fstruttura in moduli,
Fma era particolarmente complesso.
v Il CPL (Combined Programming Language) ed il
BCPL
migliorarono
molte
caratteristiche
dellAlgol senza per riuscire ad eliminare la
complessit.
v Il linguaggio B (Thompson) era molto alla struttura
dellhardware.
v Ritchie seppe riassumere le migliori caratteristiche
di questi linguaggi.
6

Perch programmare in C

Cosa non il linguaggio C


vNon

- Portabilit del Codice e del Compilatore


- Codice generato molto efficiente
- Facilit di accesso al livello macchina
- Interfacciamento completo al S.O. UNIX
- Variet di operatori di linguaggio
- Strutture dati potenti
- Non complesso
- Modularit e Riuso

un linguaggio

FCe differenza tra il linguaggio delluomo e un insieme


ridotto di simboli e di regole di composizione.
vNon

un algebra

FSebbene i programmatori esperti tendano a scrivere


istruzioni compatte ed ermetiche, le sequenze di
istruzioni possono essere scritte in modo chiaro e
leggibile.
vNon

una religione

FMolti linguaggi hanno i loro seguaci fanatici (Forth) ed


oppositori altrettanto fanatici. Il C nato in un
ambiente di professionisti che necessitavano solamente
di uno strumento e non di un ideale.
8

Struttura
dei
Programmi

Commenti

- Un programma formato da uno o pi blocchi


chiamati funzioni
- Una funzione formata da un insieme di una o
pi istruzioni
Esempio:
main() /* esempio di programma C */
{
printf(Primo programma C\n);
}
9

/* */

Apertura e chiusura di un commento

main()

Nome di funzione
Inizio di un blocco funzionale
Un solo main per programma

Parentesi graffa aperta: inizio del corpo


della funzione

Parentesi graffa chiusa: fine del


della funzione

corpo
10

Definizione di una funzione in linguaggio C


v La

definizione di una funzione rappresenta la


specificazione delle operazioni che dovranno
essere svolte allatto della chiamata.
v La definizione costituita da due parti:

Compilazione ed Esecuzione
v
v
v
v

intestazione dichiarativa
corpo
v Lintestazione

definisce le regole di interfaccia.


v Il corpo specifica le operazioni da eseguire.
11

Scrivere un codice sorgente C con un editor


Produzione di codice intermedio .OBJ attraverso il
preprocessore e compilatore
Produzione di codice eseguibile attraverso il linker
Nel caso di un compilatore ad ambiente utilizzare
leditor fornito con lambiente ed eseguire i
comandi:
Fcompile
Flinkeroppure (compile+linker=build all)
Frun
12

Identificatori

Significato degli identificatori

v Gli

identificatori di qualsiasi oggetto in un


programma possono consistere di un numero
qualsiasi di caratteri alfanumerici minuscoli o
maiuscoli incluso il carattere _ (underscore).
v Il primo carattere deve necessariamente essere
una lettera oppure il carattere underscore(_).
v Il compilatore f differenza tra lettere minuscole e
maiuscole
Esempi validi:
sp_addr sp2_addr
F_lock_user _found
Esempi non validi:
20_secolo -pippo
13

v
v

Un identificatore non altro che il nome associato


ad un oggetto
Ogni identificatore possiede due attributi che lo
caratterizzano:
Fclasse di memoria
Ftipo
La classe di memoria determina la durata della
memoria associata alloggetto
Il tipo determina il significato dei valori assunti
dalloggetto
14

Classi di memoria
v
v

Punto e Virgola

Esistono due classi di memoria:automatica e statica


La classe di memoria automatica relativa a quegli
oggetti locali ad un blocco (funzione o programma) che
viene liberata non appena si raggiunge la fine di quel
blocco.
La classe di memoria statica relativa a quegli oggetti
locali ad un blocco od esterni a qualsiasi blocco che non
viene liberata tra uscite ed entrate successive tra diversi
blocchi.
Se non esistono altre specificazioni ogni oggetto
dichiarato in un blocco ha classe di memoria automatica,
se la loro definizione accompagnata dalla parola
chiave static , allora la loro classe di memoria statica.
Gli oggetti dichiarati allesterno di qualsiasi blocco
(variabili globali) hanno sempre classe di memoria
statica.
15

v
v

Il punto e virgola ; segna la fine di uno


statement (istruzione).
Unistruzione C pu essere un assegnamento,
una espressione o una chiamata a funzione.

Esempio:
main()
{
int c;
c = 100;
printf( Questo esempio mostra\n);
printf(quando usare il punto e virgola\n);
}
16

Uso delle parentesi


graffe
v
v

le parentesi graffe { } delimitano le istruzioni di una


funzione o quelle di una istruzione composta.
una istruzione composta consiste di uno o pi
statement che sono sintatticamente equivalenti ad un
unica soluzione
Esempio:
main()
{
for ( ... )
{
< istr. 1>
< istr. 2>
}
}
17

v
v

Libreria standard

Esaminiamo listruzione
printf( programma C);
printf il nome di una funzione il cui codice gi
scritto ed inserito nell standard C library
La Standard C library viene inclusa durante la fase
di linking del programma attraverso la direttiva del
preprocessore #include .
Altre funzioni appartenenti alla standard C library
sono:
printf(), fprintf(), sprintf(), scanf(), fscanf(),
sscanf(), getc(), gets(), getchar(), putc(), puts(),
fgetc(), fgets(), fputs(), fwrite(), fread(), etc. ..
18

Tipi di dati

Esempio
v

#include <stdio.h>
v

main()
{
printf(Hello World\n);
}
#include <stdio.h>

main()
{
printf(Hello );
printf(World\n);
}

19

Tutte le variabili devono essere dichiarate con il loro


tipo prima di essere utilizzate
Ci sono 4 tipi base in C:
F
char /* carattere */
F
int
/* intero */
F
float /* numero in virgola mobile */
F
double /* float a doppia precisione */
La rappresentazione interna machine dependent
Alcuni valori tipici sono:
- char
8 bit
- int
16 bit
- float
32 bit
- double
64 bit
20

10

Interi

Variabili di programma
v La
v

Una variabile una entit che pu assumere un


valore qualunque allinterno di un insieme di
valori prestabilito.
Seguono alcune dichiarazioni di variabili
char c, scelta; /* due variabili di tipo char */
int size, index, contatore; /* variabili intere */
float dare,avere; /* variabili in virgola mobile */
double ex, cx; /* float in doppia precisione */
long tipo ;
/* specifica una dato a doppia
precisione */
21

dichiarazione di variabili intere deve essere


posta allinizio di un blocco di codice.
int a,b,c;
v Dopo che una variabile stata dichiarata
possibile assgnarle un valore intero tramite
loperatore di assegnamento
a = 100;
v Avendo a disposizione un calcolatore che
memorizza interi a 16 bit, i due valori estremi che
possono essere assegnati ad un intero sono:
-32768
+32767
22

11

Caratteri
v

Dati in virgola mobile

Le variabili di tipo carattere vengono dicharate:


char classe, sesso;
In effetti in linguaggio C, i caratteri sono valori
numerici ai quali per convenzione sono associate
lettere dellalfabeto, segni di interpunzione ed altri
simboli alfanumerici.
La codifica pi comunemente usata la codifica
ASCII (American Standard Code for Information
Interchange)
Ad esempio la lettera A viene codificata come
65 mentre la minuscola a corrisponde a 97
23

vI

dati floating point sono una approssimazione


dei reali, espressi come frazioni decimali.
3.14159
2.71828
v La loro rappresentazione interna dipende dalla
macchina, ma di solito vengono utilizzati 32 bit,
di cui almeno i primi 6 sono i pi significativi.
v Il range di variazione dei floating point :
2-9387e-39 1.7014e+38
v NOTA: Nel C hanno scarsa importanza, perch
il linguaggio adatto per la programmazione di
sistema.
24

12

Costanti intere
Costanti
v

In C esistono diversi tipi di costanti, in cui


possiamo distinguere 5 tipi fondamentali:
Fcostanti intere
Fcostanti esplicitamente long
Fcostanti carattere
Fcostanti in virgola mobile
Fstringhe di caratteri costanti

25

Costanti intere decimali:


0, 1, 8, 10, 256
Costanti intere ottali:
0, 01, 010, 012, 0377
Costanti intere esadecimali ( precedute da 0x);
0x0, 0x1, 0xA, 0xC, 0xFF
Esempio:
main()
{
int a;
a = 0xA;
a = 10;
a = 012;
}
26

13

Costanti long
v

Una costante intera seguita da una L una costante


long.
0L, 1L, 8L, 10L, 256L
Esempio:

main()
{
long numero;
numero = 0L;
}
27

Costanti Carattere

Una costante carattere un carattere racchiuso da


apici singoli.
Il valore della costante il valore che la macchina
associa a quel carattere nella particolare codifica
usata ( solitamente ASCII).
A x 0
$
Esistono alcune costanti particolari:
FNew line (lf)
\n
FCarriage return (cr)
\r
FBackspace (bs)
\b
FHorizontal tab (tab)
\t
FForm feed (ff)
\f
FBackslash (\)
\\
28

14

Costanti Floating Point


v

Costanti Stringa

Una costante Floating Point costituita da una


parte intera, una parte decimale, una parte
frazionaria e, opzionalmente, un esponente segnato
intero: 127.0
0.235 2.E-16 2.56e+23
Ogni costante floating point rappresentata
internamente come un numero in doppia precisione.
Esempio:
main()
{
double numero;
numero = 2.37E-7;
}

v
v
v

Una stringa costante una sequenza di uno o pi


caratteri racchiusi da doppi apici().
Il compilatore aggiunge un carattere NULL (\0)
alla fine di ogni stringa.
Il carattere (doppio apice) in una stringa va
preceduto da \.

Esempio:
stringa
ciao
29

rappresentazione interna
c i a o \0
30

15

Operatore sizeof
Loperatore sizeof serve per trovare la dimensione
di un dato, infatti questi dipendono dalla
macchina che utilizziamo.
v Per conoscere la dimensione in byte di una
espressione possiamo utilizzare la:
sizeof ( espressione)
Esempio:
main()
{
int mesi,scorte,i;
char anno;
i = sizeof( mesi);
i = sizeof(mesi)*sizeof(scorte);
i = sizeof (char);
}
v

31

Esercizio
Utilizzando loperatore sizeof(...) determinare e
stampare la dimensione occupata dai seguenti tipi:
int, char, float, double, short int, long int.

32

16

#include <stdio.h>

Parole riservate

main()
{
int a;
float b;
char c;
double d;
short e;
long f;

printf("dimensioni intero =\t %d byte\n",sizeof(a));


printf("dimensioni float =\t %d byte\n",sizeof(b));
printf("dimensioni carattere =\t %d byte\n",sizeof(c));
printf("dimensioni double =\t %d byte\n",sizeof(d));
printf("dimensioni short int =\t %d byte\n",sizeof(e));
printf("dimensioni long int =\t %d byte\n",sizeof(f));
}
33

Alcuni identificatori sono parole riservate


(keywords ) del linguaggio e pertanto non possono
essere usate come nomi di variabili.
Le keywords del linguaggio C sono:
auto
break
case
char
continue
default
do
double
else
entry
extern
float
for
goto
if
int
long
register
return
short
sizeof
static
struct
switch
typedef
union
unsigned
void
while
34

17

Operatori
v

Gli operatori del linguaggio possono essere


classificati in tre categorie: aritmetici, relazionali e
logici.
Aritmetici:
+
somma
- sottrazione
*
moltiplicazione
/ divisione
% modulo
Relazionali
<
minore di
> maggiore di
== uguale a
!= diverso da
<= minore o uguale >= maggiore o ug.
Logici
&& AND logico
& AND bit a bit
||
OR logico
| OR bit a bit
!
NOT logico
NOT bit a bit
35

Operatori aritmetici e di assegnamento


v

v
v

Consideriamo lespressione:
a = a + 1;
che significa: prendere il valore corrente di a,
sommargli 1 e memorizzare il risultato in a.
Nellespressione sono presenti due operatori
+ e = che implicano lesecuzione
delloperazione in due passi.
Lordine di esecuzione : somma delle due
costanti e quindi assegnamento.
36

18

Operatori di incremento e
decremento

Operatore Modulo
v
v

Se si vuole conoscere il resto di una divisione tra


variabili di tipo intero, necessario usare loperatore
di divisione intera %.
v

Esempio:
5%3
3%5
3%3
9%3

=
=
=
=

2
3
0
0

Gli operatori di incremento e decremento sommano


o sottraggono 1 alloperando cui sono applicati.
FLespressione:
a++ incrementa a di 1
FLespressione:
a-- decrementa a di 1
La posizione degli operatori di incremento e
decremento pu essere prefissa o suffissa.
Esempio:
a=5
b =++a;
a=6 b=6
b =a++;

37

a=5
a=6

b=5
38

19

Conversione di tipo ( Casting )

Operatori di assegnamento composti


v

Il C dispone di operatori di assegnamento che


sono combinazioni opportune delloperatore di
assegnamento con operatori aritmetici.
Esempio:
a = a + 10;
a += 10;
Lelenco degli operatori di assegnamento
quindi:
=
+=
-=
*=
/=
%=
39

Il linguaggio C prevede una serie di regole


automatiche per la conversione di tipo in espressioni
che contengono tipi differenti. Ci sono per alcuni
casi in cui il programmatore vuole specificare al
compilatore il tipo di dato che vuole ottenere.
La notazione per forzare un tipo di dato ad un altro
tipo la seguente
(tipo) espressione;
Esempio:
float x,f;
f = 3.14159;
x = (int) f;
40

20

Conversioni nelle espressioni


aritmetiche

Conversioni implicite
v

Introdotte per consentire lutilizzo di operatori e


funzioni che consentono di operare su pi tipi di
parametri
char

int, short int, long int

int

char, short int, long int,


float, double, unsigned
int
Come int

double

float

long

short int

unsigned
int

long int

Come int

float

double, int, short int,


long int
float, int, short int,
long int

double

41

char, short

42

21

Esempi
int y;
char x;
x=A;
y=x; /* y vale 65 */

Operatori Relazionali

int v1, v2;


float x;
v1=5;v2=2;
x=v1/v2; /* x vale 2.0 */

int v1, v2;


float x;
v1=5;v2=2;
x=(float)v1/(float)v2; /* x vale 2.5 */

43

Gli operatori relazionali sono:


< <=
>
>=
a cui si associano gli operatori di uguaglianza:
==
!=
Da notare che gli operatori relazionali hanno una
precedenza inferiore a quelli aritmetici, per cui
nella relazione: x < y - 1 viene valutata dapprima
la relazione y - 1 ed il risultato viene confrontato
con x, ovvero la relazione assume la forma:
x < (y - 1)
44

22

Operatori logici
v

Esercizio

Gli operatori logici sono costituiti da due


operatori binari: && (and) e || (or) e da un
operatore unario ! (not).
Le espressioni con operatori logici vengono
sempre valutate da sinistra a destra, ed il risultato
sar 1 se la relazione vera 0 altrimenti.
Loperatore unario ! converte un operando non
nullo in uno 0, ed un operando nullo in un 1. Ad
esempio lespressione if (!x) equivale a
if (x == 0)
45

Utilizzando gli operatori relazionali


stampare le tabelle booleane relative agli
operatori AND OR e NOT.

46

23

Precedenze
int x,y,z;
printf("TABELLA BOOLEANA DELL'AND\n\n");
x = 1;
y = 1;
z = (x && y);
printf("Se x = 1 ed y = 1 allora x && y =\t %d\n",z);
.....
.....
printf("\nTABELLA BOOLEANA DELL'OR\n\n");
x = 1;
y = 1;
z = (x || y);
printf("Se x = 1 ed y = 1 allora x || y =\t %d\n",z);

47

Il C dispone di un insieme di regole che determinano


lordine in cui le varie operazioni devono essere
eseguite. E necessario seguire queste regole di
precedenza quando si scrivono espressioni per
ottenere risultati corretti.
( ) [] ->
! ++ -- (tipo) * &
* / %
+ << >>
< <= > >=
== !=
&
|
&&
||
= += -= ecc.
48

24

Alcune domande

Strutture di controllo
v

v
v

Si cerchi di rispondere alle domande tenendo


conto delle precedenze degli operatori.
Se x = 2, qual il valore di y nella seguente
espressione e perch: y = x != 0;
FIl valore di y 1
Se x = 2, z = 4 e y = 1, qual il valore di y nella
seguente espressione e perch:
x == 0 && (y = z) != 0
FIl valore di y 1
49

SEQUENZIALI
F
Statement semplice
F
Statement composto
CONDIZIONALI
F
if (< expr.>) { } else { }
F
switch(<expr.>) { case < cost> : .. }
ITERATIVE
F
while(<expr.>) { }
F
for (..) { }
F
do { } while(< expr.>)
50

25

Statement Semplici

Statement Composti

Uno statement semplice pu essere :


F
assegnamento
F
espressione
F
chiamata a funzione
Esempio:
main()
{
int x;
x = - 456; /* assegnamento */
x = x + 1; /* espressione */
printf ( X = %d \n , x); /* funzione */
}
v

51

Uno statement composto una sequenza di


statement sintatticamente equivalente ad uno
semplice ed delimitato da parentesi graffe {}
Esempio:
{
a = b + 19;
b = c * 23;
c = c+1;
}
52

26

Esempio

Istruzione IF - ELSE
v

Lo statement if - else usato per prendere delle


decisioni allinterno di un programma
Sintassi:
if ( espressione )
istruzione;

Lespressione < expr> viene valutata se risulta


essere TRUE o NON ZERO viene eseguito il set di
istruzioni corrispondente.

Esempio:
if ( x > 0 ) {
if ( k == m)
y = m;
}
else {
y = 0;
k = 100;
}

oppure
if ( espressione )
{
istruzione_1;
istruzione_2;
}
else
istruzione_3;

53

54

27

Esempio
v

Istruzione else-if

Equivalenza tra TRUE e NON ZERO:

if ( x ) {
/* if ( x!=0) */
printf(X diverso da zero);
}
else {
printf(X uguale a zero\n);
}
55

Quando occorre effettuare una scelta plurima


possibile, ma non consigliabile, utilizzare
listruzione else- if.
Sintassi:
if (espressione)
<istruzione/i>
else if (espressione)
<istruzione/i>
else if (espressione)
<istruzione/i>
else
<istruzione/i>
56

28

Esempio

Esercizi

Questo codice riconosce il carattere digitato a video


assumendo che i caratteri possibili si dividono in
lettere in cifre ed in simboli.
c = getchar();
if ( c >= '0' && c <= '9')
printf("E' una cifra\n");
else if ( c >= 'a' && c <= 'z' )
printf("E' una lettera minuscola\n");
else if ( c >= 'A' && c <= 'Z' )
printf("E' una lettera maiuscola\n");
else
printf("E' un simbolo\n");
57

1. Riscrivere il codice precedente utilizzando al posto


delle istruzioni else- if una serie di if innestati
2. Ampliare il codice precedente prevedendo il
riconoscimento anche dei segni di punteggiatura,
delle parentesi e degli operatori aritmetici.
3. Utilizzando la funzione scanf(...), input formattato,
scrivere una funzione che stampa il massimo tra due
interi.
58

29

Operatore Ternario
v

Esercizi

Loperatore ternario una forma compressa di


if-else.
Sintassi:< expr > ? < expr1> : < expr2>;
Se < expr> vero viene valutato solo < expr1>
altrimenti viene valutato <expr2>
Esempio:
x = ( y > 0) ? y : x + 1;
equivalente a
if ( y > 0)
x = y;
else
x = x+1;
59

1. Utilizzando loperatore ternario riscrivere il


programma che stampa il massimo tra due
interi in input.
2. Utilizzando loperatore ternario scrivere un
programma che converte il carattere di input
da maisucolo a minuscolo e viceversa.

60

30

Istruzione switch
v

Istruzione switch

Listruzione switch consente di trasferire


lelaborazione a uno o pi statement composti in
funzione della valutazione di una espressione.
Sintassi:
switch ( <expr>) {
case <cost_1>:
statement;
case <cost_2>:
statement;
case <cost_3>:
statement;
default
statement;
}
61

v
v

Questa istruzione viene usata quando occorre


effettuare delle scelte plurime.
Occorre fare attenzione in quanto lesecuzione
delle istruzioni comincia e prosegue in maniera
SEQUENZIALE a partire dalla condizione trovata
di espressione= cost_x e fino al termine
dellistruzione switch.
Ci garantisce una certa flessibilit, ed in
particolare la possibilit di associare pi
possibilit ad un unica etichetta.
62

31

Esempio
c = getchar();
switch ( c ) {
case '0' :
case '1' :
.....
case '9' :
printf("E' una cifra\n");
case 'a' :
......
case 'z' :
printf("E' una lettera minuscola\n");
case 'A' :
......
case 'Z' :
printf("E' una lettera maiuscola\n");
default :
printf("E' un simbolo\n");
}
63

ATTENZIONE
v
v

Nel codice precedente c un errore !


Nel caso di c = 1, loutput del programma sar:
E una cifra
E una lettera minuscola
E una lettera maiuscola
E un simbolo
Questo accade in quanto le istruzioni esguite sono
quelle sequenziali a partire dal primo case
soddisfatto.
Per evitare ci occorre utilizzare listruzione break
che consente di forzare luscita dal blocco
dellistruzione quando verificata una certa
condizione.
64

32

Istruzione while
v

Esempio

Listruzione while permette di eseguire una serie


di istruzioni fintanto che una condizione iniziale
rimane TRUE.
Sintassi:
while ( <expr> )

a = 1;
while ( a <= 100) {
total += a*a;
a += 1;
}

{
statement;

a = 1;
while ( a++ <= 100)
total += a*a;

65

66

33

Esempio

Istruzione for
v

Listruzione
precedente.

for

molto

simile

al while
main()
{
int sum , i;

Sintassi:
for ( < inizializza var>; <expr>; <upd var>) {
statement;
}
vEquivalente

sum =0;

alla struttura seguente che utilizza while:


for ( i = 1 ; i <= 10; i++) {
sum += i;
}

< inizializza variabili>;


while ( <expr>) {
< statement >;
< aggiorna variabili >;
}

}
67

68

34

Esempio

Istruzione do-while

sum = 0;
i = 1;
for( ; i<= 10; ) {
sum= sum + i++;
}
sum = 0;
i = 1;
for ( ; ; ) {
if ( i > 10 ) break;
sum = sum + i++;
}

Listruzione do-while simile alla while;


lespressione viene valutata alla fine e non
allinizio del ciclo.
v Questo comporta che un ciclo do-while venga
eseguito almeno una volta.
Sintassi:
do {
statement;
} while ( <expr>);
v

69

N.B : questo tipo di statement comodo quando si


desidera eseguire una serie di istruzioni almeno una
volta.
70

35

Esercizi

Esempio
c = getchar ();
do {
if (c == \n)
lines++;
else {
if (c == )
words++;
}
}while (( c=getchar())!=EOF);
71

1. Utilizzando un ciclo while e la funzione getchar(),


scrivere un programma che stampa la lunghezza
della stringa di input.
2. Utilizzando un ciclo while ed un istruzione switch,
scrivere un programma che conta il numero dei
caratteri, delle parole, degli spazi bianchi, delle
linee in input.
3. Scrivere un programma che riceve in ingresso
cinque numeri rappresentanti dei gradi celsius
terminati da un EOF e stampa in output i
corrispondenti gardi Fahrenheit.
[1 grado Fahr. = 1 grado Celsius * (9/5) + 32]
72

36

while (( c=getchar() ) != EOF){


switch(c)
{
case '\n':
nchar++;
nlines++;
nwords ++;
break;
case '\t':
nchar++;
nwords ++;
break;
case ' ':
nchar++;
nwhite++;
nwords ++;
break;
default :
nchar++;
break;
}

Esercizi
1. Utilizzando un ciclo for scrivere un
programma che riceve in input due interi
rappresentanti rispettivamente base ed
esponente e ne calcola la potenza.
2. Scrivere lo stesso programma dellesercizio 2
precedente utilizzando per un ciclo for.

73

74

37

Istruzioni break e continue


main()
{

int p,base,n;

printf("Dammi la base e l'esponente maggiore di zero\n");


scanf("%d %d",&base,&n);
printf("La potenza di %d elevato a %d ",base,n);
for(p=1 ; n > 0 ; --n)
p *= base;
printf("%d\n",p);
}
75

break consente luscita immediata da una istruzione


switch, while, for, do-while.
continue forza il passaggio alliterazione successiva nelle
istruzioni while, for, do-while.

Esempio:
main()
{
int c,oldc =EOF;
while (( c = getchar()) != EOF) {
if ( c == oldc)
continue;
oldc = c;
putchar(c);
}
}

76

38

Potrebbero piacerti anche