Try   HackMD

✨ LA GUIDA DEFINITIVA - C

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
Ciao!

La serie delle "GUIDE DEFINITIVE" è un progetto creato in parte per scherzo e in parte per aiutare chi ne ha bisogno. Se riscontri problemi, errori o simili, puoi inviarmi un messaggio su Telegram tramite (@clipwav), cercherò di rispondere il prima possibile!

Grazie mille!
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Il linguaggio di programmazione C è uno dei linguaggi di programmazione più potenti disponibili, si tratta di un linguaggio compilato, il che lo rende veloce ed efficente, ed è usato principalmente per sviluppare software di basso livello come per esempio:

  • Kernel
  • Sistemi operativi
  • Programmi

Introduzione

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
Nota bene!
Per eseguire il nostro programma scritto in C sarà necessario installare un compilatore C, ecco alcuni dei più usati:

  • Mingw
  • GCC (consigliato)
  • CMake
  • Altri

Template

#include <stdio.h>
    
int main(void){
    
    // inserisci qui il tuo codice
         
    return 0;
}

Possiamo iniziare un nuovo progetto con questo template di partenza, contiene:

  • un'istruzione #include, per importare la libreria stdio (input/output)
  • la funzione main, che conterrà tutto il codice che il nostro programma andrà ad eseguire
  • return 0 per chiudere il programma una volta completata l'esecuzione

Commenti

I commenti sono solitamente utilizzati per fornire una descrizione del codice sorgente.

Non vengono elaborati dal compilatore e non hanno alcun effetto sul funzionamento del programma.

Iniziano con il carattere \ e proseguono fino alla fine della linea

Esempio in C:

int main(){
    printf("Ciao!"); // questa istruzione stampa "Ciao!" nella console d'output

    /* questo è un altro tipo di commento */
    
    /* Questo è
     * un commento
     * multilinea */

    return 0;
}

Variabili

Le variabili sono degli spazi di memoria che vengono usati per memorizzare i dati. Ogni variabile ha un nome e un tipo. Il nome della variabile serve per identificarla, mentre il tipo determina il tipo di dati che può memorizzare.

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
le variabili sono salvate nella RAM

In C, le variabili possono essere di diversi tipi, per esempio ecco alcune variabili di tipo semplice:

  • Interi (int)
    Il tipo di variabile int viene utilizzato per salvare numeri interi (fino a 4 cifre, 8 cifre con long long int)
int numeroIntero = 5;
  • Floating point (float)
    il tipo di variabile float consente di salvare valori di tipo decimale com un massimo di 32 caratteri
int numeroDecimale = 0.05; // usa il punto per i decimali
  • Caratteri (char)
    il tipo di variabile char consente di salvare valori di tipo carattere

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
Possiamo impostare come valorequalunque tipo di carattere, anche i numeri!

Per indicare che il valore assegnato è un carattere dobbiamo metterlo all'interno di virgolette ("") oppure apici ('').

char lettera = "a";
char numero = '2';
  • String (char *)
    le variabili di tipo String consentono di salvare un ARRAY di caratteri così da formare una stringa di testo
    ("Hello, World")
char[15] = "Hello, World!";
  • Double (double)
    le variabili di tipo double consentono di salvare valori decimali più precisi rispetto alle variabili di tipo float, consente di avere 16 cifre senza considerare il punto.
double pi = 3.141592653589793;


⚠️ Ogni variabile semplice può contenere un singolo valore alla volta.

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
Per utilizzare le variabili, è necessario dichiararle prima di poterle utilizzare.

Questo significa assegnare loro un nome, un tipo ed opzionalmente un valore.

🚨 In C non esistono le variabili di tipo boolean

Cosa sono?
Le variabili booleane possono contenere uno di due valori, vero oppure falso.

Come faccio se non posso usarle in C?
Usiamo gli int, qualunque valore diverso da 0 ritorna vero all'interno dei if

Esempio:

if(3){
    printf("YES\n") // \n è usato per tornare a capo
} else {
    printf("NO\n")
}

/* Se il numero è diverso a 0, verrà interpretato come "Vero", quindi il nostro programma stamperà sempre si */

In alternativa possiamo importare #include<stdbool.h> in cima al documento per poter utilizzare il tipo di variabile bool

Esempio:

#include<stdbool.h>
    
