blocco funzione - Cremona

Transcript

blocco funzione - Cremona
Turbo C++ Versione 1.01 per DOS prelevabile da:
http://community.borland.com/museum/
richiede registrazione gratuita
- Elenco delle parole chiave definite dal C ANSI auto
const
double
float
int
short
struct
unsigned
break
continue
else
for
long
signed
switch
void
case
default
enum
goto
register
sizeof
typedef
volatile
char
do
extern
if
return
static
union
while
Le parole chiave unitamente alla sintassi formano il linguaggio di programmazione…
- Struttura generale di un programma C -
BLOCCO
dichiarazioni globali
main ( )
{
variabili locali
sequenza di istruzioni
}
f1( )
{
variabili locali
sequenza di istruzioni
}
f2 ( )
{
variabili locali
sequenza di istruzioni
}
.
.
.
FUNZIONE
fN( )
{
variabili locali
sequenza di istruzioni
}
Gianluca Attolini - A.A. 2001-2002 laboratorio del corso Fondamenti di Informatica - Politecnico di Milano sede di Cremona
pagina 1
- Per poter eseguire un programma C… 1.
2.
3.
4.
Editazione del codice sorgente
Compilazione del programma
Collegamento del programma con le funzioni di libreria
Esecuzione del programma
(editare)
(compilare)
(linkare)
(eseguire)
- Identificatori in un programma C… Sono definiti identificatori i nomi tramite i quali è possibile fare riferimento a: variabili, funzioni,
etichette, e altri oggetti definibili dal programmatore.
Un identificatore è costituito da più caratteri (di solito il primo deve essere una lettera o al più può
essere un under-score il trattino di sottolineatura "_") non può essere una cifra.
Affinché gli identificatori siano significativi si devono considerare i primi 6 caratteri per utilizzi
esterni al file ed i primi 31 caratteri internamente al file (fare riferimento al manuale del compilatore
in uso).
Lettere MAIUSCOLE e minuscole vengono considerate distinte.
- Tipi di Dati -
Nel linguaggio C esistono cinque tipi di dati primari:
descrizione
carattere
intero
reale
doppia precisione
indefinito
Tipo
char
int
float
double
void
bit occupati
8
16
32
64
indefinito
valori ammissibili
da 0 a 255
da -32.768 a 32.767
da 3,4E-38 a 3,4E+38
da 1,7E-308 a 1,7E+308
---
Il linguaggio mette poi a disposizione dei modificatori di tipo che possono modificare i tipi primari
tranne void:
1.
2.
3.
4.
signed
unsigned
long
short
Il linguaggio C permette poi di definire tipi di dati aggregati come: strutture, unioni, campi di bit,
tipi enumerativi, tipi definiti dall'utente.
5. VALORI DI VERITA'
In C non esiste il tipo di dati che in altri linguaggi è chiamato Boolean. Il linguaggio C utilizza la
convenzione che: il valore ZERO rappresenta il valore FALSO, e il valore UNO rappresenta il
valore VERO (estendendo i valori NON ZERO rappresentano il VERO, quindi qualsiasi valore
DIVERSO DA ZERO rappresenta il VERO).
Gianluca Attolini - A.A. 2001-2002 laboratorio del corso Fondamenti di Informatica - Politecnico di Milano sede di Cremona
pagina 2
- printf e scanf printf Sends formatted output to stdout
Syntax: int printf(const char *format [, argument,.]);
Prototype in: stdio.h
Remarks: printf formats a variable number of arguments according to the format, sending the output to stdout. Returns
the number of bytes output. In the event of error, it returns EOF.
Type
character
d
i
o
u
x
X
f
e
g
E
G
c character
s
%
n
p
Input argument
Format of output
Numeric types
signed decimal int.
signed decimal int.
unsigned octal int.
unsigned decimal int.
unsigned hexadecimal int (with a, b, c,
d, e, f).
integer
unsigned hexadecimal int (with A, B,
C, D, E, F).
floating pt
signed value of the form
[-] dddd.dddd.
floating pt
signed value of the form [-]d.dddd or
e[+/-]ddd.
floating pt
signed value in either e or f form,
based on given value and precision.
Trailing zeros and the decimal point
are printed if necessary.
floating pt
Same as e, but with E for exponent.
floating pt
Same as g, but with E for exponent if
e format used.
Character types
Single character.
string ptr
Prints characters until a nullterminator is pressed or precision is
reached.
none
The % character is printed.
Pointers
ptr to int
Stores (in the location pointed to by
the input argument) a count of the
chars written so far.
pointer
Prints the input argument as a pointer;
format depends on which memory
model was used. It will be either
XXXX:YYYY or YYYY (offset
only).
integer
integer
integer
integer
integer
Gianluca Attolini - A.A. 2001-2002 laboratorio del corso Fondamenti di Informatica - Politecnico di Milano sede di Cremona
pagina 3
scanf Performs formatted input from stdin
Syntax: int scanf(const char *format [, ...]);
Prototype in: stdio.h
...scanf type characters
The following table lists the ...scanf type characters, the type of input expected by each, and in what format the input
ill be stored. The information in this table is based on the assumption that no optional characters, specifiers, or
modifiers (*, width, or size) were included in the format specifier.
Type character
d
D
o
O
i
I
u
U
x
X
e, E
f
g, G
s
c
%
n
p
Expected input
Type of argument
Numerics
Decimal integer
Pointer to int (int *arg)
Decimal integer
Pointer to long (long *arg)
Octal integer
Pointer to int (int *arg)
Octal integer
Pointer to long (long *arg)
Decimal, octal, or
Pointer to int (int *arg)
hexadecimal integer
Decimal, octal, or
Pointer to long (long *arg)
hexadecimal integer
Unsigned decimal
Pointer to unsigned int
integer
(unsigned int *arg)
Unsigned decimal
Pointer to unsigned long
integer
(unsigned long *arg)
Hexadecimal integer Pointer to int (int *arg)
Hexadecimal integer Pointer to long (long *arg)
Floating point
Pointer to float (float *arg)
Floating point
Pointer to float (float *arg)
Floating point
Pointer to float (float *arg)
Characters
Character string
Pointer to array of characters(char arg[])
Character
Pointer to character (char *arg) if a field
width W is given along with the c-type
character (such as %5c). Pointer to array
of W characters(char arg[W])
% character
No conversion done; % is stored.
Pointers
Pointer to int (int *arg). The number of
characters read successfully up to %n is
stored in this int.
Hexadecimal form
Pointer to an object (far* or near*)%p
YYYY:ZZZZ or
conversions default to the pointer size
ZZZZ
native to the memory model.
Gianluca Attolini - A.A. 2001-2002 laboratorio del corso Fondamenti di Informatica - Politecnico di Milano sede di Cremona
pagina 4
- riassumendo… -
Che cosa ci insegna il nostro primo programma in c…
codice sorgente
osservazioni
la direttiva #include <stdio.h> serve
per includere nel programma le
informazioni relative alla libreria
predefinita del linguaggio c che
contiene le funzioni di input/output
la funzione main () identifica sempre
il programma principale e rappresenta
l'inizio dell'esecuzione del programma
/* Questo è il classico
primo programma.*/
#include <stdio.h>
main ()
{
printf("\nCiao Mondo!!!");
}
le parentesi graffe { } identificano un
blocco
nel codice sorgente si possono/devono
mettere i commenti racchiudendoli tra i
simboli /* */
le stringhe di testo vengono delimitate
dalle virgolette " "
è possibile mettere nelle stringhe
delle sequenze che indicano caratteri
speciali ad esempio \n indica il
carattere New line che fa si che il
testo che lo segue vada a capo
ogni istruzione deve essere conclusa
con il punto e virgola
codice sorgente
int numero, fattoriale;
;
osservazioni
per poter essere usata una variabile
deve prima essere dichiarata, scrivendo
il tipo seguito dal nome della
variabile (o da un elenco di nomi di
variabili di quel tipo) tipi di dati
primari: int char float double
void
numero = 400;
int numero = 600;
l'istruzione di assegnamento si indica
con l'uguale =
è buona cosa che una variabile prima di
essere utilizzata venga inizializzata,
ossia le venga assegnato un valore
noto. E' possibile farlo anche quando
viene dichiarata.
Gianluca Attolini - A.A. 2001-2002 laboratorio del corso Fondamenti di Informatica - Politecnico di Milano sede di Cremona
pagina 5
- Operatori ed espressioni in C -
l'insieme degli operatori del linguaggio permettono di costruire espressioni.
Gli operatori all'interno delle espressioni hanno un ordine di precedenza.
operatori
ARITMETICI
*
+
/
%
COMPARAZIONE
<
>
<=
descrizione
moltiplicazione
addizione
divisione
minore
resto della divisione
maggiore
minore o uguale
maggiore o uguale
sottrazione
>=
==
!=
LOGICI
&&
||
INCREMENTO
++
--
uguale
diverso
(Fare attenzione un solo = è l'assegnazione)
!
AND
OR
NOT
incremento
decremento
modificano il valore degli oggetti a cui vengono
applicati, a secondo l'uso prefisso o postfisso
restituiscono il valore prima o dopo la modifica
esempio:
num++ - restituisce num e poi lo incrementa
++num - incrementa num e lo restituisce
incrementato
CONDIZIONALE
<esp1>?<esp2>:<esp3> restituisce <esp2> se <esp1> è vero altrimenti
restituisce <esp3>
esempio:
(a>b)? a:b restituisce il massimo tra a e b
ASSEGNAMENTO
il simbolo uguale = in C viene considerato un
=
operatore e quindi restituisce anch'esso un valore.
esempio:
a=b; memorizza in a il valore di b e restituisce b
l'operatore di assegnamento è associativo a destra
esempio:
a=b=0; il valore 0 viene assegnato sia ad a che a b
a+=b; assegna ad a il valore b sommato ad a
Gianluca Attolini - A.A. 2001-2002 laboratorio del corso Fondamenti di Informatica - Politecnico di Milano sede di Cremona
pagina 6
- Puntatori Permettono la gestione di strutture dinamiche (create e distrutte dall'utente).
Un Puntatore è una variabile che contiene l'indirizzo di memoria di un'altra
variabile. In C un puntatore si dichiara anteponendo al nome della variabile
il simbolo *
operatori
descrizione
applicato ad una variabile restituisce il puntatore ad
essa
applicato ad un puntatore restituisce la variabile
puntata
&
*
- Istruzioni di Controllo Condizionali Il costrutto if permette la gestione del flusso delle istruzioni.
Altro costrutto condizionale è lo switch .
Inoltre esiste l'operatore ?, già visto, che a volte è una alternativa ad if
sintassi costrutti
if <condizione> istruzione;
else istruzione;
descrizione
la clausola else è opzionale
se la condizione vale VERO (cioè
qualsiasi valore diverso da zero) viene
eseguita l'istruzione (o il blocco)
corrispondente all'if; nel caso di
valore FALSO della condizione, se è
presente il ramo else, sarà eseguita
l'istruzione (o il blocco)
corrispondente all'else
if <condizione>
istruzione;
else if <condizione>
istruzione;
else if <condizione>
istruzione;
.
.
.
else
istruzione;
è una struttura a scala dove vengono
valutate le espressioni condizionali
dall'alto verso il basso, quando si
verifica una condizione viene eseguita
l'istruzione corrispondente e viene
abbandonata la catena di if
se non è presente l'ultimo else, qualora
non sia verificata nessuna delle
condizioni, non viene eseguita nessuna
istruzione della catena
Gianluca Attolini - A.A. 2001-2002 laboratorio del corso Fondamenti di Informatica - Politecnico di Milano sede di Cremona
pagina 7
sintassi costrutti
switch <variabile>{
case costante1:
sequenza istruzioni
break;
case costante2:
sequenza istruzioni
break;
.
.
.
default:
sequenza istruzioni
}
descrizione
sebbene il costrutto if else if
consenta di realizzare test multipli, a
volte risulta poco leggibile
l'istruzione migliore per il test multiplo
e rappresentata dallo switch
con questo costrutto si confronta il
valore di una variabile con una lista di
costanti che possono essere di tipo
int o char
quando si verifica una uguaglianza
viene eseguito il blocco di istruzioni
corrispondenti fino al break
la parte default è opzionale, e se è
presente viene eseguita nel caso in cui
non si verifichi alcuna corrispondenza
NOTE
1.
i test del costrutto switch possono solo verificare l'uguaglianza, a differenza di quelli
verificare condizioni di qualsiasi tipo
if che possono
2.
non possono esistere due case con lo stesso valore di costante nello stesso costrutto switch, possono
invece avere lo stesso valore due case che appartengono a due costrutti switch annidati
3.
se nel costrutto switch vengono usate costanti di tipo char queste vengono automaticamente convertite
nel corrispondente valore int
Gianluca Attolini - A.A. 2001-2002 laboratorio del corso Fondamenti di Informatica - Politecnico di Milano sede di Cremona
pagina 8
- Istruzioni di Controllo Iterative I costrutti di loop consentono di eseguire un insieme di istruzioni fino a
quando non si verifica una data condizione.
sintassi costrutti
for(
inizializzazione;
condizione;
incremento
)
istruzione;
descrizione
l'inizializzazione è, nella sua forma più
semplice, una istruzione di assegnamento con
la quale si determina il valore iniziale della
variabile di controllo del loop
la condizione è una espressione relazionale
usata per valutare la variabile di controllo al
fine di determinare il momento dell'uscita dal
loop
l'esecuzione dell'istruzione prosegue sino a
quando la condizione resta VERA, quando
diviene FALSA l'esecuzione prosegue con
l'istruzione successiva al for
nota: istruzione può essere una istruzione vuota, una
istruzione singola oppure un blocco
l'incremento definisce il modo in cui la
variabile di controllo cambia il suo valore ad
ogni ripetizione del loop
il loop viene eseguito fino a quando la
condizione rimane VERA. Quando la
condizione diviene FALSA l'esecuzione
while(condizione)
prosegue dall'istruzione subito dopo il loop
istruzione;
la condizione può essere una qualsiasi
espressione valida in C
do{
istruzione;
}while (condizione)
istruzioni
break
continue
exit
a differenza del for e del while il
do-while verifica la condizione alla fine
del ciclo e non all'inizio!!!
descrizione
oltre che nello switch può essere messa
in qualsiasi loop, e ne forza la terminazione,
cioè fa in modo che l'istruzione successiva
sia quella subito dopo il loop
forza una nuova iterazione del loop a partire
dal suo inizio
provoca l'immediata terminazione dell'intero
programma e ritorno al Sistema Operativo
Gianluca Attolini - A.A. 2001-2002 laboratorio del corso Fondamenti di Informatica - Politecnico di Milano sede di Cremona
pagina 9
- Direttive del Preprocessore lo standard ANSI ammette delle direttive che sono sempre precedute dal simbolo #
La direttiva #define consente di creare delle costanti simboliche che
possono poi essere usate nel codice del programma
sintassi direttiva
#define identificatore stringa
descrizione
la stringa vine sostituita all'dentificatore
ogni volta che viene incontrata nel
codice sorgente
La direttiva #include chiede al compilatore di includere un determinato
file all'interno del codice sorgente
sintassi direttiva
#include nomefile
descrizione
il nome del file può essere racchiuso tra
parentesi angolari
(esempio <stdio.h> )
o tra virgolette
(esempio "stdio.h" )
se il nomefile è comprensivo del
percorso completo di dove ricercare il
file, la ricerca del file si limita al
percorso indicato
se non si specifica il percorso ed il
nomefile è compreso tra doppi apici "" il
file viene ricercato nella directory
corrente
se non si specifica il percorso ed il
nomefile è compreso tra parentesi
angolari <> il file viene ricercato nelle
directory standard
Gianluca Attolini - A.A. 2001-2002 laboratorio del corso Fondamenti di Informatica - Politecnico di Milano sede di Cremona
pagina 10