Srednia arytmetyczna.

0

Witam mam problem z następującym zadaniem:

"Napisz program, który pobiera liczby całkowite do momentu wpisania przez użytkownika cyfry 0. Po zakończeniu wczytywania danych wejściowych program powinien wyświetlić ilość wpisanych liczb parzystych (z wyłączeniem zera) i ich średnią wartość oraz ilość wpisanych liczb nieparzystych i ich średnią wartość"

Napisałem coś takiego:

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
int main(void)
{
	int a;
	int parzyste = 0;
	int nieparzyste = 0;
	int suma_p = 0;
	int suma_n = 0;
	float srednia_p;
	float srednia_n;

	printf("Podaj ciag liczb\n");
	while ((a = getchar()) != '0')
	{
		if ((a % 2) == 0)
		{
			suma_p = suma_p + a;
			parzyste++;
		}
		else if ((a % 2) != 0)
		{
			suma_n = suma_n + a;
			nieparzyste++;
		}
	}
	if (nieparzyste != 0)
	{
		srednia_n = (suma_n / nieparzyste);
		printf("Wpisales %d liczb nieparzystych\n", nieparzyste);
		printf("Ich srednia to %.2f\n", srednia_n);
	}
	if (parzyste != 0)
	{
		srednia_p = (suma_p / parzyste);
		printf("Wpisales %d liczb parzystych\n", parzyste);
		printf("Ich srednia to %.2f", srednia_p);
	}
	getchar();
	getchar();
	return 0;
}

Program źle wypisuje średnie wartości. Np. po wpisaniu liczb 1234567890 otrzymuje taki napis:

Wpisales 5 liczb nieparzystych
Ich srednia to 53.00
Wpisales 4 liczb nieparzystych
Ich srednia to 53.00

Zupełnie nie wiem czemu otrzymuję taki dziwny wynik.

1

Do 'a' dostajesz numer ASCII znaku wpisanego, a nie cyfrę. Tak się składa, że jak odejmiesz od 'a' 48, to będziesz mieć cyfrę jaka została wpisana, bo 0 to 48, 1 - 49, 2 - 50 ... 9 - 57.
Przed sprawdzeniem zrób a -= 48 i gra gitara.

1

Ja myślę, że program jest całkowicie błędny. Wczytuje pojedyncze znaki, tzn. liczby jednocyfrowe, a ma wczytywać liczby całkowite.
Nie wiem czy treść zadania została poprawnie zacytowana:

do momentu wpisania przez użytkownika cyfry 0

Dalszy część zadania sugeruje, że powinno być do momentu wpisania przez użytkownika liczby 0.

1

Zamień: while ((a = getchar()) != '0')na while(scanf("%d",&a)!=0)

0

Dzięki panowie, faktycznie program został źle napisany. Teraz jest ok i raczej działa dobrze:

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
int main(void)
{
	int a;
	int parzyste = 0;
	int nieparzyste = 0;
	int suma_p = 0;
	int suma_n = 0;
	float srednia_p;
	float srednia_n;

	printf("Podaj liczbe\n");
	while ((scanf("%d", &a) == 1) && (a != 0))
	{
		if ((a % 2) == 0)
		{
			suma_p = suma_p + a;
			parzyste++;
		}
		else if ((a % 2) != 0)
		{
			suma_n = suma_n + a;
			nieparzyste++;
		}
	printf("Podaj liczbe\n");
	}
	if (nieparzyste != 0)
	{
		srednia_n = (suma_n / nieparzyste);
		printf("Wpisales %d liczb nieparzystych\n", nieparzyste);
		printf("Ich srednia to %.2f\n", srednia_n);
	}
	if (parzyste != 0)
	{
		srednia_p = (suma_p / parzyste);
		printf("Wpisales %d liczb parzystych\n", parzyste);
		printf("Ich srednia to %.2f", srednia_p);
	}
	getchar();
	getchar();
	getchar();
	return 0;
}
0
        getchar();
        getchar();
        getchar();

A to to co za trójchwytne widły? o_O

1 użytkowników online, w tym zalogowanych: 0, gości: 1