int main(){
    bool a = true;
    bool b = false;
    
    if(a){
        printf("Ciao, mondo!");
    } else {
        printf("Addio, mondo!");
    }
    
    printf("%d\n", a && b); // ritornerà falso
    
    /* vero e vero = vero
     * vero e falso = falso
     * falso e vero = falso
     * falso e falso = falso
    */
    
    return 0;
}

Per dichiarare una variabile di tipo intero si può utilizzare la seguente sintassi:

int numero = 5;

In questo modo si sta dicendo al compilatore che si vuole creare una variabile di nome "numero", con tipo "int" e valore uguale a 5.



Esistono anche variabili di tipo derivate, come ad esempio:

  • Array: un array è un insieme di variabili di uno stesso tipo, disposti in un ordine specifico. Ogni elemento di un array è identificato da un indice, che indica la posizione dell'elemento all'interno dell'array.

Possiamo vedere un array come un cassetto che contiene più elementi dello stesso tipo, posso avere più cassetti che possono contenere un insieme predefinito di oggetti dello stesso tipo

int a[10]; // questo array contiene 10 slot

for(i = 0; i < 10; i++){
    a[i] = i * 2  
    // posso far riferimento ad ogni slot dell'array 
    // selezionando il numero dello slot tra le parentesi quadre 
    // (es. a[numero] = valore)
}

for(int i = 0; i < 10; i++){
    printf("Stampo elemento %d che vale %d", i, a[i])
}
  • Functions: una funzione è un insieme di istruzioni che vengono eseguite in un determinato ordine e che possono restituire un valore. Ogni funzione ha un nome, che serve a identificarla, e può avere uno o più parametri, che sono i valori che vengono passati alla funzione quando viene eseguita.

  • Pointers: un puntatore è una variabile che contiene l'indirizzo di un'altra variabile. I puntatori possono essere di diversi tipi, a seconda del tipo di variabile a cui fanno riferimento.

  • Struct: una struttura è un insieme di variabili di diversi tipi, disposte in un ordine specifico. Ogni variabile all'interno della struttura è identificata da un nome, che serve a identificarla.

struct utente{
    char[25] nome;
    char[25] cognome;
    int eta; // un qualunque numero intero
    char sesso; // m oppure f
}
  • Enum: una enum è un tipo di variabile personalizzata che può assumere solo determinati valori che vengono determinati durante la dichiarazione.
enum colori{rosso, verde, giallo, blu, viola}

Per più informazioni sulle variabili, controlla il seguente [Link]



Cosa sono gli lvalues?

gli lvalue sono contenitori per valori assegnabili. Ciò significa che possono essere utilizzati per assegnare valori ad altri lvalue. Un lvalue può essere una variabile, una costante o un'espressione che punta a una locazione di memoria.

Esempio:

int a = 5; // a è un lvalue
int* b = &a; // b è un lvalue che punta all'indirizzo di a

a = 10; // assegna il valore 10 all'lvalue a
*b = 20; // assegna il valore 20 all'lvalue b, che punta all'indirizzo di a

In poche parole, l'lvalue è il nome che diamo ad un espressione, quale variabile, funzione, etc.

le espressioni che vengono rappresentate senza un dichiarare l'oggetto, sono chiamati rvalues

Un rvalue è un espressione che può apparire sul lato destro di un operatore d'assegnamento (=) ma non a sinistra di esso

Esempio:

int x = 5; // x è un lvalue
x =  5; // 5 è un rvalue


Puntatori

Un puntatore è una variabile che contiene l'indirizzo di memoria di un altro oggetto, invece che il valore dell'oggetto stesso. I puntatori vengono utilizzati per gestire la memoria dinamica e per creare funzioni che possono modificare gli oggetti a cui fanno riferimento.

Per utilizzare i puntatori in C, è necessario dichiarare una variabile puntatore con l'operatore "*" seguito dal nome della variabile. Ad esempio:

int *ptr;

Questo dichiara un puntatore chiamato "ptr" che può fare riferimento a un oggetto di tipo "int". Per assegnare un indirizzo di memoria a un puntatore, si utilizza l'operatore di indirizzo "&" davanti alla variabile cui si vuole fare riferimento. Ad esempio:

int x = 5;
int *ptr = &x;

In questo esempio, il puntatore "ptr" viene assegnato all'indirizzo di memoria della variabile "x". Per accedere al valore di un oggetto a cui fa riferimento un puntatore, si utilizza l'operatore di dereferenziazione "*". Ad esempio:

