Fondamenti di C/C++

Operatori ed espressioni in C e C++

In questa lezione userai operatori aritmetici, di assegnazione, di confronto e logici in C e C++ e capirai la regola della divisione intera.

Introduzione

Gli operatori combinano i valori in espressioni, come a + b o a > b. C e C++ hanno quasi lo stesso insieme di operatori, compresa la regola della divisione intera, che spesso sorprende chi inizia: quando dividi due interi, la parte decimale viene scartata.

Punti importanti

  • Attiva gli avvisi del compilatore (compiler warning) e correggili tutti.
  • Comprendi bene il tipo di dato e la durata (lifetime) di ogni valore.
  • Controlla sempre i dati in ingresso e i limiti degli indici degli array.

Esempi di codice C e C++

C
Esegui →
main.c
#include <stdio.h>

int main(void) {
    int a = 17, b = 5;

    printf("a + b = %d\n", a + b);
    printf("a - b = %d\n", a - b);
    printf("a * b = %d\n", a * b);
    printf("a / b = %d\n", a / b);              /* integer division drops the fraction */
    printf("a %% b = %d\n", a % b);             /* remainder */
    printf("a / 5.0 = %.1f\n", a / 5.0);        /* one double operand gives a double */

    int total = 10;
    total += 5;
    total *= 2;
    printf("total = %d\n", total);

    int count = 0;
    count++;
    printf("count = %d\n", count);

    /* Comparisons and logical operators give 1 (true) or 0 (false). */
    printf("a > b: %d, a == 17: %d\n", a > b, a == 17);
    printf("a > 10 && b > 10: %d\n", a > 10 && b > 10);
    printf("a > 10 || b > 10: %d\n", a > 10 || b > 10);
    return 0;
}
Risultato dell'esecuzione
a + b = 22
a - b = 12
a * b = 85
a / b = 3
a % b = 2
a / 5.0 = 3.4
total = 30
count = 1
a > b: 1, a == 17: 1
a > 10 && b > 10: 0
a > 10 || b > 10: 1
C++
Esegui →
main.cpp
#include <iostream>

int main() {
    int a = 17, b = 5;

    std::cout << "a + b = " << a + b << '\n';
    std::cout << "a - b = " << a - b << '\n';
    std::cout << "a * b = " << a * b << '\n';
    std::cout << "a / b = " << a / b << '\n';           // integer division drops the fraction
    std::cout << "a % b = " << a % b << '\n';           // remainder
    std::cout << "a / 5.0 = " << a / 5.0 << '\n';       // one double operand gives a double

    int total = 10;
    total += 5;
    total *= 2;
    std::cout << "total = " << total << '\n';

    int count = 0;
    count++;
    std::cout << "count = " << count << '\n';

    // bool values print as true/false with std::boolalpha.
    std::cout << std::boolalpha;
    std::cout << "a > b: " << (a > b) << ", a == 17: " << (a == 17) << '\n';
    std::cout << "a > 10 && b > 10: " << (a > 10 && b > 10) << '\n';
    std::cout << "a > 10 || b > 10: " << (a > 10 || b > 10) << '\n';
}
Risultato dell'esecuzione
a + b = 22
a - b = 12
a * b = 85
a / b = 3
a % b = 2
a / 5.0 = 3.4
total = 30
count = 1
a > b: true, a == 17: true
a > 10 && b > 10: false
a > 10 || b > 10: true

Confronto tra C e C++

Dato che a e b sono int, la divisione 17 / 5 dà 3 e non 3.4. Per tenere la parte decimale, almeno uno degli operandi deve essere double. L'operatore % restituisce il resto, cioè 2. In C i confronti e gli operatori logici && e || restituiscono 1 o 0, mentre in C++ restituiscono true o false, e std::boolalpha stampa il risultato come testo.

C

C usa piccole funzioni procedurali e mostra apertamente come i dati sono rappresentati in memoria.

C++

C++ continua a permettere il lavoro a basso livello, ma aggiunge tipi di libreria e astrazioni più sicure.

Esercizi di approfondimento

Esegui entrambe le versioni e poi modifica il codice per osservare la differenza di sicurezza che offre ciascun linguaggio.

  • Prova input non validi e valori ai limiti.
  • Compila con i flag -Wall -Wextra -Wpedantic per attivare più avvisi.
  • Sposta le dichiarazioni condivise in un file header e l'implementazione in un altro file.

Esercitati con una sfida

Usa ciò che questa lezione spiega per risolvere un problema reale. Ogni sfida gira nel browser, con test immediati e una revisione dell'IA.

Tutte le sfide