Tipi di dato

di il
4 risposte

Tipi di dato

Salve a tutti ragazzi, ho iniziato a studiare il linguaggio C da meno di una settimana.
Stavo facendo un esercizio che chiede:
Scrivere un programma in linguaggio C che legga da tastiera una sequenza di lunghezza ignota a priori di numeri
interi positivi. Il programma, a partire dal primo numero introdotto stampa ogni volta la media di tutti i numeri introdotti.
Terminare quando il numero inserito è negativo.

Io l'ho fatto così:

#include <stdio.h>
#include <stdlib.h>

main () {

float media, somma, i, a; 
i=0;
somma=0;
media=0;

do {
	printf("Inserisci il numero:\n");
	scanf("%f",&a);
	fflush(stdin);
	++i;
	somma=somma+a;
	media=somma/i;
	printf("la media e':%.2f\n",media);
}
while(a>0);
	
system("pause");
return 0;
}
I problemi sono 2:
1)Il testo dice di utilizzare un intero, ma quando faccio questo, il risultato media, viene un intero, quindi ho fatto di testa mia
ed ho messo un float.
2) Nel "while" la condizione è "a>0", il problema è mi riesegue il contenuto del "do" anche inserendo un valore negativo, e questo penso sia
dovuto ai tipi di dato.

Inoltre dovrei fare qualche miglioria mettendo un if all'interno del do per fare in modo che il contenuto del do venga eseguito solo se a è maggiore o uguale a 0.

Vorrei capire perchè riscontro i due problemi elencati.
Grazie a tutti in anticipo

4 Risposte

  • Re: Tipi di dato

    I valori in input possono essere interi, la media può essere float

    Il ciclo si ferma regolarmente con valori in input non positivi, il fatto è che anche l'ultimo valore viene calcolato nella media perché il controllo della while avviene dopo.

    Il calcolo della media non dovresti farlo all'interno del ciclo ma fuori, una sola volta
  • Re: Tipi di dato

    Grazie tante per la risposta.
    Ho provato a mettere int e float e non solo float, il risultato della media però mi viene sempre un int.
    Quale può essere il motivo?
  • Re: Tipi di dato

    Devi solamente usare un cast

    media=(float)somma/i;
  • Re: Tipi di dato

    Grazie mille!
Devi accedere o registrarti per scrivere nel forum
4 risposte