Sei sulla pagina 1di 19

S​CUOLA​ P​OLITECNICA 

I​NGEGNERIA​ I​NFORMATICA 

C​ORSO​ ​DI​ C ​ LCOLATORI​ ​EL​ ETTRONICI 


​ A
A.A. 2018/19 
F​ONDAMENTI​ D
​ I​ P
​ ​ROGRAMMAZIONE 
Ing. Antonio Bordonaro 
 

Esercitazione 3 
SOLUZIONE  

 
1. Scrivere, dopo averne disegnato il ​diagramma di flusso​, un programma in C che calcoli la somma di ​n 
elementi (​int​) fatti inserire dall’utente. Per far ciò, chiedere all’utente di inserire n
​ ​ (che rappresenta 
quanti numeri intende inserire) ed iniziare l’acquisizione (stampando, di volta in volta, l’ultimo valore 
inserito).  
 
SOLUZIONE 
 
Diagramma di flusso: 


S​CUOLA​ P​OLITECNICA 
I​NGEGNERIA​ I​NFORMATICA 

 
 
Implementazione: 
 
#include​ ​<​stdio.h​>

int​ main(){
​int​ sum=​0​;
​int​ i=​0​, n, current;

printf(​"Inserisci N: "​);
scanf(​"%d"​, &n);

​for​(i=​0​; i<n; ++i){


printf(​"Inserisci CURRENT: "​);
scanf(​"%d"​, &current);
sum += current;

printf(​"CURRENT = %d\n"​, current);


}

printf(​"SUM = %d\n"​, sum);

​return​ ​0​;

 
 
   


S​CUOLA​ P​OLITECNICA 
I​NGEGNERIA​ I​NFORMATICA 

 
2. Scrivere, dopo averne disegnato il diagramma​ d
​i​ f​lusso, un programma in C che permetta all’utente di 
inserire un numero arbitrario di numeri (​int​). 
L’acquisizione dei dati termina quando l’utente inserisce due valori uguali di fila. Il programma deve 
anche tenere traccia di quanti numeri sono stati inseriti.  
Esempio:  
L’utente inserisce i valori 4 2 6 2 5 2 6 4 3 3 
Il programma stamperà a schermo: 
Numeri inseriti: 10

SOLUZIONE 
 
Diagramma di flusso: 
 


S​CUOLA​ P​OLITECNICA 
I​NGEGNERIA​ I​NFORMATICA 

 
 
 
 
Implementazione 
 
#include​ ​<​stdio.h​>

int​ main(){
​int​ count = ​0​, prev = ​0​;
​int​ flag = ​0​;
​int​ current;

​do​{
printf(​"Inserisci CURRENT: "​);
scanf(​"%d"​, &current);

​if​(count >= ​1​ && prev == current){


flag = ​1​;
}
count++;
prev = current;
}​while​(flag == ​0​);

printf(​"Numeri inseriti: %d\n"​, count);

​return​ ​0​;
}

 
   


S​CUOLA​ P​OLITECNICA 
I​NGEGNERIA​ I​NFORMATICA 

3. Scrivere, dopo averne disegnato il diagramma​ d


​i​ f​lusso, un programma in C che calcoli la somma dei 
primi ​n n
​ umeri naturali (con ​n c​ ompreso). Il valore n
​ ​(​int​) deve essere scelto dall’utente.
Esempio:  
L’utente inserisce il valore 5 
Il programma stamperà a schermo:  
La somma dei primi 5 numeri è: 15
(​poiché 1 + 2 + 3 + 4 + 5 = 15)  
 
SOLUZIONE 
 
Diagramma di flusso: 

 
Implementazione 
 
#include​ ​<​stdio.h​>
int​ main(){
​int​ sum=​0​;
​int​ i=​0​, n;
printf(​"Inserisci N: "​);
scanf(​"%d"​, &n);

​for​(i=​0​; i<=n; ++i){


sum += i;
}
printf(​"SUM = %d\n"​, sum);
​return​ ​0​;
}


S​CUOLA​ P​OLITECNICA 
I​NGEGNERIA​ I​NFORMATICA 

4. Scrivere, dopo averne disegnato il diagramma​ d


​i​ f​lusso, un programma in C che chieda all’utente di 
inserire due valori (​int​), ​n1​​ ed ​n​2​ .  
Calcolare la somma dei soli v​ alori pari ​compresi fra ​n​1​ ed ​n​2​ ​(inclusi)​. 
Esempio:  
L’utente inserisce i valori 6 e 10 
Il programma stamperà a schermo:  
La somma numeri compresi fra 6 e 10 è: 24
(​poiché 6 + 8 + 10 = 24)  
 
SOLUZIONE 
 
Diagramma di flusso: 


S​CUOLA​ P​OLITECNICA 
I​NGEGNERIA​ I​NFORMATICA 

 
Implementazione 
#include​ ​<​stdio.h​>

int​ main(){
​int​ sum=​0​, n1, n2, tmp;
​int​ i;

printf(​"Inserisci N1: "​);


scanf(​"%d"​, &n1);
printf(​"Inserisci N2: "​);
scanf(​"%d"​, &n2);

​if​(n1 > n2){


tmp = n1;
n1 = n2;
n2 = tmp;
}

​for​(i=n1; i<=n2; ++i){


​if​(i % ​2​ == ​0​){
sum += i;
}
}
printf(​"SUM = %d\n"​, sum);

​return​ ​0​;
}

   


S​CUOLA​ P​OLITECNICA 
I​NGEGNERIA​ I​NFORMATICA 

 
5. Scrivere un programma in C che stampi a schermo il valore della codifica ASCII di tutti i caratteri 
compresi fra a​ e​ ​z.  
Esempio:  
Il programma stamperà a schermo: 
1. a = 97
2. b = 98

SOLUZIONE 
 
Implementazione: 
#include​ ​<​stdio.h​>

int​ main(){
​int​ i=​0​;

​for​(i=​'a'​; i<​'z'​; ++i){


printf(​"%d\n"​, i);
}
​return​ ​0​;
}


S​CUOLA​ P​OLITECNICA 
I​NGEGNERIA​ I​NFORMATICA 

6. Scrivere, dopo averne disegnato il diagramma​ d


​i​ f​lusso, un programma in C che chieda all’utente di 
inserire un valore n
​ ​ (​int​) e stampi a schermo t​ utti ​i divisori di n
​ ​. 
Esempio:  
L’utente inserisce il valore 42 
Il programma stamperà a schermo: 
I divisori di 42 sono: 2 3 6 7 14 21

SOLUZIONE 
 
Diagramma di flusso: 

 
 
 
 
 
 
 
 


S​CUOLA​ P​OLITECNICA 
I​NGEGNERIA​ I​NFORMATICA 

 
Implementazione: 
#include​ ​<​stdio.h​>

int​ main(){
​int​ n, i=​2​;

printf(​"Inserisci N: "​);
scanf(​"%d"​, &n);

​for​(i=​2​; i<n; ++i){


​if​(n % i == ​0​){
printf(​"%d "​, i);
}
}
printf(​"\n"​);

​return​ ​0​;
}

   

10 
S​CUOLA​ P​OLITECNICA 
I​NGEGNERIA​ I​NFORMATICA 

 
7. Scrivere, dopo averne disegnato il diagramma​ d
​i​ f​lusso, un programma in C che chieda all’utente di 
inserire un valore n
​ ​ (​int​) e stabilisca se n
​ è​ un numero primo.  
N.B​.​ Un numero si dice ​primo ​se è divisibile ​solo p
​ er 1 e per s​ e stesso.

SOLUZIONE 
Diagramma di flusso: 
 

 
 
 
 
 
 
 

11 
S​CUOLA​ P​OLITECNICA 
I​NGEGNERIA​ I​NFORMATICA 

 
 
Implementazione 
(​ N ​ omeFile​ -lm​) 
​ .B.​compilare con gcc n

#include​ ​<​stdio.h​>
#include​ ​<​math.h​>

int​ main(){
​int​ n, is_prime=​1​;
​int​ i=​2​;

printf(​"Inserisci N: "​);
scanf(​"%d"​, &n);

​for​(i=​2​; i<=sqrt(n) && is_prime == ​1​; ++i){


​if​(n%i == ​0​){
is_prime = ​0​;
}
}
​if​(is_prime == ​1​){
printf(​"%d is a prime number\n"​, n);
} ​else​ {
printf(​"%d is NOT a prime number\n"​, n);
}
​return​ ​0​;
}

 
   

12 
S​CUOLA​ P​OLITECNICA 
I​NGEGNERIA​ I​NFORMATICA 

 
8. Scrivere un programma in C che chieda all’utente di inserire un valore ​n​ (​int​) e stampi a schermo tutti i 
numeri primi minori di n
​ ​. 
 
SOLUZIONE 
 
Implementazione:  
 
#include​ ​<​stdio.h​>
#include​ ​<​math.h​>

int​ main(){
​int​ i=​0​, n;
​int​ j=​0​;
​int​ is_prime = ​1​;

printf(​"Insert n: "​);
scanf(​"%d"​, &n);

​for​(i=​2​; i<n; ++i){


​for​(j=​2​; j<=sqrt(i) && is_prime == ​1​; ++j){
​if​(i%j == ​0​){
is_prime = ​0​;
}
}
​if​(is_prime){
printf(​"%d is a prime number\n"​, i);
} ​else​ {
printf(​"%d is NOT a prime number\n"​, i);
}
is_prime = ​1​;
}
​return​ ​0​;
}

   

13 
S​CUOLA​ P​OLITECNICA 
I​NGEGNERIA​ I​NFORMATICA 

 
9. Scrivere, dopo averne disegnato il diagramma​ d
​i​ f​lusso, un programma in C che chieda all’utente di 
inserire un valore e stabilisca se tale valore è un numero a​ bbondante.  
N.B​.​ Un intero n
​ ​si dice ​abbondante s​ e è minore della somma dei suoi divisori. 
Esempio:  
L’utente inserisce il valore 12 
Il programma stamperà a schermo: 
12 è un valore abbondante
(​poiché la somma dei divisori di 12 (1+2+3+4+6) è maggiore di 12)  
 
 
SOLUZIONE 
 
Diagramma di flusso: 
 

 
 
 
 

14 
S​CUOLA​ P​OLITECNICA 
I​NGEGNERIA​ I​NFORMATICA 

 
Implementazione: 

#include​ ​<​stdio.h​>

int​ main(){
​int​ n, sum=​0​, i=​0​;

printf(​"Inserisci N: "​);
scanf(​"%d"​, &n);

​for​(i=​1​; i<n; ++i){


​if​(n%i == ​0​){
sum += i;
}
}
​if​(sum > n){
printf(​"%d is an abundant number (sum=%d)\n"​, n, sum);
} ​else​ {
printf(​"%d is NOT an abundant number (sum=%d)\n"​, n, sum);
}
​return​ ​0​;
}

   

15 
S​CUOLA​ P​OLITECNICA 
I​NGEGNERIA​ I​NFORMATICA 

10. Con riferimento all’​esercizio 9


​ , scrivere, dopo averne disegnato il diagramma​ d
​i​ ​flusso, un programma in 
C che stampi a schermo i primi 1000 numeri ​abbondanti​. Calcolare anche quanti numeri d
​ ispari 
abbondanti ​sono stati stampati. 
Esempio:  
Il programma stamperà a schermo: 
12 18 20 24 30 36 40 . . . . .
Numeri dispari stampati: 1

SOLUZIONE 
 
Diagramma di flusso: 

16 
S​CUOLA​ P​OLITECNICA 
I​NGEGNERIA​ I​NFORMATICA 

Implementazione: 

#include​ ​<​stdio.h​>

int​ main(){
​int​ n = ​1000​, count_odd = ​0​;
​int​ i=​0​, j=​0​;
​int​ sum = ​0​;

​for​(i=​1​; i<=n; ++i){


sum = ​0​;
​for​(j=​1​; j<i; ++j){
​if​(i%j == ​0​){
sum += j;
}
}
​if​(sum > i){
​if​(i % ​2​){
count_odd++;
}
printf(​"%d is an abundant number\n"​, i);
} ​else​ {
printf(​"%d is NOT an abundant number\n"​, i);
}
}
printf(​"COUNT_ODD = %d\n"​, count_odd);
​return​ ​0​;
}

17 
S​CUOLA​ P​OLITECNICA 
I​NGEGNERIA​ I​NFORMATICA 

11. Scrivere un programma in C che permetta all’utente di inserire un numero ​indefinito d


​ i valori (​int​). 
L’inserimento termina quando l’utente inserisce il valore 0 (zero). Alla fine, il programma stamperà a 
schermo il numero di valori inseriti, il massimo valore inserito e la media.  
 
12. Scrivere un programma in C che chieda all’utente di inserire 2 valori (​int​) e ne calcoli il prodotto. 
Effettuare il prodotto come s​ omma ripetuta​. Che succede se uno dei valori è negativo? 
Esempio:  
L’utente inserisce i valori 3 5 
Il programma stamperà a schermo: 
3 x 5 = 15
(in quanto 3 + 3 + 3 + 3 + 3 = 15) 
 
13. Modificare l’​esercizio 11 ​per far in modo che funzioni anche con numeri negativi. 
 
14. Scrivere, dopo averne disegnato il diagramma di flusso, un programma in C che stampi a schermo i primi 
m ​numeri della ​successione di Fibonacci​. Il valore m
​ (​ ​int​) deve essere inserito dall’utente.  
La successione di Fibonacci è definita come: 
n​1​ = 1 
n​2​ = 1 
n​i​ ​= n
​ i​​ -​1​ + n
​ i​​ -​2​ ​(per n > 2) 
 
15. Scrivere un programma in C che implementi il gioco i​ ndovina il numero​
.  
L’​utente 1 ​inserisce un valore segreto n
​ (​ i​ nt​) compreso fra 0 e 100. L’​utente 2 ​ha 10 tentativi a 
disposizione per indovinare il numero inserito.  
Ad ogni tentativo, il programma dovrà dare anche qualche indicazione.  
Nello specifico, per ogni tentativo: 

● Se il valore inserito è ​maggiore d


​ in
​ , ​il programma dovrà stampare “​Valore inserito troppo
grande”
● Se il valore inserito è ​minore d
​ in
​ , ​il programma dovrà stampare “​Valore inserito troppo
piccolo”
● Se il valore inserito è ​uguale a​ ​n, i​ l programma dovrà stampare “​Indovinato!” c​ on un riepilogo 
della partita (numero di tentativi effettuati, numero dei tentativi rimasti). Dopo il riepilogo, il 
gioco termina. 

Inoltre, per ogni tentativo, dovrà anche essere stampato il numero di tentativi effettuati ed il numero di 
tentativi ancora a disposizione. 
 
 

18 
S​CUOLA​ P​OLITECNICA 
I​NGEGNERIA​ I​NFORMATICA 

16. Scrivere un programma in C che implementi una s​ emplice calcolatrice​


. Il programma deve permettere 
all’utente, tramite apposito m
​ enu​, di selezionare l’operazione che intende effettuare (somma, prodotto, 
differenza, divisione o terminare il programma). 
Effettuata la scelta dell’operazione, il programma chiede all’utente di inserire i due operandi (​float​). 
Terminata l’acquisizione degli operandi, viene stampato a schermo il risultato e viene mostrato 
nuovamente il menu. 
 
Il programma termina solo quando l’utente sceglie esplicitamente di uscire dall’applicazione (inserendo il 
valore 0
​ )​.  
Esempio:  
Il programma stamperà a schermo: 
Indica la prossima operazione che intendi effettuare:
1. Somma 2. Prodotto 3. Differenza 4. Divisione 0. Esci
L’utente inserisce il valore 2
Il programma stamperà a schermo: 
Inserisci gli operandi:
L’utente inserisce i valori 4 e 5
Il programma stamperà a schermo: 
4 x 5 = 20
Indica la prossima operazione che intendi effettuare:
1. Somma 2. Prodotto 3. Differenza 4. Divisione 0. Esci
L’utente inserisce il valore 0 
Il programma stamperà a schermo: 
Programma terminato 
 
 
 
 

19