ESERCIZI DI PROGRAMMAZIONE IN C Per ogni esercizio è generalmente richiesto l’algoritmo risolutivo, dal quale poi ricavare la relativa codifica in linguaggio C. Ricordare che un file sorgente in C deve essere salvato con estensione c. In molti programmi è utile e necessario controllare opportunamente l’input dell’utente. Ogni programma deve essere autodocumentato, ovvero deve comprendere la presenza di opportuni commenti nelle parti più significative. 1. Un gruppo di ragazzi vince un certo numero di gettoni in una sala giochi e decide di dividersi i gettoni in parti uguali, lasciando il resto della divisione come riserva per l’intero gruppo. Scrivere un programma che richiede all’utente il numero dei gettoni e il numero dei ragazzi e che scriva la quota di gettoni spettanti per ragazzo e il numero di gettoni che avanzano. 2. Sul prezzo di un prodotto viene praticato lo sconto del 10% se costa meno di 500 euro e del 20% per prezzi superiori o uguali a 500 euro. Calcolare il prezzo da pagare. 3. Scrivere un programma che calcola l’importo di prodotti in offerta 3 x 2 : se di un prodotto vengono acquistati 3 pezzi, si deve pagare l’importo pari a 2 pezzi, mentre per quantità inferiori a 3 il prezzo resta invariato. Si ipotizza che il prodotto non venga acquistato in quantità maggiori di 3. 4. Scrivere un programma che acquisisce un numero intero positivo e scrive sullo schermo se il numero è pari o dispari. 5. Scrivere un programma che illustra il funzionamento di tutte le funzioni studiate presenti nella libreria <math.h>. 6. Scrivere un programma che acquisisce un numero intero positivo N e stampa sullo schermo N asterischi, se il numero è minore o uguale a 10, oppure scrive impossibile in caso contrario. 7. Dati in input N numeri, calcolare la loro somma e la loro media aritmetica. 8. Dati in input una serie di N numeri, determinare il massimo e il minimo tra essi. 9. Calcolare la somma dei primi 10 numeri interi successivi a un numero N fornito da tastiera. 10. Calcolare la somma dei primi N numeri pari successivi a un numero dato A. 11. Calcolare la somma dei quadrati dei primi N numeri interi. 12. Scrivere un programma che chiede all'utente di inserire da tastiera dei numeri interi, finché si è riusciti a sommare 10 numeri pari. Alla fine si deve comunicare il risultato della somma. 13. Dato un elenco di N numeri, si devono scegliere quelli che sono maggiori di 10 e minori di 100. Contare tali numeri e scrivere la loro somma. 14. Data una sequenza di numeri, contare quelli positivi e quelli negativi. Comunicare il numero dei positivi e dei negativi, e comunicare la percentuale dei positivi e dei negativi rispetto al totale dei numeri. 15. Inserito da tastiera un numero intero N, sommare i primi N numeri dispari e verificare che tale somma è uguale al quadrato di N. 16. Scrivere un programma che scrive sullo schermo tutti i divisori di un numero intero positivo N e conta quanti sono. 17. Scrivere un programma che stampa sullo schermo la tavola pitagorica dei primi dodici numeri naturali. 18. Stabilire se un anno fornito da tastiera è bisestile oppure no. Si ricorda che un anno è bisestile se è divisibile per 4 ma non per 100, fatta eccezione per gli anni divisibili per 400 che sono bisestili. 19. Scrivere un programma che stampa la tabella ASCII di base (caratteri aventi codice ASCII compreso fra 32 decimale e 126 decimale). Suggerimento: utilizzare il tipo char e le specifiche di formato %c e %d, che permettono di interpretare una variabile sia di tipo char che di tipo numerico. In questo ultimo caso, il numero stampato è proprio il codice ASCII del carattere in oggetto. 20. Scrivere un programma che acquisisce un numero intero N compreso fra 32 e 126 e stampa sullo schermo il carattere avente per codice ASCII il numero N. 21. Scrivere un programma che converte un numero intero positivo compreso fra 0 e 255 nel corrispondente numero esadecimale. 22. Scrivere un programma che converte un numero esadecimale compreso fra 00h e FFh nel corrispondente numero decimale. 23. Scrivere un programma che genera quattro numeri casuali differenti compresi fra 1 e 9. 24. Scrivere un programma che riduce ai minimi termini una frazione letta in input. 25. Scrivere un programma che, attraverso un menù di scelta a cinque voci (somma, differenza, prodotto, divisione e uscita), consente di eseguire le operazioni fra due frazioni acquisite in input mediante numeratore e denominatore. Le frazioni risultato devono essere ridotte ai minimi termini e presentarsi nella classica forma matematica A / B. 26. Scrivere un programma che attraverso un menù di scelta permette di eseguire la conversione da binario a decimale oppure la conversione da decimale a binario oppure di uscire. 27. Dati due numeri interi positivi, determinare il loro massimo comune divisore utilizzando l’algoritmo di Euclide. (se a e b sono i due numeri ed r è il resto della divisione fra a e b, nel caso r sia nullo allora il massimo comune divisore fra a e b è b, altrimenti si sostituisce a con b e b con r e si ripete il passo precedente). 28. Scrivere un programma che, utilizzando il metodo di Gauss, calcola il giorno e il mese in cui cade la Pasqua, dato l’anno in input. 29. Scrivere un programma che sviluppa il gioco “Indovina il numero”. Il giocatore immette di volta in volta il valore scelto cercando, sulla base delle risposte fornite dal computer (numero troppo grande oppure numero troppo piccolo), di indovinare il numero generato in modo casuale dal computer stesso. Se non ci riesce in dieci tentativi l’utente ha perso e la sconfitta viene segnalata dal programma. 30. Scrivere un programma che sviluppa il gioco “Lancio del dado”. Il giocatore, dopo aver definito il numero di lanci prescelto e dichiarato se preferisce puntare sulle facce pari o dispari, osserva sul video l’andamento del gioco, fino alla sua conclusione. Il programma, infatti, genera di volta in volta un numero casuale compreso fra 1 e 6 e attribuisce a se stesso o al giocatore un punto a seconda del valore uscito. Al termine, il programma mostra sullo schermo il punteggio del computer e del giocatore e comunica con un messaggio il vincitore della partita.