Program w C nie działa prawidłowo

0

Witam,
Może mi ktoś pomóc, gdyż napisałem program wczytujący ciąg liczb(0 ma kończyć wczytywanie) i wyświetlający wartosć największa, najmniejszą i średnią. Wszystko działa dobrze oprócz wartości najmniejszej gdyż cały czas wyświetla się 0. Jak można to poprawić ?

#include<stdio.h>

int main()
{
    int liczba;
    int suma=0;
    int ilosc=0;
    int max=0;
    int min=0;
    printf("0 konczy program\n");
    while(liczba !=0)
    {
        printf("Podaj liczbe:");
        scanf("%d",&liczba);
        if (liczba==0) break;
        suma=suma+liczba;
        ilosc=ilosc+1;
        if(liczba>=max) max=liczba; else if(liczba<=min) min=liczba;
    }
    float srednia;
    srednia=suma/(float)ilosc;
    printf("Srednia arytmetyczna wynosi %f\n",srednia);
    printf("Suma podanych liczb wynosi %d\n",suma);
    printf("Ilosc podanych liczb wynosi %d\n",ilosc);
    printf("Najwieksza wartosc liczbowa w ciagu to %d\n",max);
    printf("Najmniejsza wartosc ciagu to %d ",min);
    return 0;
}
0

Już tutaj dziś ktoś taki był pewnie z tego samego roku co Ty :)

Wykorzystaj coś z tego:

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

int main()
{
    unsigned max = 0, min = 0, number = 0, count = 0;
    double avg = 0;
    do
    {
        scanf("%u", &number);
        if(!count) min = number;

        max = (number > max) ? number : max;
        min = (number < min && number > 0) ? number : min;
        avg += number;
        ++count;
    }
    while(number != 0);
    printf("Max: %u\nMin: %u\nAvg: %f\n", max, min, avg / (count - 1));
    return 0;
}
0

a nie da rady przeprawić jakoś tamtego tekstu, bo aż tak trudnego zapisu jeszcze nie przerabialiśmy ?

0

aż tak trudnego zapisu jeszcze nie przerabialiśmy

Zakładam, że chodzi ci o operator warunkowy ?:.

https://msdn.microsoft.com/pl-pl/library/e4213hs1.aspx

0

Ale Ty masz w kodzie nieprawidłowość:

  • w pętli while polegasz na niezainicjalizowanej wartości. Ja wiem, że pewnie rzadko będzie ona zerowa ale tak się nie robi. Lepsza będzie pętla do...while i ustawienie zmiennej na zero;

poza tym popatrz (poprzedni przykład był tylko dla liczb nieujemnych i większych od zera):

#include <stdio.h>

int main()
{
    // Ustawienie wartości domyślnych
    int max = 0, min = 0, number = 0, count = 0;
    double avg = 0;
    do
    {
        // Wczytanie liczby
        scanf("%d", &number);
        if(number != 0)
        {
            // Zainicjalizowanie wartości domyślnych pierwszą wszytaną liczbą.
            if(!count){ min = max = number; }

            // Jeżeli liczba jest większa od max (czyli od zera przy pierwszej iteracji) to znaczy, że jest automatycznie maksimum
            // i tak z całą resztą, aż user nie wpisze zera kończącego pętlę.
            max = (number > max) ? number : max;
            min = (number < min) ? number : min;

            // to samo co avg = avg + number;
            avg += number;
            ++count;
        }
    }
    while(number != 0);

    // count -1 dlatego, że należy pominąć zero, które zostało wpisane żeby zakończyć pętlę.
    printf("Max: %d\nMin: %d\nAvg: %f\n", max, min, avg / (count - 1));
    return 0;
}
0

Ok, już rozumiem. Dziękuję ;)

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