Pobranie n liczb zmiennoprzecinkowych

0
2.4. napisał(a)

Napisz program, który pobierze od użytkownika liczbę naturalna n, następnie pobierze n liczb zmiennoprzecinkowych i wyświetli wartość ich średniej arytmetycznej.

Jak to zrobić, żeby program wiedział, ile liczb zmiennoprzecinkowych ma pobrać? Bo chyba dałoby radę na ifach zrobić, ale to dużo rozpisywania, np.

if (x==5) { float a,b,c,d,e; scanf ("%f %f %f %f %f", &a, &b, &c, &d, &e);

itd. itd.

dodanie znacznika <code class="c"> - @furious programming

1

Możesz np. użyć pętli.

0

Pętla to wiem, tylko na jakiej zasadzie?

0

Na zasadzie: jedną liczbę na każdym kroku pętli

0

Masz pobrać n elementów, więc musisz w jakiś sposób doprowadzić do tego, żeby ciało pętli zostało wykonane n razy, za każdym razem pobierając jedną liczbę.

0
#include <stdio.h>

int main()
{
	printf ("Podaj liczbe naturalna n:\n");
	int n,i=0;
	scanf ("%d", &n);
 
 
	while (i==n) {
		float a;
		scanf ("%f", &a);
		i++;
	}
 
	return 0;
}

http://ideone.com/8T3C0r - takie coś, po wprowadzeniu pierwszej wartości, czyli teoretycznie "n", program kończy pracę nic nie wyświetlając.

dodanie kodu do posta - @furious programming

0

Nic dziwnego. Pętla będzie wykonywana dopóki i==n, czyli, jeśli do n przypiszesz np. 4, to będzie to dopóki 0 == 4, czyli nigdy.

0
while (i<n) {

Teraz niby działa. Tak jest dobrze? Bo jak dałem <= to pobierało o jedną za dużo.

1

Jak masz miec "zakres" to najprostszym rozwiązaniem wydaje się pętla for.

For(int i=0;i<n;i++)

dodanie znacznika <code class="c"> - @furious programming

0

"i wyświetli wartość ich średniej arytmetycznej."

Jak to zapisać, żeby program wyliczył tą średnią? Na pewno, trzeba podzielić przez n, ale co powinno być w dodawaniu nad kreską ułamkową?

0

Zapewne suma elementów, których średnią liczysz.

0

Teorie znam, tylko jak to zapisać. Bo mam

scanf ("%f", &a);

to teoretycznie ciągle a wprowadzam, przynajmniej tak mi się wydaje...

0

No to może wypadałoby trzymać sumę w osobnej zmiennej i dodawać do niej a za każdym razem ;)

0

No chyba suma liczb, które wprowadzileś :) W każdym kroku petli sume zwiększasz o aktualną liczbe

0

http://ideone.com/UuNmEK - coś takiego naskrobałem i nawet liczy ;)

0

Może i liczy, ale zapomniałeś zainicjalizować sumę i masz UB.
http://ideone.com/2N88Tp

0

Tzn? Jakie UB? :) I jak nie zainicjowałem sumy?

0

Takie UB, że odczytujesz niezainicjalizowaną zmienną. A gdzie sumę zainicjalizowałeś? Jaką wartość ma w pierwszym przebiegu pętli?

No, chyba że Twoim zdaniem średnia arytmetyczna pięciu piątek to 4.606809. Wtedy wszystko gra.

0

http://ideone.com/Ukh0Mw - poprawione. Teraz jest, jak trzeba?

0

Dzięki, taką naukę to ja rozumiem ;) Na ćwiczeniach to w życiu bym się tego nie nauczył z takim prowadzącym...

0

Prowadzącego też musisz odpytywać, powinno być tak:

#include <stdio.h>

int main()
  {
   unsigned count,i;
   float value,sum;
   printf ("Ile masz liczb do usrednienia: ");
   scanf("%u",&count);
   for(sum=i=0;i<count;++i)
     {
      scanf("%f",&value);
      sum+=value;
     }
   printf("Srednia arytmetyczna tych liczb wynosi %f",sum/count);
   return 0;
  }

Z tym że znacznie wygodniejsze w użyciu/testowaniu jest to:

#include <stdio.h>

int main()
  {
   unsigned count;
   float value,sum;
   for(;;)
     {
      printf ("Podawaj liczby do usrednienia po ostatniej podaj wykrzyknik\n");
      for(sum=count=0;scanf("%f",&value)==1;++count) sum+=value;
      if(!count) break;
      printf("Srednia arytmetyczna tych liczb wynosi %f\n\n",sum/count);
      while(getchar()!='\n') {}
     }
   return 0;
  }

Ba nawet jest krótsze.

0

Hah, ten co mam z nim zajęcia, to lepiej się nawet do niego nie odzywać -.-'

Dzięki Dragon, przeanalizuję sobie Twoje programy ;)

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