Rieccoci ragazzi, la scorsa lezione (per chi se la fosse persa eccola), abbiamo creato il nostro primo progetto in C, ora createne uno nuovo.

Vi ritroverete con lo stesso codice di prima, cancellate il printf("Hello world!\n"); poiché non ci servirà più, il resto lasciatelo.

Quindi, la scorsa lezione abbiamo imparato ad usare la funzione printf per stampare a video del testo.

Ma se volessimo stampare più volte lo stesso testo? Sarebbe meglio memorizzarlo da qualche parte
Oppure se voglio memorizzare da qualche parte un numero?

Ed ecco la lezione di oggi, le variabili in C.

In C una variabile viene dichiarata secondo questa sintassi:

tipo nome_variabile;

oppure se vogliamo assegnargli sin dall'inizio un valore:

tipo nome_variabile = valore;

o nel caso dobbiamo assegnarglielo DOPO averla dichiarata:

// dichiaro la variabile
nome_variabile = valore;

I principali tipi di variabili del C sono:

Tipo Valore memorizzato
char Carattere alfanumerico, compreso tra apici singoli ' '
short int Numeri interi piccoli
unsigned short int Numeri interi positivi piccoli
int Numeri interi
unsigned int Numeri interi positivi
long int Numeri interi positivi (nei processori x86 è uguale a int)
long long int Numeri interi grandi
unsigned long long int Numeri interi grandi positivi
float Numeri decimali a singola precisione
double Numeri decimali a doppia precisione (notazione scientifica)

Operazioni sulle variabili
Con le variabile si possono fare le normali operazioni matematiche (addizione > +, sottrazione > -, moltiplicazione > *, divisione > /, resto della divisione > %) esempio:
int a = 2;
int b = 3;
int c = a + b;
Ma facciamo attenzione, vediamo questo esempio:
int a;
a = 2; // fino ad adesso uguale a prima, abbiamo solo assegnato dopo un valore, ma non cambia nulla
float b = 4.5; // dichiriamo e assegnamo una variabile di tipo float
int c = a + b; // ATTENZIONE qui il risultato sarà 6 e non 6.5 poiché int memorizza solo interi, perderemo i decimali

Allora, in questo caso il compilatore riconosce da solo il valore e scarta automaticamente il decimale, ma sarebbe più opportuno convertire il valore esplicitamente in int così:
int c = (int) (a + b); // diciamo che vogliamo il valore intero, così siamo sicuri di non aver problemi
Lo stesso lo si può fare anche con float e gli altri tipi.

Un'altra cosa a cui stare attenti è non memorizzare numeri troppo grandi o troppo piccoli in tipi di variabili che non posso contenerli, infatti se avete notato abbiamo molti tipi di variabili solo per memorizzare numeri interi, questo perché se abbiamo bisogno di numeri piccoli non c'è bisogno di occupare lo spazio che serve per memorizzare anche numeri più grandi, risparmiare ram è uno dei doveri di un programmatore.

Un'altra operazione tra variabili è l'incremento o decremento di una variabile, esempio:

int a = 3;
a = a + 2; // quindi a diventa il suo valore + 2, cioè 5
oppure:
a += 2; // lo stesso caso di prima, a diventa 5
o anche:
a++; // incremento a di 1 dopo aver fatto eventuali calcoli prima
a--; // decremento a di 1 dopo aver fatto eventuali calcoli prima
++a; // incremento a di 1 prima di fare calcoli
--a; // decremento a di 1 prima di fare calcoli

Stampa a video di variabili

int a = 2;
printf("a vale %d", a);

In questo caso abbiamo dichiriato la variabile a, le abbiamo assegnato il valore 2, e poi abbiamo stampato a video "a vale 2", passandogli a come valore da stampare con una virgola e il nome della variabile.

Eccovi la tabella contenente le stringhe di formato per stampare i vari tipi di variabile con printf:

Tipo Uso
%c Variabili Char
%d o %i Variabili in formato decimale
%x o %X Variabili in formato esadecimale
%o Variabili in formato ottale
%l o %ld Variabili long int
%u Variabili unsigned
%f Variabili float
%lf Variabili double
%p Indirizzo esadecimale di una variabile (lo vedremo più avanti)
%s Stringhe di testo (anche queste più avanti)
%n Scrive i byte scritti fin'ora nello stack della funzione printf()

Esempio:
Codice PHP:
#include <stdio.h>
#include <stdlib.h>
int main()
{
    
int a 2// dichiaro a di tipo int e le assegno 2
    
float b 3.5// dichiaro b di tipo float e le assegno 3.5
    
int c = (int) (b); // sommo a e b e memorizzo il risultato in c di tipo int, quindi faccio la conversione a int
    
printf("a vale %d \n"a); // a vale 2
    
printf("b vale %f \n"b); // b vale 3.5
    
a++; // incremento a di 1
    
printf("ora a vale %d \n"a); // a vale 3
    
printf("c vale %d \n"c); // c vale 5
    
+= 4// sommo 4 a c, potrei fare anche c = c + 4;
    
printf("ora c vale %d \n"c); // c vale 9
    
return 0;

Anche per questa lezione è tutto, divertitevi con le nuove cose imparate, alla prossima.
Un saluto, d23.