Mittelwertberechnung mit beliebiger Anzahl Zahlen
-
Hallo!
Ich hab wiedermal einen kleinen Fehler im Programm, den ich einfach nicht finde!
Das Programm soll den Benutzer nach einer Anzahl von Zahlen, die er dann eingeben muss, fragen.
Aus diesen Zahlen soll dann der Mittelwert berechnet werden.Das Programm funktioniert soweit ohne Probleme, nur gibt er mir die Nachkommastellen, trotz float-return-wert der Funktion avg() (welche den Mittelwert berechnet) zwar aus, aber die Nachkommastellen sind immer 0.
Wenn er also eigentlich 3.66 ausgeben müsste, gibt er 3.00 aus.Ich find den Fehler einfach nicht!
Außerdem:
Teil B der Aufgabe lautet: Man soll die Länge des Arrays, welches die eingegebenen Werte beinhaltet, nicht über eine Variable festlegen, sondern über eine Konstante.
Ich hab allerdings keinen Schimmer, wie ich ein Array mit konstanter Länge anlegen soll, dass dann aber doch abhängig von der Benutzereingabe ist...#include <stdio.h> void ArrayEinlesen (int array[], int n_Anzahl) { int i; for (i = 0; i < n_Anzahl; i++) { printf("Zahl %d: ",i+1 /* Damit er nicht bei 0 beginnt */ ); scanf(" %d",&array[i]); } return; } float avg (int array[], int n_Anzahl) { int i; int summe = 0; int AnzahlElemente = 0; for (i = 0; i < n_Anzahl ; i++) { summe = summe + array[i]; AnzahlElemente++; } return summe/AnzahlElemente; /* Anzahl der Elemente des Array kann auch folgendermaßen ermittelt werden: sizeof(array) / sizeof(DATENTYP DES ARRAYS) = Anzahl der Elemente */ } int main (int argc, char *argv[]) { //beseitigt einige Probleme mit Ausgabe, Debugging etc. setbuf(stdout, NULL); int MAX; int array[MAX]; printf("M I T T E L W E R T B E R E C H N U N G\n\n"); printf("Bitte geben Sie die Anzahl der einzugebenden Zahlen ein: \n"); printf("Anzahl: "); scanf("%d",&MAX); printf("\n\nBitte geben Sie nun ganze Zahlen ein:\n"); ArrayEinlesen(array,MAX); printf("\n\n Der Mittelwert ist: %.2f",avg(array,MAX)); return 0; }
-
Du dividierst zwei Integer durcheinander. Richtig gehts irgendwie so:
return (float)(summe)/AnzahlElemente;
Oder so ähnlich.
-
Es wäre ohnehin besser, statt int lieber double-Werte im Array zu verwenden, die Gefahr eines Überlaufs ist dabei geringer. Und ein Cast wäre auch nicht mehr nötig.
-
Das mitzählen von AnzahlElemente ist überflüssig, da der Wert schon in n_Anzahl steht.
Mit
sizeof(array) / sizeof(*array)
bekommst du Anzahl der Element allerdings nur in dem Scope, in dem das Array definiert ist.
Kommt das Array als Parameter einer Funktion, klappt das nicht mehr.Du kannst Arrays nicht nachträglich in der Größe ändern.
int MAX; // Welchen Wert hat hier MAX ? int array[MAX]; // Und wie groß wird dann das Array?
Zu B: Du musst ja nicht alles vom Array nutzen.