# Soluzioni: Strutture di Controllo 1 ## Esercizio 1: Conversione da Fahrenheit a Celsius Si scriva un programma che prenda in input un numero che rappresenti una temperatura in gradi Fahrenheit e si stampi a schermo la temperatura corrispondente in gradi Celsius. Si usi la seguente formula di conversione: $C = \frac{5}{9} (F - 32)$. ```c #include <stdio.h> int main(int argc, char* argv[]){ // Variabili float F, C; // Acquisizione temperatura F printf("Si inserisca una temperatura in gradi Fahrenheit: "); scanf("%f", &F); printf("\n"); // Conversione C = 5.0/9 * (F - 32); // Stampa la temperatura in C printf("La temperatura corrispondente in gradi Celsius è: %.2f.\n", F); return 0; } ``` ## Esercizio 2: Modulo Si scriva un programma che prenda in input un numero e se ne stampi il modulo. ```c #include <stdio.h> int main(int argc, const char * argv[]){ // Variabili float num, abs; // Acquisizione numero printf("Inserisci un numero: "); scanf("%f", &num); printf("\n"); // Calcolo valore assoluto if(num >= 0) abs = num; else abs = -num; // Stampa valore assoluto printf("Il valore assoluto di %f è %f.\n", num, abs); return 0; } ``` --- ## Esercizio 3: Equazione di Secondo Grado Si scriva un programma che prenda tre numeri in input che rappresentano i coefficienti dell’equazione di secondo grado. Si stampino a schermo le radici dell’equazione in questione (se esistono). ```c #include <stdio.h> #include <math.h> int main(int argc, const char * argv[]){ // Dichiarazione delle variabili float a, b, c, delta, x_1, x_2; // Acquisizione delle variabili printf("Inserisci il coefficiente di x^2: "); scanf("%f", &a); printf("\n"); printf("Inserisci il coefficiente di x: "); scanf("%f", &b); printf("\n"); printf("Inserisci il coefficiente libero: "); scanf("%f", &c); printf("\n"); // Calcolo radici delta = b * b - 4 * a * c; if(delta >= 0){ if(delta > 0){ x_1 = (-b + sqrt(delta)) / (2 * a); x_2 = (-b - sqrt(delta)) / (2 * a); printf("Radici: x_1 = %.2f e x_2 = %.2f\n", x_1, x_2); } else{ x_1 = (-b) / (2 * a); printf("Le radici sono uguali e coincidenti: x_1 = x_2 = %.2f\n.", x_1); } } else{ printf("Non esistono radici per l'equazione richiesta.\n"); } return 0; } ``` **Bonus**: stampare a schermo l'equazione. --- ## Esercizio 4: Massimo tra Tre Numeri Si scriva un programma che prenda in input tre numeri e che stampi a schermo il massimo dei tre. ```c #include <stdio.h> int main(int argc, const char * argv[]){ // Variabili int a, b, c, max; // Acquisizione dei valori delle variabili printf("Inserisci il PRIMO numero: "); scanf("%d", &a); printf("\n"); printf("Inserisci il SECONDO numero: "); scanf("%d", &b); printf("\n"); printf("Inserisci il TERZO numero: "); scanf("%d", &c); printf("\n"); // Calcolo del massimo if(a>b){ if(a>c) max = a; else max = c; } else{ if(b>c) max = b; else max = c; } // Stampa massimo printf("Il valore massimo tra %d, %d e %d è: %d.\n", a, b, c, max); return 0; } ``` **Bonus**: si può fare di meglio? --- ## Esercizio 5: Ordinamento di Tre Numeri Si scriva un programma che prenda in input tre numeri. Il programma deve stampare i tre numeri acquisiti a schermo in ordine ascendente. ```c #include <stdio.h> int main(int argc, const char * argv[]){ // Definizione delle variabili int a, b, c, min, max, mid; // Acquisizione dei valori delle variabili printf("Inserisci il PRIMO numero: "); scanf("%d", &a); printf("\n"); printf("Inserisci il SECONDO numero: "); scanf("%d", &b); printf("\n"); printf("Inserisci il TERZO numero: "); scanf("%d", &c); printf("\n"); // Identificazione del massimo if(a > b){ // (b,a) ma non sappiamo nulla di c if(a > c){ // (b, a) e (c, a) ma non sappiamo come sono relazionati b e c max = a; if(c > b){ // (b, c, a) min = b; mid = c; } else{ // (c, b, a) min = c; mid = b; } } else{ // (b, a, c) max = c; mid = a; min = b; } } else{ // (a, b) ma non sappiamo nulla di c if(b > c){ // (a, b) e (c, b) ma come sono relazionati a e c? max = b; if(a > c){ // (c, a, b) mid = a; min = c; } else{ // (a, c, b) mid = c; min = a; } } else{ // (a, b, c) max = c; mid = b; min = a; } } // Stampa valori in ordine printf("Valori in ordine ascendente: %d -> %d -> %d.\n", min, mid, max); return 0; } ``` **Bonus**: si può fare di meglio? (suggerimento: usare una variabile d'appoggio). --- ## Esercizio 6: Inversione di un Numero a Due Cifre Si scriva un programma che prenda in input un numero intero positivo e che sia composto esattamente da due cifre. Si stampi a schermo il numero con le cifre invertite. ```c #include <stdio.h> int main(int argc, const char * argv[]){ // Variabili int num, out_num; // Acquisiszione numero printf("Inserisci un numero a due cifre: "); scanf("%d", &num); printf("\n"); // Controllo che sia a due cifre positivo if(num >= 100 || num <= 9){ printf("Il numero non ha due cifre o è negativo!\n"); return; } // Inversione cifre out_num = (num % 10) * 10; num /= 10; // è come fare num = num / 10 out_num += num % 10; // Stampo printf("Il numero con le cifre invertite è: %d.\n", out_num); return 0; } ``` --- ## Esercizio 7: Lettera Successiva Si scriva un programma che prenda in input una lettera (minuscola o maiuscola) e si stampi (se possibile) la lettera successiva in ordine alfabetico. ```c #include <stdio.h> int main(int argc, const char * argv[]){ // Variabili char lettera, prossima_lettera; // Acquisizione printf("Inserisci una lettera: "); scanf("%c", &lettera); printf("\n"); // Controllo che sia una lettera maiuscola o minuiscola if(!(lettera >= 'A' && lettera <= 'Z') && !(lettera >= 'a' && lettera <= 'z')){ printf("Non hai inserito una lettera!\n"); return; } // Controllo se la lettera è z o Z if(lettera == 'z' || lettera == 'Z') prossima_lettera = lettera; else prossima_lettera = lettera + 1; // Stampa printf("La lettera successiva a %c è %c.\n", lettera, prossima_lettera); return 0; } ``` --- ## Esercizio 8: Minuscola o Maiuscola Corrispondente Si scriva un programma che prenda in input una lettera minuscola/maiuscola e si stampi la lettera corrispondente maiuscola/minuscola. ```c #include <stdio.h> int main(int argc, const char * argv[]){ // Variabili char lettera, lettera_corrispondente; int offset = 'a' - 'A'; // Acquisizione printf("Inserisci una lettera: "); scanf("%c", &lettera); printf("\n"); // Controllo che sia una lettera maiuscola o minuiscola if(!(lettera >= 'A' && lettera <= 'Z') && !(lettera >= 'a' && lettera <= 'z')){ printf("Non hai inserito una lettera!\n"); return; } // Calcolo corrispondente if(lettera >= 'A' && lettera <= 'Z') lettera_corrispondente = lettera + offset; else lettera_corrispondente = lettera - offset; // Stampa printf("La lettera corrispondente a %c è %c.\n", lettera, lettera_corrispondente); return 0; } ```