#include <stdio.h>

main()
{
...
}

--------------------Compilazione

gcc file.c -lm

(compila librerie libm Standard Math Library 
che contengono sqrt, log, sin, cos)


--------------------Tipi di dati

char     un byte, rappresenta i caratteri del set locale

int      intero che riflette l'ampiezza degli interi della macchina

float    floating point in singola precisione

double   floating point in doppia precisione

short int  intero di almeno 16 bit

long int   intero di almeno 32 bit

unsigned char   intero positivo tra 0 e 255

signed char     intero compreso tra -128 e +127

unsigned int

signed int

------------------Costanti numeriche

1234       int
037        int ottale
0x1f       int esadecimale
1234l      long int
123.4      double 
1e-2       double
123.4f     float

------------------Costanti carattere

si tratta di un intero scritto sotto forma 
di carattere racchiuso tra apici

'A'  equivale a 65
'0'  equivale a 48
'\0' carattere nullo
'\a' campanello
'\b' backspace
'\n' new line
'\t' tab
'\r' return
'\\' backslash
'\'' apice
'\"' virgolette
'\000' carattere indicato in ottale
'\xhh' carattere indicato in esadecimale

"stringa" stringa costante o costante alfanumerica:
si tratta di un vettore di caratteri terminante in \0

Codice ASCII:
a        = 97 = 0x61
A        = 65 = 0x41
0        = 48 = 0x30
space    = 32 = 0x20
new line = 10 = 0x0a
tilde    = 126 = 0x7e

---------Inizializzazione di variabili e vettori

int n = 4;
int vec[] = {1, 2, 4, 8};
char pattern[] = {'c', 'a', 's', 'a', '\0'}; 
char pattern[] = "casa"; 

---------------Funzioni matematiche

sin(x) cos(x) atan2(y,x) exp(x) 
log(x) log10(x)
pow(x,y) sqrt(x) fabs(x)

----------------Operatori aritmetici

* / 
+ - %

----------------Operatori relazionali 

> >= < <= 
== !=

----------------Operatori logici 

&& 
||

----------------Operatore di assegnazione

variabile = espressione

--------------------Strutture di controllo

if (espressione)
   istruzione;
else
   istruzione;


while (espressione)
   istruzione;


for (i = 0; i < n; i++)
   istruzione;


switch (espressione)
{
   case value:
     istruzione;
     break;
   case value:
     istruzione;
     break;
   default:
     istruzione;
     break;
}

----------------------Input Output

scrive il contenuto di una variabile intera come carattere ASCII
putchar(c);

legge il prossimo carattere di input come variabile intera
c = getchar();

output formattato (scrive su standard output - terminale):
printf("variabile intera, float, stringa = %d %f %s\n", n, a, s);

scrive nella stringa (vettore di caratteri) s:
sprintf(s, "variabile intera = %d\n", n);

scrive in un file formattato
fprintf(fp, "%d", n);

scrive una stringa (un'intera linea) su file:
fputs(s, fp);

input formattato (legge da standard input - tastiera):
scanf("%d %s", &giorno, mese);

legge dalla stringa s:
sscanf(s, "%d %s", &giorno, mese);
 
legge da un file (variabile intera, float, double, stringa):
fscanf(fp, "%d %f %lf %s", &n, &x, &y, mese);

legge una linea (fino a new line, massimo int max caratteri) da file:
fgets(s, max, fp); 

il file deve essere aperto con fopen che restituisce
un file pointer fp; il secondo argomento indica il modo
(lettura "r", scrittura "w", append "a")
la dichiarazione FILE definisce il file pointer:
FILE *fp;
fp = fopen("filename", "r");
...utilizzo di fp...
fclose(fp);