Escolar Documentos
Profissional Documentos
Cultura Documentos
programma principale
programma principale: la funzione main non restituisce nulla
commento su pi righe
commento su una sola riga (anche al termine di unistruzione)
funzione che restituisce il n di bytes occupati dallargomento
formattazione delloutput:
\t
\t\t
\n
dec, oct, hex
endl
\0
ends
flush
setw(n)
setfill(m)
setprecision(p)
operatori aritmetici:
=
+ - / *
%
++
-+= valore
-= valore
*= valore
/= valore
assegnazione
addizione, sottrazione, divisione, moltiplicazione
resto della divisione tra interi
incremento unario (se precede la variabile lincremento avviene
prima dellutilizzo della variabile, viceversa se segue la variabile)
decremento unario
incremento di un valore specificato
decremento di un valore specificato
moltiplicatore per un valore specificato
divisore per un valore specificato
operatori di relazione:
==
!=
<
>
<=
>=
332318218.docAPPUNTI
uguaglianza
disuguaglianza
minore di
maggiore di
minore o uguale di
maggiore o uguale di
Emi 2007
pag.
operatori logici:
&&
||
!
&
|
^
# define la direttiva che permette di definire una costante simbolica ( una dichiarativa di
precompilazione).
es.
# include la direttiva che indica al preprocessore (un programma) di includere nel codice le
librerie specificate ( unaltra dichiarativa di precompilazione).
es.
#include <iostream.h>
// include nel codice lheader file (.h), o file di intestazione, che contiene le
// descrizioni delle funzioni e dichiarazioni necessarie per gestire lI/O.
costanti enumerative:
es.
enum {}
oppure:
enum giorno {luned=1, marted=2,, domenica=7}
// e le costanti avranno valori stabiliti 1, 2, , 7
332318218.docAPPUNTI
Emi 2007
pag.
Note:
-
Le librerie disponibili in C prevedono una serie di funzioni predefinite di utilit generale: spesso per
utilizzarle necessario utilizzare gli header (files con estensione .h) che le contengono.
332318218.docAPPUNTI
Emi 2007
pag.
array
vettori:
es.
int numeri[20];
// dichiarazione
// dichiarazione e inizializzazione
char nomi[15][25]
Il nome dellarray un puntatore, cio contiene lindirizzo del primo elemento dellarray.
Un array pu essere passato ad una funzione solo per referenza (= per indirizzo)
332318218.docAPPUNTI
Emi 2007
pag.
Strutture ( o record)
struct NomeStruttura
{
tipo1 campo1;
tipo2 campo2;
tipo3 campo3;
};
esempio:
struct Data
{
int giorno;
char mese[4];
int anno;
};
oppure
(meglio):
struct Data
{
int giorno;
char mese[4]
int anno;
};
typedef struct Data giorno;
giorno oggi
assegno alla variabile oggi (con struttura Data) il valore 5 set 2007:
fase 1:
DEFINIZIONE
DELLA
STRUTTURA
struct Persona
{
int matricola;
char nome[20];
char indirizzo[15];
int annoNascita;
};
1) definizione di un nuovo tipo
fase 2:
typedef struct Persona Anagrafica
NUOVO
TIPO DI DATO
fase 3:
DICHIARAZIONE
VARIABILI
(1)
(2)
(3)
Anagrafica Dipendente;
Anagrafica Docente;
Anagrafica Studente;
UTILIZZO DATI
332318218.docAPPUNTI
fase 4:
oggi.giorno = 5;
oggi.mese[0] = s;
oggi.mese[1] = e;
oggi.mese[2] = t;
oggi.mese[3] = \0;
oggi.anno = 2007;
Emi 2007
pag.
Tabelle
Una tabella un array di record (definiti come struttura).
es.
struct Persona {
int matricola;
char nome[30];
int livello;
};
typedef struct Persona anag;
anag dipendenti[200]; // definisce un array di 200 dipendenti,
// ciascuno con: numero di matricola, nome e livello.
Struttura dinamica di dati = struttura alla quale viene assegnato lo spazio di memoria centrale
necessario. Durante lesecuzione del programma tale spazio pu essere aumentato o ridotto,
secondo le esigenze.
332318218.docAPPUNTI
Emi 2007
pag.
Puntatori
Una variabile puntatore (un puntatore) contiene lindirizzo di memoria di unaltra variabile. Il
puntatore deve essere dello stesso tipo della variabile cui si riferisce. Nella dichiarazione il nome di
un puntatore inizia sempre con un asterisco.
es.
int *puntatore
int num = 5;
int *puntatore;
...
puntatore = #
int a, b;
int *puntatore;
a = 5;
puntatore = &a; // indirizzo di a
(equivale a b = a) b = *puntatore; // assegno alla variabile b lindirizzo della variabile a
printf (%d, b); // visualizzo il valore di b (avendo lo stesso indirizzo
// di a, vale 5 come a)
specificatori di formato per i puntatori:
decimale
esadecimale
esadecimale minuscolo
esadecimale maiuscolo
%d
%p (formato puntatore)
%x
%X
Utilizzo dei puntatori nelle funzioni con passaggio di parametri per indirizzo:
esempio:
DICHIARAZIONE
DELLA FUNZIONE
}
RICHIAMO
DELLA
FUNZIONE
Emi 2007
pag.
Archivi di dati
Il file una struttura di dati che realizza in memoria di massa la struttura della tabella.
Operazioni fondamentali: apertura, lettura, scrittura, chiusura.
I file trattati dal file system del S.O. si distinguono, in base allorganizzazione dei dati in essi
contenuti, in:
file di testo o ASCII (che contengono il carattere di fine riga per fornire unimpaginazione
delle informazioni in essi contenute e in cui ciascun byte corrisponde a un carattere ASCII)
file binari (flussi continui di bit raggruppati in byte ma non necessariamente distinti luno
dallaltro).
Useremo i file binari per gli archivi con record a lunghezza costante e i file di testo per gli archivi
con record a lunghezza variabile.
esempio:
struct Persona {
int Matricola;
char Nome[40];
char Indirizzo[40];
int Livello;
float Stipendi[13];
};
typedef struct Persona anag;
anag Dipendente ;
FILE *fp ;
Accesso ai record di un file: sequenziale o diretto (se i record hanno lunghezza fissa).
332318218.docAPPUNTI
Emi 2007
pag.
esempi:
fp = fopen(anag.dat, w);
fp = fopen (anag.dat, wb);
Chiusura
fclose (fp);
fread (&buffer, dimensione, numero_elementi, fp);
Lettura
esempio:
fread (&Dipendente, sizeof(struct Persona), 1, fp);
fwrite (&buffer, dimensione, numero_elementi, fp);
esempio:
Scrittura
Posizionamento
(se laccesso
random)
Posizione
corrente del
puntatore
file
binari
file di
testo
rb
sola lettura
wb
sola scrittura
r+b
r+
lettura e scrittura
w+b
w+
scrittura e lettura
ab
scrittura in append
a+b
a+
332318218.docAPPUNTI
Emi 2007
pag.
#include <stdio.h>
#include <stdlib.h>
// ------------------------------ //
// procedura REGISTRA //
// ------------------------------ //
// -------------------------------- //
// PARTE DICHIARATIVA //
// -------------------------------- //
// dichiarazione della struttura merce
struct merce {
char descrizione[20];
float prezzo;
};
// dichiarazione del tipo Merce
typedef struct merce Merce;
// dichiarazione di articolo
Merce articolo;
FILE *fp;
// dichiarazione dei prototipi delle funzioni
void Registra(void);
void Stampa(void);
// -------------------------------------- //
// PROGRAMMA PRINCIPALE //
// -------------------------------------- //
int main(void)
{
// generazione dell'archivio
fp = fopen ("Listino.dat", "wb");
Registra();
fclose (fp);
// elenco degli articoli
fp = fopen ("Listino.dat", "rb");
Stampa();
fclose (fp);
system("PAUSE");
return 0;
}
332318218.docAPPUNTI
10
Emi 2007
void Registra(void) {
int risposta;
do {
// input da tastiera
printf ("Inserimento di un articolo \n");
printf ("Descrizione: ");
scanf ("%s", articolo.descrizione);
printf ("Prezzo: ");
scanf ("%f", &articolo.prezzo);
// scrittura del record
fwrite (&articolo, sizeof(Merce), 1, fp);
// controllo del ciclo
do {
printf ("Elenco finito (0 = no, 1 = si)? ");
scanf ("%d", &risposta);
} while (risposta != 0 && risposta != 1);
} while (risposta == 0);
return;
}
// -------------------------- //
// procedura STAMPA //
// -------------------------- //
void Stampa(void) {
printf ("Listino articoli \n");
fread (&articolo, sizeof(Merce), 1, fp);
while (!feof(fp)) {
printf ("%-25s ",
articolo.descrizione);
printf ("%12.2f \n",
articolo.prezzo);
fread (&articolo, sizeof(Merce),
1, fp);
}
return;
}
pag.
332318218.docAPPUNTI
11
Emi 2007
pag.