C14 #3
Soluzioni e commenti
esercizi 1 e 2
Piero Scotto - C14
1
Finalità del corso
Finalità del corso
Finalità del corso
Finalità del corso
Finalità del corso
Piero Scotto - C14
2
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
3
/* 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
4
Possiamo migliorare il programma e
far sì che onlinecompiler produca un
eseguibile che interagisca con
l’utente.
Piero Scotto - C14
5
/* 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
6
Piero Scotto - C14
7
Esercizio2. Scrivere un programma
che calcoli l’area del trapezio.
L’utente inserirà base maggiore,
base minore, altezza
Piero Scotto - C14
8
/* 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
9
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
10
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
11
Prima di stampare occorre confrontare B e b
Userò il costrutto if
If (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
12
#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
13
/* 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
14
L’istruzione if else
Piero Scotto - C14
15
#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
16
Piero Scotto - C14
17
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
18
Piero Scotto - C14
19
Piero Scotto - C14
20
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
21
#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
22
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;
}
Piero Scotto - C14
23
Scarica

Presentazione ppt