1) Esercizi con while
1. Somma da 1 a N
Dato un intero positivo N, calcolare la somma dei numeri da 1 a N usando un ciclo while.
Mostra soluzione
#include <iostream>
int main(){
long long N; std::cout << "Inserisci N (>=1): "; std::cin >> N;
if(N < 1){ std::cout << "N non valido.\n"; return 0; }
long long i=1, somma=0;
while(i <= N){ somma += i; ++i; }
std::cout << "Somma = " << somma << "\n";
}
2. Conta le cifre di un numero
Dato un intero (anche 0), determinare quante cifre ha utilizzando divisioni intere e while.
Mostra soluzione
#include <iostream>
#include <cstdlib>
int main(){
long long n; std::cout << "Numero: "; std::cin >> n;
n = std::llabs(n);
int cifre = (n==0) ? 1 : 0;
while(n != 0){ ++cifre; n /= 10; }
std::cout << "Cifre: " << cifre << "\n";
}
3. Verifica numero primo (base)
Dato n > 1, stabilire se è primo provando i divisori da 2 a ⌊√n⌋ con while.
Mostra soluzione
#include <iostream>
int main(){
long long n; std::cout << "n (>1): "; std::cin >> n;
if(n <= 1){ std::cout << "Valore non valido.\n"; return 0; }
if(n==2){ std::cout << "Primo\n"; return 0; }
if(n%2==0){ std::cout << "Non primo\n"; return 0; }
long long d=3; bool primo = true;
while(d*d <= n){
if(n % d == 0){ primo=false; break; }
d += 2;
}
std::cout << (primo? "Primo":"Non primo") << "\n";
}
4. Somma dei pari fino a N
Dato N, sommare tutti i numeri pari in [1, N] utilizzando un while.
Mostra soluzione
#include <iostream>
int main(){
long long N; std::cout << "N: "; std::cin >> N;
if(N < 2){ std::cout << "Somma = 0\n"; return 0; }
long long i = 2, somma = 0;
while(i <= N){ somma += i; i += 2; }
std::cout << "Somma dei pari = " << somma << "\n";
}
2) Esercizi con do...while
1. Inserimento con controllo (numero positivo)
Chiedere un intero ≥ 0 e ripetere la richiesta finché l’utente non inserisce un valore valido.
Mostra soluzione
#include <iostream>
int main(){
long long n;
do{
std::cout << "Inserisci un intero non negativo: ";
std::cin >> n;
}while(n < 0);
std::cout << "Hai inserito: " << n << "\n";
}
2. Menù semplice
Menù con scelte: 1=Somma, 2=Prodotto, 0=Esci. Ripetere finché l’utente non digita 0.
Mostra soluzione
#include <iostream>
int main(){
int scelta;
do{
std::cout << "\n--- MENU ---\n1) Somma\n2) Prodotto\n0) Esci\nScelta: ";
std::cin >> scelta;
if(scelta==1){
double a,b; std::cout << "a b: "; std::cin >> a >> b;
std::cout << "Somma = " << (a+b) << "\n";
} else if(scelta==2){
double a,b; std::cout << "a b: "; std::cin >> a >> b;
std::cout << "Prodotto = " << (a*b) << "\n";
} else if(scelta!=0){
std::cout << "Scelta non valida.\n";
}
}while(scelta != 0);
}
3. Indovina il numero (1–100)
Generare un numero casuale in [1,100] e far indovinare all’utente, indicando “troppo alto/basso” finché non indovina.
Mostra soluzione
#include <iostream>
#include <random>
int main(){
std::random_device rd; std::mt19937 gen(rd());
std::uniform_int_distribution<int> dist(1,100);
int segreto = dist(gen), x;
do{
std::cout << "Tentativo: "; std::cin >> x;
if(x < segreto) std::cout << "Troppo basso.\n";
else if(x > segreto) std::cout << "Troppo alto.\n";
}while(x != segreto);
std::cout << "Bravo! Hai indovinato: " << segreto << "\n";
}
4. Media con terminatore (0)
L’utente inserisce una sequenza di numeri reali; l’inserimento termina con 0. Calcolare la media (escludendo lo 0).
Mostra soluzione
#include <iostream>
int main(){
double x, somma=0.0; long long cnt=0;
do{
std::cout << "Numero (0 per terminare): ";
std::cin >> x;
if(x != 0){ somma += x; ++cnt; }
}while(x != 0);
if(cnt==0) std::cout << "Nessun dato.\n";
else std::cout << "Media = " << (somma/cnt) << "\n";
}
3) Esercizi con for
1. Tabellina di N (×1 … ×10)
Dato un intero N, stampare la sua tabellina da 1 a 10 usando for.
Mostra soluzione
#include <iostream>
int main(){
long long N; std::cout << "N: "; std::cin >> N;
for(int i=1;i<=10;++i){
std::cout << N << " x " << i << " = " << (N*i) << "\n";
}
}
2. Fattoriale di N
Calcolare N! con un ciclo for. Gestire il caso di N < 0.
Mostra soluzione
#include <iostream>
int main(){
long long N; std::cout << "N: "; std::cin >> N;
if(N < 0){ std::cout << "Fattoriale non definito per N < 0.\n"; return 0; }
unsigned long long f = 1;
for(long long i=2;i<=N;++i) f *= i;
std::cout << N << "! = " << f << "\n";
}
3. Serie di Fibonacci (primi N termini)
Stampare i primi N numeri della sequenza di Fibonacci usando for.
Mostra soluzione
#include <iostream>
int main(){
long long N; std::cout << "N (>=1): "; std::cin >> N;
if(N <= 0){ std::cout << "N non valido.\n"; return 0; }
unsigned long long a=0, b=1;
for(long long i=1;i<=N;++i){
std::cout << a << (i<N? " ":"\n");
auto next = a + b; a = b; b = next;
}
}
4. Triangolo di asterischi
Data un’altezza H, stampare un triangolo rettangolo di asterischi alto H usando for.
Mostra soluzione
#include <iostream>
int main(){
int H; std::cout << "Altezza H: "; std::cin >> H;
if(H <= 0){ std::cout << "Valore non valido.\n"; return 0; }
for(int r=1;r<=H;++r){
for(int c=0;c<r;++c) std::cout << '*';
std::cout << '\n';
}
}