• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

średnia ocen - dlaczego zawsze wyświetla 0?

Cloud VPS
0 głosów
466 wizyt
pytanie zadane 11 listopada 2017 w C i C++ przez rayman22 Użytkownik (710 p.)
#include <stdio.h>

int main (void)
{
    int ile_liczb, index;
    float suma = 0;
    float srednia = suma/ile_liczb;

    puts("Podaj ile liczb");
    scanf("%d", &ile_liczb);

    for (index = 0; index < ile_liczb; ++index)
    {
        float ocena;
        puts("Wprowadz ocene:");
        scanf("%f", &ocena);

        suma = suma + ocena;
    }

    printf("Srednia to: %f", srednia);
}

dlaczego za każdym razem wyświetlana średnia = 0.00?

komentarz 11 listopada 2017 przez mokrowski Mędrzec (158,900 p.)
Prócz tego na co zwrócili uwagę Ci koledzy, zwróć jeszcze z main() 0 (zero). A jeszcze lepiej EXIT_SUCCESS z <stdlib.h>

4 odpowiedzi

0 głosów
odpowiedź 11 listopada 2017 przez rafal.budzis Szeryf (85,820 p.)
Najpierw obliczasz średnią a dopiero potem wczytujesz ilość liczb oraz liczysz sumę musisz zmienić kolejność.
0 głosów
odpowiedź 11 listopada 2017 przez chucksqll Stary wyjadacz (12,930 p.)
float srednia = suma/ile_liczb;

Kompilator wykonuje instrukcje od góry do dołu, czyli u Ciebie wylicza średnią kiedy suma zawsze będzie równa 0, a 0 przez cokolwiek (oprócz 0) daje 0. Daj ta instrukcje po tym jak policzysz sumę i wszystko będzie ok.

0 głosów
odpowiedź 11 listopada 2017 przez Marchello Początkujący (300 p.)
Tak jeszcze w ramach poprawienia, to przerzuć tworzenie zmiennej "ocena" przed pętle. Wewnątrz pętli nie powinno się tworzyć zmiennych, przynajmniej nie znam takiego przypadku.
komentarz 11 listopada 2017 przez mokrowski Mędrzec (158,900 p.)
A ja znam wiele. Zasięg zmiennej powinien być jak najmniejszy. Od tego jest kompilator by go nie wyręczać pseudo-optymalizacjami. Tu użycie zmiennej ocena w ciele pętli jest jak najbardziej ok. Taka zmienna poza pętlą jest przecież zbędna.
komentarz 11 listopada 2017 przez Marchello Początkujący (300 p.)
O widzisz, dobrze wiedzieć. Nie zdawałem sobie sprawy z tego, że kompilator zajmuje się takimi rzeczami. Chciałem pomóc, a wyszło na odwrót :D
0 głosów
odpowiedź 12 listopada 2017 przez rayman22 Użytkownik (710 p.)
edycja 12 listopada 2017 przez rayman22

Gdy umieszczam po pętli:

float srednia = suma / ile_liczb;

kompilator wypluwa błąd: ISO 90 forbis mixed declarations and code [-Wpedantic]

#include <stdio.h>

int main (void)
{
    float ocena, suma = 0;
    int ile_liczb, index;

    puts("Podaj ile liczb");
    scanf("%d", &ile_liczb);

    for (index = 0; index < ile_liczb; ++index)
    {
        puts("Wprowadz ocene:");
        scanf("%f", &ocena);
        suma = suma + ocena;
    }

    float srednia = suma / ile_liczb;
    printf("Srednia to: %f\n", srednia);

    system("pause");
    return 0;
}

 

Podobne pytania

0 głosów
6 odpowiedzi 6,424 wizyt
pytanie zadane 2 czerwca 2019 w C i C++ przez Blu3wolf Początkujący (280 p.)
0 głosów
4 odpowiedzi 4,182 wizyt
pytanie zadane 7 listopada 2017 w C i C++ przez rayman22 Użytkownik (710 p.)
0 głosów
1 odpowiedź 536 wizyt
pytanie zadane 18 lutego 2018 w Matematyka, fizyka, logika przez Wookiee Użytkownik (980 p.)

93,485 zapytań

142,417 odpowiedzi

322,764 komentarzy

62,896 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...