int x = 5;
int *ptr = &x;
printf("%d", *ptr); // stampa il valore di x, che è 5

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
I puntatori sono un concetto importante da comprendere quando si lavora con C, poiché sono utilizzati per gestire la memoria dinamica, passare argomenti per riferimento a funzioni, creare array dinamici e strutture dati come liste, alberi e grafi.

Sono un concetto potente e versatile che viene utilizzato in molti aspetti del linguaggio C.



Struct

Le strutture in C sono un modo per raggruppare diverse variabili di tipo diverso in un unico oggetto.
Viene definita dall'utente e può contenere variabili di qualsiasi tipo, come interi, caratteri e puntatori. Le strutture vengono utilizzate per creare strutture dati come liste e alberi.

Per definire una struttura in C, si utilizza la keyword "struct" seguita dal nome della struttura e dalle variabili che essa contiene, racchiuse tra parentesi graffe. Ad esempio:

struct Persona {
  char nome[50];
  int eta;
  float altezza;
};

Questo definisce una struttura chiamata "Persona" che contiene tre variabili: una stringa di caratteri chiamata "nome", un intero chiamato "eta" e un float chiamato "altezza".

Una volta definita una struttura, si può creare un oggetto di quel tipo usando la keyword "struct" seguita dal nome della struttura e dal nome dell'oggetto. Ad esempio:

struct Persona p1;

Questo crea un oggetto di tipo "Persona" chiamato "p1". Per accedere alle variabili all'interno di un oggetto di tipo struttura, si utilizza il simbolo "." (punto). Ad esempio:

struct Persona p1;
p1.nome = "Mario";
p1.eta = 25;
p1.altezza = 1.75;

In questo esempio, vengono assegnati valori alle variabili all'interno dell'oggetto "p1" di tipo "Persona".

Le strutture possono essere utilizzate per creare strutture dati come liste e alberi. Ad esempio, si può creare una lista di oggetti di tipo "Persona" utilizzando un puntatore a un oggetto di tipo "Persona" come variabile all'interno della struttura. Ad esempio:

struct Persona {
  char nome[50];
  int eta;
  float altezza;
  struct Persona *next;
};

In questo esempio, la struttura "Persona" viene modificata per includere un puntatore a un altro oggetto di tipo "Persona" chiamato "next". Questo può essere utilizzato per creare una lista di oggetti di tipo "Persona" in cui ogni oggetto punta al successivo nella lista.

Funzioni principali (cicli, condizioni, etc.)

la funzione printf()

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
printf() è una funzione che permette di "stampare" del testo nella console d'output del programma (di solito il terminale).

Esempio:

int numero = 5;

printf("%d", numero); // 5
printf("Ciao, mondo!"); // Ciao, mondo!

In questo caso, la "%d" viene utilizzata per indicare al compilatore che si vuole stampare un valore di tipo intero.

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
Ecco un rapido riepilogo degli indicatori di formato printf disponibili:

%c - carattere
%d - numero decimale (intero) (base 10)
%e - numero esponenziale float
%f - numero float
%i - numero intero (base 10)
%o - numero ottale (base 8)
%s - una stringa di caratteri
%u - numero decimale (intero) senza segno
%x - numero in esadecimale (base 16)
%% - stampa un segno di percentuale
\% - stampa un segno di percentuale


L'operatore if

L'operatore if if permette di eseguire o non eseguire un blocco di codice a seconda dell'esito (vero o falso) del valore specificato all'interno delle parentesi.

Esempio:

if(x == y){  // Se x è uguale ad y (vero)
    printf("x è uguale a y");
} else { // Altrimenti...
    printf("x non è uguale a y");
}

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
In C e molti altri linguaggi di programmazone, il segno d'uguale (=) cambia funzione in base a quante folte è scritto in successione:

  • = Assegna un valore, quindi per esempio int numero = 2
  • == Esegue una comparazione tra due valori a == b

for Loop

Il for loop è utilizzato per eseguire un blocco di codice un certo numero di volte.

Di seguito è riportato un esempio di codice che utilizza un for loop per stampare i numeri da 1 a 5:


for(int i = 1; i <= 5; i++) {
    printf("%d\n", i);
}

In questo esempio, la variabile i viene inizializzata a 1.
Il blocco di codice all'interno del for loop verrà eseguito 5 volte (fino a quando i <= 5 non sarà falso), con la variabile i che assumerà i valori 1, 2, 3, 4 ed infine 5 (i inizia da 1).

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
Puoi utilizzare la variabile i all'interno del ciclo for, il valore cambierà ad ogni ciclo

