Post on 02-May-2015
transcript
Piero Scotto - C14 1
C14 #3 Soluzioni e commenti
esercizi 1 e 2
Piero Scotto - C14 2
Finalità del corso
Finalità del corso
Finalità del corso
Finalità del corso
Finalità del corso
Piero Scotto - C14 3
Esercizio 1. Usando i programmi descritti a lezione scrivere un programma in C che calcoli la media aritmetica dei voti di uno studente, supponendo che i voti siano 9.
Piero Scotto - C14 4
/* Viene calcolata la media di 9 voti */#include <stdio.h>int main(void){float a, b, c, d, e, f, g, h, i, media; scanf("%f %f %f %f %f %f %f %f %f",&a,&b,&c,&d,&e,&f,&g,&h,&i);
media = (a + b + c + d + e + f + g + h + i)/9; printf("La media dei valori %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f e' %.2f ",a,b,c,d,e,f,g,h,i, media) ;
return 0;}
Piero Scotto - C14 5
Possiamo migliorare il programma e far sì che onlinecompiler produca un eseguibile che interagisca con l’utente.
Piero Scotto - C14 6
/* Viene calcolata la media di 9 voti */#include <stdio.h>int main(void){float a, b, c, d, e, f, g, h, i, media, pausa; printf(" Inserire separati da spazio i nove voti: ");scanf("%f %f %f %f %f %f %f %f %f",&a,&b,&c,&d,&e,&f,&g,&h,&i);
media = (a + b + c + d + e + f + g + h + i)/9; printf("La media dei valori %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f e' %.2f ",a,b,c,d,e,f,g,h,i, media) ;scanf("%f",&pausa);
return 0;} /* i commenti non ci sono per motivi di spazio */
Piero Scotto - C14 7
Piero Scotto - C14 8
Esercizio2. Scrivere un programma che calcoli l’area del trapezio. L’utente inserirà base maggiore, base minore, altezza
Piero Scotto - C14 9
/* Calcolo area del trapezio. Fornire basi e altezza */#include <stdio.h> int main(void){float B, b, h ,area, pausa ; /* variabili */printf("Calcolo dell'area del trapezio. Inserire le basi e l'altezza: ");scanf("%f %f %f", &B, &b, &h); /* chiedo i numeri da input e li assegno alle variabili */area = ( B + b ) / 2 *( h ) ; /* calcolo il valore dell'area */printf("L'area del trapezio con base maggiore %.2f cm base minore %.2f cm altezza %.2f cm e': Area= %.2f cm^2 ", B,b,h,area );printf(" Digitare 0 e invio per finire ");scanf("%f", &pausa); /* il solito trucco per vedere il risultato */return 0;}
Piero Scotto - C14 10
Come si vede il programma non è in grado di distinguere la base maggiore da quella minore.Possiamo istruirlo perché lo faccia.
Basterà confrontare i due valori e poi mettere il più grande in B (base maggiore) e il più piccolo in b (base minore).
Piero Scotto - C14 11
Variabile di scambio “swap”
Scriviamo un programma che dati due numeri passati da input, metta il maggiore in B e il minore in b. Poi stampi il risultato.Partiamo con un semplice programma che legge e stampa i numeri.#include <stdio.h> int main(void){float B, b; /* variabili */printf("Inserire i due numeri: ");scanf("%f %f",&B,&b);printf("B=%f b=%f",B,b);return 0;}
Piero Scotto - C14 12
Prima di stampare occorre confrontare B e bUserò il costrutto ifIf (b>B) { swap=b; b=B; B=swap; } Tra parentesi graffe il blocco che viene eseguito se la condizione (b>B) è vera.
Ad es. se b=6, B=2, b>B quindi la condizione dell’if è vera e avremo l’esecuzione del blocco{swap = 6; b = 2; B = 6; }
swap è la variabile temporanea (a volte è indicata come tmp) che mi serve per lo scambio.
Piero Scotto - C14 13
#include <stdio.h> int main(void){float B, b, swap; /* variabili */printf("Inserire i due numeri: ");scanf("%f %f",&B,&b);if (b>B) { swap=b; b=B; B=swap; }printf("B=%f b=%f",B,b);return 0;}
Piero Scotto - C14 14
/* Calcolo dell’area del trapezio. Fornire basi e altezza */#include <stdio.h> int main(void){float B, b, h ,area, pausa, swap ; /* variabili */printf("Calcolo dell'area del trapezio. Inserire le basi e l'altezza: ");scanf("%f %f %f", &B, &b, &h); if (b>B) { swap=b; b=B; B=swap; }area = ( B + b ) / 2 *( h ) ; /* calcolo il valore dell'area */printf("L'area del trapezio con base maggiore %.2f cm base minore %.2f cm altezza %.2f cm e': Area= %.2f cm^2 ", B,b,h,area );printf(" Digitare 0 e invio per finire ");scanf("%f", &pausa); return 0;}
Piero Scotto - C14 15
L’istruzione if else
Piero Scotto - C14 16
#include <stdio.h> int main(void){float B, b, swap; /* variabili */printf("Inserire i due numeri: ");scanf("%f %f",&B,&b);if (b>B) { swap=b; b=B; B=swap; }printf("B=%f b=%f",B,b);return 0;}
Piero Scotto - C14 17
Piero Scotto - C14 18
Se si verifica la divisione per 0 il risultato è indefinito!Occorre prevenire questo rischio.If (a==0) {printf(“Equazione non possibile”);} else
#include <stdio.h> int main(void){float a, b, x; /* variabili */printf("Programma per risolvere equazioni del tipo ax + b = 0 Inserire a e b : ");scanf("%f %f",&a,&b);if (a==0) {printf("Equazione non possibile");} else {x = -(b/a); printf("Soluzione x= %f",x);}return 0;}
Piero Scotto - C14 19
Piero Scotto - C14 20
Piero Scotto - C14 21
Esercizio 3. Scrivere un programma per risolvere equazioni del tipo ax + b = 0, cioè di primo grado.
Pensiamo di ottenere a, b da input e risolvere ricavando x.
Piero Scotto - C14 22
#include <stdio.h> int main(void){float a, b, x; /* variabili */printf("Programma per risolvere equazioni del tipo ax + b = 0 Inserire a e b : ");scanf("%f %f",&a,&b);x = -(b/a); /* soluzione dell’equazione di primo grado */printf("Soluzione x= %f",x);return 0;}
Questo programma presenta un potenziale rischio. Quale?
Piero Scotto - C14 23
Se a=0, si verifica la divisione per 0 e il risultato è indefinito!Occorre prevenire questo rischio.If (a==0) {printf(“Equazione non possibile”);} else …
#include <stdio.h> int main(void){float a, b, x; /* variabili */printf("Programma per risolvere equazioni del tipo ax + b = 0 Inserire a e b : ");scanf("%f %f",&a,&b);if (a==0) {printf("Equazione non possibile");} else {x = -(b/a); printf("Soluzione x= %f",x);}return 0;}