Esercizi C/C++ per principianti

Il problema FizzBuzz in C e C++

In questa lezione stamperai Fizz, Buzz o FizzBuzz per i numeri da 1 a 15 usando un ciclo e le istruzioni condizionali.

Introduzione

FizzBuzz è un esercizio di programmazione classico: per ogni numero da 1 a 15, stampa Fizz se è divisibile per 3, Buzz se è divisibile per 5, FizzBuzz se è divisibile per entrambi e, negli altri casi, il numero stesso. L'esercizio allena i cicli, il resto della divisione e l'ordine delle condizioni.

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) {
    for (int n = 1; n <= 15; ++n) {
        // Check the most specific condition first.
        if (n % 15 == 0) puts("FizzBuzz");
        else if (n % 3 == 0) puts("Fizz");
        else if (n % 5 == 0) puts("Buzz");
        else printf("%d\n", n);
    }
}
Risultato dell'esecuzione
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
C++
Esegui →
main.cpp
#include <iostream>
int main() {
    for (int n = 1; n <= 15; ++n) {
        // Check the most specific condition first.
        if (n % 15 == 0) std::cout << "FizzBuzz\n";
        else if (n % 3 == 0) std::cout << "Fizz\n";
        else if (n % 5 == 0) std::cout << "Buzz\n";
        else std::cout << n << '\n';
    }
}
Risultato dell'esecuzione
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz

Confronto tra C e C++

La condizione n % 15 == 0, cioè divisibile sia per 3 sia per 5, va controllata per prima. Se controllassi prima la divisibilità per 3, il 15 verrebbe stampato come Fizz e non arriverebbe mai al ramo FizzBuzz. Ordinare le condizioni dalla più specifica alla più generale è il punto chiave di questo esercizio.

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