Introduzione e Strutture di Controllo - Esercizi
Table of contents
- Esercizi
- Circonferenza
- Area del triangolo
- Operazioni
- Approssimazioni
- Input e output stringhe
- Divisione con condizione
- Sequenze crescenti e decrescenti
- Sequenze pari
- Trova potenza di 2
- Moltiplicazione con le somme
- Divisione con le differenze
- Sequenze crescenti e decrescenti 2
- Conta numeri inseriti diversi da 0
- Triangolo dati i lati
- Somma dei pari e prodotto dei dispari
- Confronto due numeri
- Input sequenza non 0 e conteggio numeri inseriti
- Input con controllo e conteggio numeri compresi
- Input sequenza non 0 e stampa massimo e minimo
- Fattoriale
- Ordinamento 3 numeri
- Calcolatrice
- Input sequenza non 0, prodotto positivi e somma negativi
- Input sequenza con domanda, prodotto positivi, somma negativi
- Elevamento a potenza con le moltiplicazioni
- Input con controllo e confronto orari
- Input minuti, secondi e conto alla rovescia
- Successione di Fibonacci
- Conteggio cifre di un numero
- Stampa cifre di un numero (numero noto di cifre)
- Stampa cifre di un numero
- Controllo primalità di un numero
- Scomposizione in fattori primi
- Input sequenza lunga n, stampa massimo, minimo, media
- Input sequenza lunga n, stampa secondo più grande e secondo più piccolo
- Input sequenza non 0, stampa maggior differenza numeri consecutivi
- Input sequenza non 0, somma multipli di 3
- somma e prodotto sequenza
- Conteggio divisibilità per 2
- Calcolo spesa con sconti
- Promosso, rimandato o bocciato
- Stampa sequenze e multipli
- Terna pitagorica
- Calcolo spesa con sconti 2
- Restituzione in biblioteca
- Calcolo bolletta
- Indovina il numero segreto
- Quoziente e resto con le differenze
- Successione di Fibonacci 2
- Calcolo probabilità dado
- Calcolo probabilità dadi
- Sequenza numeri con condizioni
- Calcolo probabilità dado 2
- Calcolo probabilità dadi 2
- Calcolo probabilità dadi 3
- Input sequenza lunga n, calcolo media condizionale
- Gioco coi dadi
- If con espressione logica
- If con espressione logica 2
- Sequenza e if con espressione logica
- Figure geometriche
- Figure geometriche 2
- Gioco coi dadi 2
- Figure geometriche 3
- Figure geometriche 4
- Input e condizione
- Calcolo sommatoria matematica
- Calcolo interesse cumulato
- Input sequenza non 0, ASCII code
- Input sequenza, calcolo più lunga sottosequenza
- Input sequenza, calcolo più lunga sottosequenza 2
- Input sequenza lunga n, quadrati perfetti
- Lancio moneta
- Calcolo probabilità Dado 3
- Indovina il numero
- Sequenza casuale, calcolo media
- Calcolo probabilità dadi 4
- If con espressione logica 3
Esercizi
Circonferenza
Data in input l’area del cerchio, stampare la circonferenza
Soluzione
#include <math.h>
#include <stdio.h>
int main() {
float cerchio, circonferenza, raggio;
printf("Scrivi quanto misura l'area del cerchio: ");
scanf("%f", &cerchio);
raggio = sqrt(cerchio / 3.14);
circonferenza = 2 * 3.14 * raggio;
printf("Il cerchio con area %.2f ha un raggio che misura %.2f e una circonferenza che misura %.2f \n",
cerchio, raggio, circonferenza);
}
Area del triangolo
Data la base e l’altezza di un triangolo, scrivere l’area
Soluzione
#include <stdio.h>
int main() {
float base, altezza, area;
printf("Scrivi la base: ");
scanf("%f", &base);
printf("Scrivi l'altezza: ");
scanf("%f", &altezza);
area = base * altezza / 2;
printf("L'area misura %.2f", area);
}
Operazioni
Dati in input due numeri, scrivi il risultato di tutte le operazioni che è possibile fare con i due numeri (somma, sottrazione, moltiplicazione, divisione, resto della divisione)
Approssimazioni
Dato un numero decimale, ottieni e stampa:
- valore intero approssimato per difetto;
- valore intero approssimato per eccesso;
- valore intero approssimato in maniera intelligente;
- approssimazione del numero al secondo decimale;
- valore assoluto del numero.
Input e output stringhe
Leggi 3 parole e stampale tutte insieme in un’unica volta (solo un parallelogramma di scrittura).
Divisione con condizione
Dati due numeri calcolare il loro quoziente se il divisore è != 0, ritornare “impossibile” se il divisore = 0
Soluzione
#include <stdio.h>
int main() {
float a,b,c;
printf("Scrivi il primo numero: ");
scanf("%f", &a);
printf("Scrivi il secondo numero: ");
scanf("%f", &b);
if (b != 0) {
c = a / b;
printf("%g", c);
} else {
printf("Non e' possibile dividere per 0\n");
}
}
Sequenze crescenti e decrescenti
Dato in input un numero:
- Stampa i numeri da 1 a quel numero
- Stampa i numeri da quel numero a 0 (conto alla rovescia)
Soluzione
#include <stdio.h>
int main() {
int n, i;
// input - versione col while
printf("Scrivi un numero positivo: ");
scanf("%d", &n);
while (n <= 0) {
printf("Il numero non è positivo, riscrivilo: ");
scanf("%d", &n);
}
// input - versione col do-while
do {
printf("Scrivi un numero positivo: ");
scanf("%d", &n);
} while (n <= 0);
// 1. Stampa i numeri da 1 a quel numero
for (i = 1; i <= n; i++) {
printf("%d ", i);
}
printf("\n");
// 2. Stampa i numeri da quel numero a 0 (conto alla rovescia)
for (i = n; i >= 0; i--) {
printf("%d ", i);
}
}
Sequenze pari
Dato in input un numero positivo, stampa tutti i numeri pari minori di quel numero
Soluzione
#include <stdio.h>
int main() {
int n, i;
printf("Scrivi un numero positivo: ");
scanf("%d", &n);
while (n <= 0) {
printf("Il numero inserito e' negativo, scrivi un numero positivo: ");
scanf("%d", &n);
}
// primo metodo
for (i = 1; i < n; i++) {
if (i % 2 == 0) {
printf("%d ", i);
}
}
printf("\n");
// secondo metodo
for (i = 2; i < n; i+=2) {
printf("%d ", i);
}
}
Trova potenza di 2
Dato in input un numero n, stampa la prima potenza di 2 maggiore o uguale a n
Soluzione
#include <stdio.h>
int main() {
int n, ris;
printf("Scrivi un numero: ");
scanf("%d", &n);
ris = 1;
while (ris < n) {
ris *= 2;
}
printf("%d", ris);
}
Moltiplicazione con le somme
Moltiplicazione di due numeri senza usare l’operatore *
Soluzione
#include <stdio.h>
int main() {
int a, b, ris, i;
a = 3;
b = 5;
ris = 0;
for (i = 0; i < b; i++) {
ris += a;
}
printf("%d * %d = %d", a, b, ris);
}
Divisione con le differenze
Divisione di due numeri interi senza usare l’operatore di divisione
Variante: stampa anche il resto
Soluzione
#include <stdio.h>
int main() {
int num, den, resto, risultato;
do {
printf("Scrivi il numeratore (positivo): ");
scanf("%d", &num);
} while (num < 0);
do {
printf("Scrivi il denominatore (positivo): ");
scanf("%d", &den);
} while (den <= 0);
resto = num;
for (risultato = 0; resto >= den; risultato += 1) {
resto -= den;
}
printf("%d / %d = %d con resto %d\n", num, den, risultato, resto);
}
Sequenze crescenti e decrescenti 2
dati dall’utente due numeri interi n1 e n2 il programma deve stampare:
- tutti i numeri dal più piccolo dei due al più grande dei due
- tutti i numeri dal più grande dei due al più piccolo dei due
- tutti i numeri da n1 a n2 (comunque siano n1 e n2 quindi potresti dover andare in ordine crescente o decrescente)
- tutti i numeri da n2 a n1 (comunque siano n1 e n2 quindi potresti dover andare in ordine crescente o decrescente)
Soluzione
#include <stdio.h>
int main() {
int n1, n2, min, max, i;
n1 = 12;
n2 = 5;
// a. tutti i numeri dal più piccolo dei due al più grande dei due
if (n1 < n2) {
min = n1;
max = n2;
} else {
max = n1;
min = n2;
}
for (i = min; i <= max; i++) {
printf("%d ", i);
}
printf("\n");
// b. tutti i numeri dal più grande dei due al più piccolo dei due
for (i = max; i >= min; i--) {
printf("%d ", i);
}
printf("\n");
// c. tutti i numeri da n1 a n2 (comunque siano n1 e n2 quindi potresti dover andare in ordine crescente o decrescente)
if (n1 < n2) {
for (i = n1; i <= n2; i++) {
printf("%d ", i);
}
printf("\n");
} else {
for (i = n1; i >= n2; i--) {
printf("%d ", i);
}
}
printf("\n");
// d. tutti i numeri da n2 a n1 (comunque siano n1 e n2 quindi potresti dover andare in ordine crescente o decrescente)
if (n2 < n1) {
for (i = n2; i <= n1; i++) {
printf("%d ", i);
}
printf("\n");
} else {
for (i = n2; i >= n1; i--) {
printf("%d ", i);
}
}
printf("\n");
}
Conta numeri inseriti diversi da 0
Inserire n numeri != 0 (0 per finire), contare quanti sono i numeri inseriti
Variante avanzata: i numeri sono voti che devono essere validi e alla fine ne va calcolata la media.
Soluzione base
int main() {
int n, numero;
// for (n = 0; numero != 0;) {
// printf("Scrivi il %d° numero: ");
// scanf("%d", numero);
// if (numero != 0) {
// n++;
// }
// }
// for (n = 0; numero != 0; n++) {
// printf("Scrivi il %d° numero: ");
// scanf("%d", numero);
// if (numero == 0) {
// break;
// }
// }
for (n = 0; 1; n++) {
printf("Scrivi il %d numero: ", n+1);
scanf("%d", &numero);
if (numero == 0) {
break;
}
}
printf("Hai inserito %d numeri.\n\n", n);
}
Triangolo dati i lati
Dati tre numeri reali dire che tipo di triangolo essi formano (classificazione dei triangoli in base ai lati).
Somma dei pari e prodotto dei dispari
Data una sequenza di n numeri interi (valore di n dato dall’utente), calcolare la somma dei pari ed il prodotto dei dispari
Soluzione
#include <stdio.h>
int main() {
int n, somma, prodotto, i, numero;
printf("Quanti numeri vuoi inserire? ");
scanf("%d", &n);
while (n <= 0) {
printf("Il valore non puo' essere negativo.");
printf("Quanti numeri vuoi inserire? ");
scanf("%d", &n);
}
somma = 0;
prodotto = 1;
for (i = 0; i < n; i++) {
printf("Scrivi un numero positivo: ");
scanf("%d", &numero);
while (numero < 0) {
printf("Scrivi un numero positivo: ");
scanf("%d", &numero);
}
if (numero % 2 == 0) {
somma += numero;
} else {
prodotto *= numero;
}
}
printf("Somma dei pari: %d\n", somma);
printf("Prodotto dei dispari: %d\n", prodotto);
}
Confronto due numeri
Dati due numeri, determinare il maggiore (verificare anche se sono uguali)
Input sequenza non 0 e conteggio numeri inseriti
Data una sequenza di numeri terminata da 0, dire quanti sono i numeri inseriti (diversi da 0)
Input con controllo e conteggio numeri compresi
Con un opportuno ciclo chiedere all’utente di inserire due numeri n1 e n2 compresi tra 1 e 100. Se i numeri non fossero corretti, rimanere nel ciclo e ripetere la richiesta. Stampare quanti sono i numeri pari compresi tra i due numeri
Soluzione
#include <stdio.h>
int main() {
int n1, n2, ris, i, tmp;
do {
printf("Scrivi due numeri compresi tra 1 e 100: ");
scanf("%d %d", &n1, &n2);
} while (n1 < 1 || n1 > 100 || n2 < 1 || n2 > 100);
if (n1 > n2) {
tmp = n1;
n1 = n2;
n2 = tmp;
}
// metodo 1
ris = 0;
for (i = n1; i <= n2; i++) {
if (i%2==0) {
ris++;
}
}
printf("I numeri pari compresi tra %d e %d sono %d\n", n1, n2, ris);
// metodo 2
ris = 0;
i = n1;
if (i % 2 == 1) {
i++;
}
for (;i <= n2; i += 2) {
ris++;
}
printf("I numeri pari compresi tra %d e %d sono %d\n", n1, n2, ris);
// metodo 3
ris = (n2-n1) / 2;
if (n1 % 2 == 0 || n2 % 2 == 0) {
ris++;
}
printf("I numeri pari compresi tra %d e %d sono %d", n1, n2, ris);
}
Input sequenza non 0 e stampa massimo e minimo
Data una sequenza di numeri terminata dal numero 0 (leggo numeri finchè non mi viene dato il numero 0), stampo il maggiore e il minore
Soluzione
#include <stdio.h>
int main() {
int num, max, min;
printf("Scrivi un numero (0 per terminare): ");
scanf("%d", &num);
min = num;
max = num;
while (num != 0) {
printf("Scrivi un numero (0 per terminare): ");
scanf("%d", &num);
if (num > max) {
max = num;
}
if (num < min) {
min = num;
}
}
printf("I valori minimi e massimi inseriti sono: %d %d\n", min, max);
}
Fattoriale
Letto un numero intero positivo n stampare il fattoriale: n! = 1 · 2 · 3 · . . . ·n
Soluzione
#include <stdio.h>
int main() {
int n, i;
long long f;
do {
printf("Scrivi un numero positivo: ");
scanf("%d", &n);
} while (n < 0);
f = 1;
// for (i = 2; i <= n; i++) {
for (i = n; i > 0; i--) {
f *= i;
}
printf("%d! = %lld\n\n", n, f);
}
Usando i double si riesce a rappresentare numeri molto grandi perché il double (come il float ma usa più byte) usa una notazione scietifica
Soluzione
#include <stdio.h>
#include <float.h>
int main() {
int i;
double n;
double f;
do {
printf("Scrivi un numero positivo: ");
scanf("%lf", &n);
} while (n < 0);
f = 1;
// for (i = 2; i <= n; i++) {
for (i = n; i > 0; i--) {
f *= i;
}
printf("%.0lf! = %e\n\n", n, f);
}
Ordinamento 3 numeri
Dati in input 3 numeri, stamparli in ordine crescente
Calcolatrice
Realizzare un programma che, presi in input 2 operandi reali e un operatore (+, -, *, /), esegue l’operazione stampandone il risultato
Soluzione
#include <stdio.h>
int main() {
int a, b;
char op;
printf("Scrivi l'operazione da fare: ");
scanf("%d %c %d", &a, &op, &b);
if (op == '+') {
printf("%d %c %d = %d", a, op, b, a+b);
} else if (op == '-') {
printf("%d %c %d = %d", a, op, b, a-b);
} else if (op == '*') {
printf("%d %c %d = %d", a, op, b, a*b);
} else if (op == '/') {
printf("%d %c %d = %d", a, op, b, a/b);
} else {
printf("Non riconosco l'operazione da fare.");
}
}
Input sequenza non 0, prodotto positivi e somma negativi
Progettare un algoritmo che legga da terminale una sequenza di interi positivi e negativi terminati dal valore 0 (uno su ogni linea) e stampi il prodotto degli interi positivi e la somma dei negativi.
Input sequenza con domanda, prodotto positivi, somma negativi
Progettare un algoritmo che legga da terminale una sequenza di interi positivi e negativi fintanto che l’utente dice di volerne inserire ancora, e stampi il prodotto degli interi positivi e la somma dei negativi.
Soluzione
#include <stdio.h>
int main() {
int numero, risposta, somma, prodotto;
somma = 0;
prodotto = 1;
while (1) {
printf("Vuoi inserire un numero? (0 per no, altro numero per sì): ");
scanf("%d", &risposta);
if (risposta == 0) {
break;
}
printf("Scrivi il numero: ");
scanf("%d", &numero);
if (numero >= 0) {
prodotto *= numero;
} else {
somma += numero;
}
}
printf("Prodotto dei positivi: %d\n", prodotto);
printf("Somma dei negativi: %d\n", somma);
}
Oppure
Soluzione
#include <stdio.h>
int main() {
int numero, risposta, somma, prodotto;
somma = 0;
prodotto = 1;
printf("Vuoi inserire un numero? (0 per no, altro numero per sì): ");
scanf("%d", &risposta);
// while (risposta != 0) {
while (risposta) {
printf("Scrivi il numero: ");
scanf("%d", &numero);
if (numero >= 0) {
prodotto *= numero;
} else {
somma += numero;
}
printf("Vuoi inserire un numero? (0 per no, altro numero per sì): ");
scanf("%d", &risposta);
}
printf("Prodotto dei positivi: %d\n", prodotto);
printf("Somma dei negativi: %d\n", somma);
}
Elevamento a potenza con le moltiplicazioni
Dati due numeri in input b ed e, calcola e scrivi b^e senza usare la funzione pow.
Soluzione
#include <stdio.h>
int main() {
int b, e, i;
double ris;
b = 2;
e = 100;
ris = 1;
for (i = 0; i < e; i++) {
ris *= b;
}
printf("%d^%d = %g", b, e, ris);
}
Input con controllo e confronto orari
Dati in ingresso 4 numeri, che rappresentano gli orari in cui avvengono due diversi eventi della giornata, in modo che i primi 2 numeri siano ore e minuti del primo orario e gli altri 2 numeri siano ore e minuti del secondo orario, stabilire quale evento è avvenuto prima. Inserisci dei controlli durante l’input in modo che le ore possano andare da 0 a 23 e i minuti da 0 a 59.
Soluzione
#include <stdio.h>
int main() {
int h1, m1, h2, m2;
printf("Scrivi h1: ");
scanf("%d", &h1);
while (h1 < 0 || h1 > 23) {
printf("Valore non valido, reinserisci: ");
scanf("%d", &h1);
}
printf("Scrivi m1: ");
scanf("%d", &m1);
while (m1 < 0 || m1 > 59) {
printf("Valore non valido, reinserisci: ");
scanf("%d", &m1);
}
printf("Scrivi h2: ");
scanf("%d", &h2);
while (h2 < 0 || h2 > 23) {
printf("Valore non valido, reinserisci: ");
scanf("%d", &h2);
}
printf("Scrivi m1: ");
scanf("%d", &m2);
while (m2 < 0 || m2 > 59) {
printf("Valore non valido, reinserisci: ");
scanf("%d", &m2);
}
if (h1 > h2 || (h1 == h2 && m1 > m2)) {
printf("%d:%d > %d:%d", h1,m1,h2,m2);
} else if (h1 == h2 && m1 == m2) {
printf("%d:%d = %d:%d", h1,m1,h2,m2);
} else {
printf("%d:%d < %d:%d", h1,m1,h2,m2);
}
}
Input minuti, secondi e conto alla rovescia
Dato un numero di minuti e un numero di secondi rappresentare il conto alla rovescia.
Soluzione
#include <stdio.h>
#include <unistd.h>
int main() {
int m, s;
m = 1;
s = 5;
while (m > 0 || s > 0) {
printf("%02d:%02d\n", m, s);
s--;
if (s < 0) {
m--;
s = 59;
}
sleep(1);
}
}
Successione di Fibonacci
Dato in input un numero intero n, stampa l’ennesimo numero della successione di fibonacci. La successione di fibonacci è quella successione di numeri in cui ogni numero è la somma dei due numeri precedenti. I primi due numeri sono 1 1. La successione inizia così: 1 1 2 3 5 8 13 21 …
Soluzione
#include <stdio.h>
int main() {
int prec1, prec2, ris, n, i;
do {
printf("Scrivi un numero >= 0: ");
scanf("%d", &n);
} while (n < 0);
if (n == 0) {
ris = 0; // Fib(0)
} else {
prec2 = 0;
prec1 = 1;
ris = 1; // che è sia Fib(1) che Fib(2)
for (i = 2; i < n; i++) {
prec2 = prec1;
prec1 = ris;
ris = prec1 + prec2;
}
}
printf("Fib(%d) = %d", n, ris);
}
Conteggio cifre di un numero
2.1.25 Dato in input un numero intero, conta da quante cifre è composto.
Soluzione
#include <stdio.h>
#include <math.h>
int main() {
int n, cifre, tmp;
n = -235;
cifre = 1;
tmp = abs(n);
while (tmp >= 10) {
tmp /= 10;
cifre++;
}
printf("%d e' composto da %d cifre.\n", n, cifre);
}
Stampa cifre di un numero (numero noto di cifre)
Dato in input un numero intero n di 3 cifre (in questo caso sarebbe utile mettere un controllo sull’input, cioè continuare a richiedere il numero fintanto che il numero dato non è di 3 cifre), stampa separatamente le sue cifre. Consiglio: usa divisioni per 10 e resti della divisione per 10. Puoi provare anche a generalizzare il programma in modo che funzioni anche con numeri di dimensione diversa da 3 cifre.
Stampa cifre di un numero
Dato in input un numero intero qualsiasi, stampa separatamente le sue cifre.
Soluzione
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main() {
int cifra, ncifre, tmp, potenza;
int n = -234, i;
ncifre = 1;
tmp = abs(n);
while (tmp >= 10) {
tmp /= 10;
ncifre++;
}
// printf("%d", ncifre);
tmp = abs(n);
while (ncifre > 0) {
potenza = 1;
for (i = 0; i < ncifre-1; i++) {
potenza *= 10;
}
// printf("potenza %d\n", potenza);
cifra = tmp / potenza;
printf("%d ", cifra);
tmp = tmp % potenza;
ncifre--;
}
}
Controllo primalità di un numero
Dato in input un numero intero n, stabilisci se è primo
Soluzione
#include <stdio.h>
int main() {
int n = 23, i, primo;
primo = 1;
for (i = 2; i <= n/2; i++) {
if (n % i == 0) {
primo = 0;
}
}
if (primo) {
printf("%d e' primo.", n);
} else {
printf("%d non e' primo.", n);
}
}
Scomposizione in fattori primi
Dato in input un numero intero n, stampa la sua scomposizione in fattori primi
Soluzione
#include <stdio.h>
int main() {
int n, val, div;
do {
printf("Inserisci un numero positivo: ");
scanf("%d", &n);
} while (n <= 0);
val = n;
div = 2;
while (val >= div) {
while (val % div == 0) {
printf("%d ", div);
val /= div;
}
div++;
}
}
Input sequenza lunga n, stampa massimo, minimo, media
Data una sequenza di n numeri (n dato dall’utente) stabilire qual è il numero più grande, qual è il più piccolo e calcolare la media.
Soluzione
#include <stdio.h>
int main() {
int n, i;
float media, numero, min, max;
printf("Quanti numeri vuoi inserire? ");
scanf("%d", &n);
while (n < 1) {
printf("Devi inserirne almeno 1, reinserisci: ");
scanf("%d", &n);
}
printf("Inserisci un numero: ");
scanf("%f", &numero);
min = numero;
max = numero;
media = numero;
for (i = 1; i < n; i++) {
printf("Inserisci un numero: ");
scanf("%f", &numero);
if (numero < min) min = numero;
if (numero > max) max = numero;
media += numero;
}
media /= n;
printf("Minimo: %.2f\n", min);
printf("Massimo: %.2f\n", max);
printf("Media: %.2f\n", media);
}
Input sequenza lunga n, stampa secondo più grande e secondo più piccolo
Data una sequenza di n numeri (n dato dall’utente) stabilire qual è il secondo numero più grande, qual è il secondo più piccolo.
Input sequenza non 0, stampa maggior differenza numeri consecutivi
Data una sequenza di numeri positivi (fai il controllo sull’input) terminati da 0, scrivi qual è la maggior differenza tra due numeri dati consecutivamente
Input sequenza non 0, somma multipli di 3
Data una sequenza di numeri positivi (fai il controllo sull’input) terminati da 0, scrivi la somma dei numeri divisibili per 3
somma e prodotto sequenza
Dato un numero n scrivi somma e prodotto di tutti i numeri minori o uguali a n.
Conteggio divisibilità per 2
Dato un numero n stabilire quante volte è possibile dividerlo per 2. (esempio 20 è divisibile per 2, 2 volte)
Calcolo spesa con sconti
Data una sequenza di prezzi di prodotti, calcolare la spesa totale sapendo che se un prodotto costa meno di 100€ lo devo scontare del 10% altrimenti del 5%. Decidi tu il metodo per capire quando terminare la lettura della sequenza di prezzi.
Promosso, rimandato o bocciato
Data una sequenza di 5 numeri che rappresentano i voti presi nelle diverse materie, stabilire se lo studente sarà promosso, bocciato o rimandato a settembre. Lo studente è promosso se non ha insufficienze, è bocciato se ha almeno 3 insufficienze, altrimenti è rimandato. Ricordati di controllare i valori dei voti in input che devono essere voti validi.
Stampa sequenze e multipli
Dato un numero n positivo stampa tutti i numeri da 1 a n, i primi n multipli di 2 (2 compreso che consideri il primo multiplo) e i primi n multipli di 3
Terna pitagorica
Dati tre numeri positivi verificare che questi tre numeri siano una terna pitagorica ( una terna pitagorica è un insieme di 3 numeri per cui la somma del quadrato di due numeri sia uguale al quadrato del terzo numero, in altre parole sono le lunghezze dei lati di un triangolo rettangolo)
Calcolo spesa con sconti 2
Scrivere l’algoritmo per il pagamento della spesa che consiste nel chiedere inizialmente se si è in possesso della carta fedeltà, poi chiedere tutti i prezzi dei prodotti acquistati terminando la sequenza con un prezzo uguale a zero. Il programma deve sommare i prezzi, e se si è in possesso della carta, scontare del 10% i prezzi minori di 50 e del 5% i prezzi maggiori di 50
Restituzione in biblioteca
Un libro deve essere restituito in biblioteca dopo 15 giorni di prestito altrimenti si è multati di 0,80€ al giorno di ritardo. Ricevuto in ingresso il numero di giorni di un prestito, visualizza se il socio deve essere multato per il ritardo e a quanto ammonta la multa da pagare.
Calcolo bolletta
Calcolare il costo della bolletta telefonica sapendo che i primi 30 scatti costano 20 centesimi l’uno, gli scatti dal 31 al 100 costano 15 centesimi l’uno, mentre gli ulteriori scatti costano 10 centesimi l’uno. Aggiungere infine una tassa fissa di 2,50€ per le spese telefoniche. In input al programma è dato il numero di scatti effettuati.
Indovina il numero segreto
Costruire uno schema di flusso che rappresenti l’algoritmo per il seguente gioco: il computer genera un numero segreto (usa la funzione random(100) che genera un numero casuale tra 0 e 99) e il giocatore deve individuarlo seguendo le indicazioni fornite dal computer (ti dice se il numero da trovare è più grande o più piccolo di quello che hai provato); una volta trovato il numero segreto, il numero di tentativi effettuati è visualizzato a video.
Soluzione
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main() {
int segreto, tentativo;
srand(time(NULL));
segreto = rand() % 100;
while (1) {
printf("Indovina il numero (da 0 a 99): ");
scanf("%d", &tentativo);
if (tentativo < segreto) {
printf("Il numero da trovare e' piu' grande.\n");
} else if (tentativo > segreto){
printf("Il numero da trovare e' piu' piccolo.\n");
} else {
printf("Hai indovinato!\n");
break;
}
}
}
Quoziente e resto con le differenze
Calcolare il quoziente e il resto della divisione intera di due numeri interi positivi forniti in ingresso chiamati dividendo e divisore, applicando il metodo delle sottrazioni successive. Per esempio, se dividendo=13 e divisore=5, il programma dovrà restituire Quoziente=2 e Resto=3, calcolati sottraendo successivamente il valore di divisore dal valore di dividendo
Soluzione
#include <stdio.h>
int main() {
int num, den, quoz, resto;
num = 13;
den = 3;
for (resto = num, quoz = 0; resto >= den; quoz++) {
resto -= den;
}
resto = num;
quoz = 0;
while (resto >= den) {
resto -= den;
quoz += 1;
}
printf("%d : %d = %d resto %d\n", num, den, quoz, resto);
}
Successione di Fibonacci 2
Visualizza i termini della successione di Fibonacci compresi nell’intervallo tra due interi positivi N1 e N2, entrambi forniti in ingresso, con N2>N1 (controlla bene gli input)
Soluzione
#include <stdio.h>
int main() {
int n1, n2, i, prec1, prec2, fib;
do {
printf("Inserisci un numero positivo: ");
scanf("%d", &n1);
} while (n1 < 1);
do {
printf("Inserisci un numero positivo maggiore di %d: ", n1);
scanf("%d", &n2);
} while (n2 <= n1);
prec2 = 1;
prec1 = 1;
fib = 2;
if (n1 == 1) {
printf("1 1 ");
}
for (i = n1; fib <= n2; i++) {
if (fib >= n1 && fib <= n2) {
printf("%d ", fib);
}
fib = prec1 + prec2;
prec2 = prec1;
prec1 = fib;
}
}
Calcolo probabilità dado
Simula il lancio di un dado per N volte (con N intero e positivo in ingresso e usando la funzione random(7) per il lancio) e verifica che effettivamente la probabilità che esca 6 è 1/6. Per farlo fai tanti tiri e vedi se esce 6 un sesto delle volte (più tiri fai più dovresti avere un risultato positivo).
Soluzione
int main() {
int n, dado, i;
float prob;
srand(time(NULL));
n = 100000;
prob = 0;
for (i = 0; i < n; i++) {
dado = rand() % 6 + 1;
if (dado == 6) {
prob += 1;
}
}
prob /= n;
printf("La probabilita' che esca 6 e' %.3f%%.\n", prob*100);
printf("1/6=%.5f", 1.0/6.0);
}
Calcolo probabilità dadi
Simula il lancio di due dadi e verifica le probabilità che escano: una coppia di 6, un valore totale uguale a 7 (due diverse probabilità)
Soluzione
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int nlanci, dado1, dado2, i;
float prob1, prob2;
srand(time(NULL));
prob1 = 0;
prob2 = 0;
nlanci = 100000;
for (i = 0; i < nlanci; i++) {
dado1 = rand() % 6 + 1;
dado2 = rand() % 6 + 1;
if (dado1 == 6 && dado2 == 6) {
prob1 += 1;
}
if (dado1 + dado2 == 7) {
prob2 += 1;
}
}
prob1 /= nlanci;
prob2 /= nlanci;
printf("Probabilita che esca coppia di 6: %.2f%%\n", prob1*100);
printf("Probabilita che esca somma 7: %.2f%%\n", prob2*100);
}
Sequenza numeri con condizioni
Dati in ingresso due numeri positivi x e y, visualizza in ordine decrescente la sequenza di numeri interi compresi tra x e y che sono divisibili per il minore tra x e y. Ad esempio, se x = 7 e y = 35, la sequenza è 35 28 21 14 7.
Soluzione
#include <stdio.h>
int main() {
int x, y, i, min, max;
do {
printf("Inserisci il primo numero, deve essere positivo: ");
scanf("%d", &x);
} while (x <= 0);
do {
printf("Inserisci il secondo numero, deve essere positivo: ");
scanf("%d", &y);
} while (y <= 0);
if (x < y) {
min = x;
max = y;
} else {
min = y;
max = x;
}
for (i = max; i >= min; i--) {
if (i % min == 0) {
printf("%d ", i);
}
}
}
Calcolo probabilità dado 2
Simula una serie di lanci di un dado a 6 facce (d6) e un dado da 20 facce (d20). Calcola il valore medio che si ottiene lanciando il d6 e quello ottenuto lanciando il d20.
Calcolo probabilità dadi 2
Valuta se è più probabile ottenere 7 oppure ottenere 8 lanciando 2 dadi da 6 e sommando i 2 valori ottenuti.
Calcolo probabilità dadi 3
Voglio valutare la probabilità che tirando due dadi da 6 esca il valore 2. Il valore calcolato deve essere abbastanza preciso e decido di calcolarlo misurando la media di tanti tiri di dado e fermandomi solo quando vedo che facendo uscire un nuovo 2 valore calcolato non varia di più di 0,01%
Soluzione
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int tiro, ntiri = 0, ndue = 0;
float prob = 0, prec = 0, diff;
float soglia = 0.0000001;
srand(time(NULL));
while (1) {
tiro = rand() % 6 + 1 + rand() % 6 + 1; // rand() % (max-min+1) + min
ntiri++;
prec = prob;
if (tiro == 2) {
ndue++;
prob = (float)ndue/(float)ntiri;
diff = prob-prec;
// if (diff < 0) diff * -1;
// printf("%f - %f = %f\n", prob, prec, diff);
if (diff < soglia && diff > -soglia) {
break;
}
}
printf("%d - %2d: %f\n", ntiri, tiro, prob);
}
printf("%f", prob);
}
Input sequenza lunga n, calcolo media condizionale
Vengono dati in input i valori delle altezze di n persone (n chiesto all’utente). Per ogni persona oltre all’altezza viene indicato anche il sesso. Deve essere stampato il valore medio di altezza separatamente per i maschi e per le femmine. L’utente può decidere di non indicare né maschio né femmina, in quel caso non contare quella persona.
Soluzione
#include <stdio.h>
int main() {
int n, i, altezza, numm, numf;
float mediam, mediaf;
char sesso;
printf("Quanti valori vuoi inserire? ");
scanf("%d", &n);
mediam = 0;
mediaf = 0;
numm = 0;
numf = 0;
for (i = 0; i < n; i++) {
printf("Scrivi l'altezza della persona n %d: ", i+1);
scanf("%d", &altezza);
printf("Scrivi se e' maschio o femmina (m maschio, f femmina altrimenti non considero il sesso)");
scanf(" %c", &sesso);
if (sesso == 'm') {
mediam += altezza;
numm += 1;
} else {
mediaf += altezza;
numf += 1;
}
}
mediam /= numm;
mediaf /= numf;
printf("L'altezza media dei maschi e' %.1f.\n", mediam);
printf("L'altezza media delle femmine e' %.1f.\n", mediaf);
}
Gioco coi dadi
Scrivi il codice di un gioco per 2 persone basato sul lancio di dadi. All’inizio del gioco si decide che tipo di dado usare, si possono scegliere i dadi da 4, 6, 8 o 20 facce. Il gioco consiste nel tirare uno per volta il dado e sommando ogni volta i numeri usciti finchè uno dei due giocatori non supera un valore limite che è 4 volte il valore massimo rappresentato sul dado scelto (ad esempio se si sceglie il dado da 6 il limite è 24). Per rendere il gioco equo si può fare in modo che i due giocatori debbano tirare per forza lo stesso numero di tiri e che entrambi i giocatori possano superare il limite facendo finire il gioco in parità Variante: Scrivi una variante del gioco in cui l’obiettivo è avvicinarsi il più possibile al valore limite senza superarlo. Chi si avvicina di più vince. In ogni momento un giocatore può decidere di accontentarsi del valore ottenuto e smettere di tirare.
Soluzione
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main() {
int valdado, limite, g1, g2, lancio;
srand(time(NULL));
do {
printf("Che dado vuoi usare? (4, 6, 8, 20): ");
scanf("%d", &valdado);
} while (valdado != 4 && valdado != 6 && valdado != 8 && valdado != 20);
limite = 4*valdado;
g1 = 0;
g2 = 0;
while (g1 <= limite && g2 <= limite) {
lancio = rand() % valdado + 1;
g1 += lancio;
printf("Il giocatore 1 lancia %d e arriva a %d.\n", lancio, g1);
system("pause");
lancio = rand() % valdado + 1;
g2 += lancio;
printf("Il giocatore 2 lancia %d e arriva a %d.\n", lancio, g2);
system("pause");
}
if (g1 > limite && g2 > limite) {
printf("Pareggio.\n");
} else if (g1 > limite) {
printf("Vince il giocatore 2.\n");
} else {
printf("Vince il giocatore 1.\n");
}
}
If con espressione logica
Leggi un numero positivo e controlla se esso è divisibile per 2 o divide 3 e non è compreso tra 10 e 20
Soluzione
#include <stdio.h>
int main() {
int n;
do {
printf("Scrivi un numero positivo: ");
scanf("%d", &n);
} while (n <= 0);
if ((n % 2 == 0 || 30 % n == 0) && !(n >= 10 && n <= 20)) {
printf("Si");
} else {
printf("No");
}
}
If con espressione logica 2
Leggi un numero positivo e controlla se esso è divisibile per 2 o è un multiplo di 3 ed è compreso tra 10 e 20
Soluzione
#include <stdio.h>
int main() {
int n;
do {
printf("Scrivi un numero positivo: ");
scanf("%d", &n);
} while (n <= 0);
if ((n % 2 == 0 || n % 3 == 0) && (n >= 10 && n <= 20)) {
printf("Si");
} else {
printf("No");
}
}
Sequenza e if con espressione logica
dato un numero n stampa tutti i numeri da 1 a n che sono divisibili da 2 o 3 o 5 ma non sono divisibili per 4
Figure geometriche
Dato un numero positivo n disegna le figure geometriche riportate di seguito:
per n = 5
xxxxx
xxxx
xxx
xx
x
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
x
xx
xxx
xxxx
xxxxx
Soluzione
#include <stdio.h>
int main() {
int n = 5, i, j;
printf("Triangolo 1\n");
// xxxxx
// xxxx
// xxx
// xx
// x
for (i = 0; i < n; i++) {
for (j = 0; j < n - i; j++) {
printf("x");
}
printf("\n");
}
printf("\nQuadrato\n");
// xxxxx
// xxxxx
// xxxxx
// xxxxx
// xxxxx
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
printf("x");
}
printf("\n");
}
printf("\nTriangolo 2\n");
// x
// xx
// xxx
// xxxx
// xxxxx
for (i = 0; i < n; i++) {
for (j = 0; j < i + 1; j++) {
printf("x");
}
printf("\n");
}
}
Figure geometriche 2
Esegui un programma che abbia il seguente output (chiaramente usando dei cicli):
1 2 3 4 5 6
2 3 4 5 6 +
3 4 5 6 + +
4 5 6 + + +
5 6 + + + +
6 + + + + +
Soluzione
#include <stdio.h>
int main() {
int i, j, n = 6, val;
printf("Modo 1\n");
for (i = 0; i < n; i++) {
for (j = 1 + i; j < 1 + i + n; j++) {
if (j <= n) {
printf("%d ", j);
} else {
printf("+ ");
}
}
printf("\n");
}
printf("\nModo 2\n");
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
val = 1 + i + j;
if (val <= n) {
printf("%d ", val);
} else {
printf("+ ");
}
}
printf("\n");
}
}
Gioco coi dadi 2
Simula l’esecuzione di un gioco di dadi in cui due persone si scontrano lanciando ognuno un dado. Il gioco è diviso in round. Al primo round i due giocatori lanciano ognuno un dado da venti facce e vince chi fa il numero più alto, in caso di pareggio ritirano i dadi finchè uno dei due non vince. Chi perde il round deve affrontare i round successivi con un dado con una faccia in meno. Perde la partita chi arriva ad avere un dado con 0 facce. Mostra ad ogni round quante facce hanno i dadi dei due giocatori e mostra il risultato di ogni lancio dei dadi. Dichiara infine il vincitore.
Soluzione
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main() {
int dado1, dado2, tiro1, tiro2;
srand(time(NULL));
dado1 = 20;
dado2 = 20;
while (dado1 > 0 && dado2 > 0) {
tiro1 = rand() % dado1 + 1;
tiro2 = rand() % dado2 + 1;
printf("giocatore 1: %2d, giocatore 2: %2d - ", tiro1, tiro2);
if (tiro1 > tiro2) {
dado2--;
printf("vince giocatore 1\n");
} else if (tiro1 < tiro2) {
dado1--;
printf("vice giocatore 2\n");
} else {
printf("pareggio\n");
}
}
if (dado1 == 0) {
printf("\nVince il giocatore 2!\n");
} else {
printf("\nVince il giocatore 1!\n");
}
}
Figure geometriche 3
Scrivi un programma che dato un numero n stampi una piramide come nel seguente esempio:
Con n = 3
1
121
12321
Soluzione
#include <stdio.h>
int main() {
int n, i, j, val;
n = 10;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
val = -n+i+j+2;
if (val > 0) {
printf("%2d ", val);
} else {
printf(" ");
}
}
for (j = n-2; j >= 0; j--) {
val = -n+i+j+2;
if (val > 0) {
printf("%2d ", val);
} else {
printf(" ");
}
}
printf("\n");
}
}
Figure geometriche 4
Scrivere un programma che legga due interi n e m con valori compresi tra 1 e 9, i cui prodotto sia inferiore a 35, e stampi m piramidi di altezza n. L’esempio si riferisce al caso n=3 e m=4.
1 1 1 1
121 121 121 121
12321123211232112321
Soluzione
#include <stdio.h>
int main() {
int n, i, j, k, m, val;
n = 3;
m = 4;
for (i = 0; i < n; i++) {
for (k = 0; k < m; k++) {
for (j = 0; j < n; j++) {
val = -n + i + j + 2;
if (val > 0) {
printf("%2d ", val);
} else {
printf(" ");
}
}
for (j = n - 2; j >= 0; j--) {
val = -n + i + j + 2;
if (val > 0) {
printf("%2d ", val);
} else {
printf(" ");
}
}
}
printf("\n");
}
}
Input e condizione
Scrivi un programma che permetta di controllare i dati di input immessi dall’utente: se l’utente inserisce un intero N compreso tra 1 e 10, il programma deve stampare a video il valore N^N, se l’intero N e’ compreso tra 11 e 20, il programma deve stampare a video la somma 1 + 2 + 3 +… + N altrimenti deve dare un segnale di errore.
Soluzione
#include <stdio.h>
int main() {
long long int n, i, ris;
printf("Scrivi un numero: ");
scanf("%lld", &n);
if (n >= 1 && n <= 10) {
for (i = 0, ris = 1; i < n; i++) {
ris *= n;
}
printf("%lld^%lld=%lld", n, n, ris);
}
else if (n >= 11 && n <= 20) {
for (i = 1, ris = 0; i <= n; i++) {
ris += i;
}
printf("sommatoria da 1 a %lld = %lld", n, ris);
} else {
printf("Valore non valido.");
}
}
Calcolo sommatoria matematica
Si realizzi un programma che legga un intero N da tastiera, e stampi a video il risultato della seguente sommatoria:
\[\sum_{i=0}^N \left[(-1)^i {4 \over 2i + 1}\right]\]Una volta calcolato e stampato il valore a video, il programma deve chiedere un nuovo numero all’utente e ripetere il calcolo. Il programma deve terminare solo qualora l’utente inserisca un valore negativo.
Soluzione
#include <stdio.h>
int main() {
int i, n;
float ris, x;
do {
printf("Scrivi n (negativo per terminare): ");
scanf("%d", &n);
ris = 0;
for (i = 0; i <= n; i++) {
x = 4.0 / (2 * i + 1);
if (i % 2 != 0) {
x *= -1;
}
ris += x;
}
printf("%f\n", ris);
} while (n >= 0);
}
Calcolo interesse cumulato
Si progetti in C un programma che legge un float, rappresentante un ammontare di euro; di seguito il programma deve leggere un tasso d’interesse (in percentuale), ed un numero di anni. Il programma deve stampare, in uscita, per ogni anno, come l’ammontare cresce con gli interessi. Si ricordi che l’interesse si calcola con la seguente formula:
\[C_{fin} = C_{in} \left( 1 + (r/100) \right)N\]dove $C_{fin}$ è il capitale finale, $C_{in}$ è quello iniziale, $r$ è l’interesse, e $N$ rappresenta il numero di anni in cui si applicano gli interessi.
Ad esempio supponiamo che il capitale iniziale sia di 1000.0 €, con un tasso del 3%, per un periodo di 3 anni. L’output stampato deve avere all’incirca questo aspetto:
Capitale iniziale: 1000.00€
Dopo 1 anno: 1030.00 €
Dopo 2 anni: 1060.90 €
Dopo 3 anni: 1092.73 €
Soluzione
#include <stdio.h>
#include <math.h>
int main() {
float c, r, cf;
int n, i;
c = 1000.0;
r = 3;
n = 10;
printf("Capitale iniziale : %.2f e\n", c);
cf = c;
for (i = 1; i <= n; i++) {
cf = cf * ( 1 + (r/100));
printf("Dopo %d anni: %.2f e\n", i, cf);
}
printf("\n\nCapitale iniziale : %.2f e\n", c);
for (i = 1; i <= n; i++) {
cf = c * pow(1 + (r/100), i);
printf("Dopo %d anni: %.2f e\n", i, cf);
}
}
Input sequenza non 0, ASCII code
Realizzare un programma che legga da input un carattere dell’alfabeto e stampi a video il carattere stesso ed il suo valore ASCII. Il programma deve controllare che il carattere inserito sia compreso tra ‘a’ e ‘z’ o tra ‘A’ e ‘Z’ (in caso contrario si stampi un messaggio di errore). Dopo la stampa, il programma deve continuare a chiedere nuovi caratteri, finché l’utente non inserisce il carattere corrispondente al numero zero ( ‘0’ ): in tal caso il programma termina.
Soluzione
#include <stdio.h>
int main() {
char c;
do {
printf("Scrivi un carattere: ");
scanf(" %c", &c);
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
printf("%d\n\n", c);
} else {
printf("'%c' non e' una lettera.\n\n", c);
}
} while (c != '0');
}
Input sequenza, calcolo più lunga sottosequenza
Realizzare un programma che prende in input una sequenza di caratteri ‘0’ e ‘1’ e conta la lunghezza della più lunga sotto-sequenza di ‘0’ di fila. L’inserimento della sequenza termina quando si inserisce un carattere diverso da ‘0’ e ‘1’ A quel punto, si stampa a video il valore trovato.
Soluzione
#include <stdio.h>
int main() {
char car;
int lung, max;
lung = 0;
max = 0;
do {
scanf(" %c", &car);
if (car == '0'){
lung++;
} else {
if (lung > max) {
max = lung;
}
lung = 0;
}
} while (car == '0' || car == '1');
printf("\n\n%d", max);
}
Input sequenza, calcolo più lunga sottosequenza 2
Realizzare un programma che prenda in input una sequenza di cifre (tra 1 e 9) e calcoli la somma massima fra le sottosequenze di cifre non decrescenti Il programma termina quando viene inserito lo 0 Esempio:
Soluzione
#include <stdio.h>
int main() {
int n, prec, somma, sommamax;
prec = 10;
sommamax = 0;
somma = 0;
do {
printf("Scrivi un numero tra 1 e 9: ");
scanf("%d", &n);
while (n < 0 || n > 9) {
printf("Errore! Scrivi un numero tra 1 e 9: ");
scanf("%d", &n);
}
if (prec <= n) {
somma += n;
} else {
somma = n;
}
if (somma > sommamax) {
sommamax = somma;
}
prec = n;
} while (n != 0);
printf("%d", sommamax);
}
Input sequenza lunga n, quadrati perfetti
Data in input una sequenza di n numeri (n dato dall’utente), stampare per ognuno il numero di quadrati perfetti minori di quel numero.
Soluzione
#include <stdio.h>
int main() {
int n, numero, i, j, nquadrati;
do {
printf("Quanti numeri vuoi inserire: ");
scanf("%d", &n);
} while (n < 1);
for (i = 0; i < n; i++) {
printf("inserisci il %d numero: ", i+1);
scanf("%d", &numero);
nquadrati = 0;
for (j = 1; j*j <= numero; j++) {
nquadrati++;
}
printf("esistono %d quadrati perfetti minori o ugali a %d.\n", nquadrati, numero);
}
}
Lancio moneta
Conta quanti tiri di moneta devi fare prima di vedere uscire testa per 10 volte di fila.
Soluzione
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main() {
int ntiri, tiro, cont;
srand(time(NULL));
for(ntiri = 0, cont = 0; cont < 10; ntiri++) {
tiro = rand() % 2;
if (tiro == 1) {
cont += 1;
} else {
cont = 0;
}
}
printf("%d", ntiri);
}
Calcolo probabilità Dado 3
Conta quanti tiri di un dado da 6 devi fare prima di vedere uscire lo stesso numero 5 volte di fila.
Soluzione
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main() {
int ntiri, tiro, cont, prec;
srand(time(NULL));
prec = 0;
for(ntiri = 0, cont = 0; cont < 5; ntiri++) {
tiro = rand() % 6 + 1;
if (tiro == prec) {
cont += 1;
} else {
cont = 0;
}
prec = tiro;
}
printf("%d", ntiri);
}
Indovina il numero
Scrivi un programma che deve indovinare un numero scelto dall’utente (che se lo tiene per sé e non lo dice al computer). Il computer continua a proporre numeri e l’utente deve rispondere se il numero segreto è maggiore o minore di quello proposto.
Soluzione
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int n, risp;
int min = 0, max = 1000;
int ntentativi;
printf("Pensa ad un numero tra %d e %d, ora cercherò di indovinarlo.\n", min, max);
for (ntentativi = 0; 1; ntentativi++) {
n = (max+min) / 2;
printf("Il numero e' %d? (0 no, 1 si): ", n);
scanf("%d", &risp);
if (risp) {
printf("Ho indovinato in %d mosse.\n", ntentativi);
break;
} else {
printf("Il numero che hai pensato e' maggiore o minore di %d? (0 minore, 1 maggiore): ", n);
scanf("%d", &risp);
if (risp) {
min = n+1;
} else {
max = n-1;
}
}
}
}
Sequenza casuale, calcolo media
Genera una sequenza di 10 numeri interi casuali e calcolane la media.
Soluzione
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int n = 10, numero, i, min, max;
float media;
srand(time(NULL));
min = 8;
max = 12;
media = 0;
for (i = 0; i < n; i++) {
numero = rand() % (max-min+1) + min;
printf("%d ", numero);
media += numero;
}
media /= n;
printf("\n\n%.2f", media);
}
Calcolo probabilità dadi 4
Tira due dadi da 12 fino a che non escono due numeri uguali. Calcola la media dei tiri fatti (sommi sempre i due dadi)
Soluzione
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int d1, d2, c, min, max;
float media;
srand(time(NULL));
media = 0;
c = 0;
while (1) {
d1 = rand() % 12 + 1;
d2 = rand() % 12 + 1;
printf("%d %d = %d\n", d1, d2, d1+d2);
if (d1 == d2) {
break;
}
media += (d1+d2);
c++;
}
media /= c;
printf("\n\n%.2f", media);
}
If con espressione logica 3
Leggi due numeri e poi comunica se questi numeri hanno lo stesso segno o se la loro somma è negativa e contemporaneamente sono entrambi minori di 10.
Soluzione
#include <stdio.h>
int main() {
int a, b;
printf("Scrivi due numeri interi qualsiasi: ");
scanf("%d %d", &a, &b);
if (a*b > 0 || (a+b < 0 && a < 10 && b < 10)){
printf("Si");
} else {
printf("No");
}
}