(non deve essere per forza chiamata "i", possiamo assegnargli un nome a piacere)


while Loop

Il ciclo while è un tipo di ciclo che esegue un blocco di istruzioni fino a quando una condizione è vera.

La sintassi del ciclo while è la seguente:

// mentre...
while (condizione)
{
   //istruzioni
}

Esempio:

int x = 1;

while (x <= 10)
{
   printf("%d\n", x);
   x++;
}

do while Loop

Il do while loop è un tipo di loop che esegue il codice all'interno del suo blocco almeno una volta, prima di verificare la condizione di uscita.

Ciò significa che il codice all'interno del blocco do while verrà eseguito almeno una volta, anche se la condizione di uscita è falsa.

Ecco un esempio di come utilizzare un do while loop:

int i = 0;

do {
    printf("%d \n", i);
    i++;
} while (i <= 10);

In questo esempio, stampa il valore di i sullo schermo e quindi incrementa i di 1.

Ciò verrà ripetuto fino a quando i non sarà uguale a 10.



Gli Switch

Gli switch è una struttura di controllo che consente di eseguire un blocco di codice specifico in base al valore di un'espressione.

L'espressione viene valutata e il valore viene confrontato con un elenco di valori noti come "case".

Se il valore corrisponde a uno dei case, viene eseguito il codice assegnato a quel case. Altrimenti, viene eseguito il codice assegnato all'opzione "default".

Ecco un esempio di come funzionano gli switch:

switch (valore) {
  case 1:
        // codice da eseguire se valore è 1;
    break;
  case 2:
        // codice da eseguire se valore è 2;
    break;
  ...
  default:
    // codice da eseguire se valore non è nessuno dei case sopra elencati;
}



Salti non condizionati

Break

Il break è un'istruzione che interrompe l'esecuzione di un loop.

Esempio:

int i = 0;
while(true){
    if (i == 5){
        break;
    }

    printf("%d ", i);
    i++;
}

// Output: 0 1 2 3 4

Return

Il return è una keyword utilizzata per indicare la fine di una funzione e la restituzione di un valore.

Esempio:

int somma(int a, int b)
{
 return a + b;
}

Nell'esempio sopra, la funzione somma prende in input due numeri interi e restituisce la loro somma.


int numero = 0;

if(!numero){
    return printf("Non hai inserito il numero!");
    // attraverso return esco dal programma
} else {
    // altro
}

Continue

Continue è un'istruzione che indica al compilatore di ignorare il resto del codice all'interno di un ciclo e di passare direttamente all'iterazione successiva.

Ecco un semplice esempio di come funziona:

for(int i=0; i < 10; i++){
    if(i == 5){
        continue; 
    } printf("%d ", i); 
}

In questo esempio, il valore 5 verrà ignorato e la stampa sarà la seguente: emmet selection0 1 2 3 4 6 7 8 9



Esercizio

Mettiamo i concetti spiegati fino ad ora in pratica!
Crea un programma scritto in C che esegue le seguenti istruzioni:

  1. Dichiara una variabile di tipo int di nome numero
  2. Assegna un numero a piacere alla variabile numero (140, 420, 69)
  3. controlla se il valore della variabile numero è superiore a 100, se è maggiore di 100 stampa un messaggio in output che dice "il numero è maggiore di 100!", altrimenti stampa "il numero è minore di 100!"
  4. (opzionale) mostra in output il valore del numero impostato nella variabile
Soluzione
#include<stdio.h>
    
int main(){
    // dichiariamo una variabile di tipo intero
    int numero = 135;
    
    
    // se il numero è maggiore di 100...
    if(numero > 100){
        printf("Il numero %d è maggiore di 100!\n", numero);    
    // altrimenti...
    } else {
        printf("Il numero %d è minore di 100!\n", numero);
    }

    // termino il programma
    return 0;
}


Operazioni

In C esistono diversi operatori per compiere calcoli matematici o controlli, ecco una breve lista con tutti gli operatori principali:

Operatori condizionali

Operatore Significato Esempio Dettagli
= Il singolo uguale indica "imposta il valore a" int a = 5 Imposta il valore di una variabile
== è uguale a (viene usato nei controlli) a == b controlla se il valore a equivale al valore b, se sono uguarli ritorna 1 (Vero) altrimenti ritorna 0 (Falso)
&& and (e), usato per verificare se due condizioni sono entrambi vere x && y Se entrambe gli operandi sono diversi da 0 (Falso) ritorna 1 (Vero)
|| or (oppure), usato per verificare se almeno una delle due condizioni è vera x || y Se almeno un operando è diverso da 0 (Falso) ritorna 1 (Vero)
!= not equal to (non uguale a), usato per verificare il contrario di una condizione x != y se x è diverso da y, l'operatore ! può anche essere usato per verificare se una condizione è falsa (if(!inseritoNumero){}), "!" può essere letto come "non"
>[=] maggiore [uguale (opzionale)] x > y
<[=] minore [uguale (opzionale)] x < y

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
Se il primo operatore in un || è vero il secondo non viene eseguito, quindi se per esempio abbiamo 1 || ++b, ++b non verrà eseguito dato che 1 è già vero, rendendo l'|| vero, stesso concetto si applica per il && quando uno dei due valori è falso

Operatori Matematici

Operatore Significato Esempio Dettagli
++ somma + 1, è l'equivalente di
x = x+1
x++ posso inserire il "++" prima o dopo la variabile, cambia funzionalità in base al contesto
a = b++ | a viene impostato a b e poi viene aggiunto 1 a b
a = ++b | prima viene fatto b+1, poi viene impostato il risultato di b ad a
sottrazione di 1, è l'equivalente di
x = x-1
x-- posso inserire il "" prima o dopo la variabile, cambia funzionalità in base al contesto
a = b-- | a viene impostato a b e poi viene aggiunto 1 a b
a = --b | prima viene fatto b-1, poi viene impostato il risultato di b ad a
+ semplice somma tra 2 o più variabili/numeri x + y
- semplice sottrazione tra 2 o più variabili/numeri x - y
* semplice moltiplicazione tra 2 o più variabili/numeri x * y
/ semplice divisione tra 2 o più variabili/numeri x / y
% modulo, restituisce il resto tra 2 numeri x % y

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
Le funzioni in C vengono definite in modo che, una volta definite, possano essere richiamate da qualsiasi altra parte del programma.

Quando si scrive una funzione, si specifica il tipo di dati che la funzione restituisce (come per esempio un numero intero [int], una stringa di caratteri [char *], ecc.), seguito dal nome della funzione ed infine, tra parentesi tonde, si specificano i parametri che la funzione accetta.

Esempio:

int somma(int a, int b)
{
   return a + b;
}

Questa funzione, chiamata "somma", accetta due parametri di tipo "int" e restituisce un valore di tipo "int". La funzione esegue semplicemente la somma dei due parametri e restituisce il risultato.

Questa funzione può essere utilizzata all'interno di un programma in questo modo:

int main()
{
   int x = 10;
   int y = 20;
   int z = 0;

   z = somma(x, y);

   printf("La somma di %d e %d e' %d\n", x, y, z);

   return 0;
}

Nell'esempio precedente, la funzione "somma" viene chiamata all'interno del "main", passando come parametri i valori "x" e "y".

La funzione esegue la somma dei due parametri e restituisce il risultato, che viene assegnato alla variabile "z".

Espressioni

Nota dell'autore: questa parte è da riscrivere

Un espressione consiste in una sequenza di costanti, identificatori ed operatori che il programmma "calcola" eseguendo le operazioni indicate

Esempio:

#include<stdio.h>

int fun(numero){
    return (numero + 1);
}

a = fun(a) + 1;

if(a > 2){  // <- questa è un espressione
    // fai qualcosa
}

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
Se quello che abbiamo scritto termina con ";" (punto e virgola), esso viene considerato un "comando", altrimenti può essere considerato come un espressione

Esempio:

#include<stdio.h>

int fun(numero){
    return (numero + 1);
}

int main(void){
    int a = 1;
    int b = 5;
    
    a = ++b; // 6, 
    // l'operatore "++" aumenta di 1 la variabile b, rendendo a equivalente a 6
    printf("b vale %d\n", b);
}

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
Attenzione!
a = b + 1; e a = b++; compiono due operazioni diverse!

a = b + 1 assegna ad a il valore di b + 1, quindi senza cambiare b
a = b++ prima aggiunge 1 alla variabile b, e poi assegna il valore ad a

Una espressione ha "effetti collaterali" se modifica uno stato al di fuori del suo ambiente locale.
Quindi è considerato un "effetto collaterale" quando si ha un interazione osservabile con elementi esterni al di fuori di ritornare un valore

Esempio:

// Questa espressione controlla se la variabile a equivale a 5
// il "==" va ad indicare un controllo, quindi un "x è uguale a y?"
if(a == 5){
    printf("Hello World!\n");
}


// Questa espressione imposta il valore della variabile "a" a 5
if(a = 5){
    printf("Hello World!\n")
}

/* Tengo a ricordare che all'interno di un "if", se viene inserito un numero,
 * fino a che il valore sarà diverso da zero verrà sempre ritornato "vero" */

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
Molto importante

Posso assegnare valori solo ad indirizzi di memoria (variabili, per esempio)

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
2 = a, "Ciao" = "Addio", 15.2 = b, a + 1 = 2

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
a = 5, Ciao = "Ciao", numero = 15.351

A sinistra dell'uguale può esserci solamente un valore,




Funzioni ed operatori speciali

Ogni espressione ha un tipo di valore che viene ritornato alla fine dell'esecuzione
Se un espressione non ha valore, ritorna un valore di tipo void

Esempio:
Mettiamo che a è di tipo int

Espressione Tipo Descrizione
\n int Carattere che indica "a capo"
a + 1 int Somma tra due Interi
a + 1.0 double Somma tra un intero ed un float/double
a < 77.7 int Ritorna un int che indica se la condizione è "vera" oppure "falsa"
"A string literal" char * Un Array di caratteri
abort() void Una funzione
sqrt(2.0) double Radice quadrata di 2.0

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
con il termine "ritornato" si indica il valore che equivale un espressione al termine dell'esecuzione



Bonus

In questa sezione aggiungerò concetti base che potrebbero tornare utili

1) Conversione da decimale ad esadecimale

Prova la demo interattiva!

Per convertire un numero decimale (base 10) in esadecimbale (base 16) eseguo la seguente procedura:

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
I numeri da 10 a 15 vengono rappresentati attraverso lettere che vanno da A ad F

Quindi 10 = A, 11 = B, 12 = C, 13 = D, 14 = E, 15 = F

  1. Prendo il mio numero (per esempio 1500) e lo divido per 16
  2. Mi segno il resto da parte, in questo caso 16 (quindi C in esadecimale)
  3. Divido per 16 il risultato ottenuto nello step 1, come numero intero
  4. Ripeto questa operazione fino a quando il numero non è uguale
  5. Una volta finito, inverto l'ordine dei resti di tutte le divisioni ed ottengo il numero esadecimale
Esempio:
- Calcoliamo 1500 diviso 16, il risultato è 93 con resto 12 (Quindi C)
- Calcoliamo 93 diviso 16, il risultato è 5 con resto 13 (Quindi D)
- Calcoliamo 5 diviso 16, il risultato è 0 con resto 5 

Il risultato è 5DC 

2) Conversione da Esadecimale a Decimale

Per convertire un numero esadecimale (base 16) in decimale (base 10) eseguo la seguente procedura:

moltiplichiamo ogni cifra per 16 elevato alla posizione che occupa da destra a sinistra.

Ad esempio, il numero esadecimale "AF" è convertito in decimale come segue:

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
Ricordo che A equivale a 10 ed F equivale a 15

// Moltiplico ogni cifra per 16^posizione (zero incluso)
AF = (A * 16^1) + (F * 16^0)

// Converto i numeri esadecimali in decimali
AF = (10 * 16^1) + (15 * 16^0)

// li sommo
AF = 160 + 15

// ricavo il numero originale
AF = 175

3) Conversione da Binario a Decimale

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
Nota bene:
Alcuni computer potrebbero memorizzare un numero binario con le cifre da destra a sinistra invece che sinistra a destra, questo cambia il calcolo per convertire la cifra

Più informazioni

Per convertire un numero binario (base 2) in decimale (base 10), si moltiplica ogni singolo bit per 2 elevato alla posizione del bit, a partire dal bit meno significativo.

Esempio:

1001101  = 1×2^7 + 0×2^6 + 0×2^5 + 1×2^4 + 1×2^3 + 0×2^2 + 1×2^1
         = 128 + 16 + 8 + 2 + 1
         = 155


Da fare
  • decimale esadecimale
    Image Not Showing Possible Reasons
    • The image file may be corrupted
    • The server hosting the image is unavailable
    • The image path is incorrect
    • The image format is not supported
    Learn More →
  • esadecimale decimale
    Image Not Showing Possible Reasons
    • The image file may be corrupted
    • The server hosting the image is unavailable
    • The image path is incorrect
    • The image format is not supported
    Learn More →
  • binario decimale
  • decimale binario
  • simbolo binario (positivo o negativo)