Das beste Ergebnis
Wer war in diesem Halbjahr am besten? Du weißt aus der Lektion über Arrays, wie du den größten Wert findest: das erste Element merken und in einer Schleife prüfen, ob eines der anderen größer ist. Diesmal vergleichst du die Durchschnitte der Schüler, und du willst wissen, wer es ist, nicht nur den höchsten Durchschnitt. Die Funktion merkt sich also den ganzen Schüler und gibt ihn zurück: Eine Funktion kann eine Struktur zurückgeben, genau wie eine Zahl. Zum Beispiel den weitesten Sprung bei einem Wettkampf:
#include <stdio.h>
typedef struct {
char name[20];
int weite;
} Sportler;
Sportler weitester_sprung(const Sportler teilnehmer[], int anzahl) {
Sportler bester = teilnehmer[0];
for (int i = 1; i < anzahl; i++) {
if (teilnehmer[i].weite > bester.weite) {
bester = teilnehmer[i];
}
}
return bester;
}
int main(void) {
Sportler teilnehmer[] = {
{"Lisa", 412},
{"Ben", 455},
{"Clara", 430},
};
Sportler sieger = weitester_sprung(teilnehmer, 3);
printf("Weitester Sprung: %s, %d cm\n", sieger.name, sieger.weite);
return 0;
}Weitester Sprung: Ben, 455 cmDie Variable bester beginnt mit dem ersten Sportler, die Schleife kann also beim Index 1 beginnen. Der Vergleich mit > (nicht >=) führt dazu, dass bei einem Gleichstand gewinnt, wer im Array zuerst kommt.
Beachte bester = teilnehmer[i];. Ein Array lässt sich nicht mit = zuweisen, eine Struktur aber schon: Alle ihre Member werden kopiert, auch ein Array darin. bester enthält also eine Kopie des Sportlers, und die Funktion gibt diese Kopie zurück. Um den Namen und den Sprung zu lesen, reicht das.
Vergleiche in deiner Funktion die Durchschnitte: durchschnitt(klasse[i]) > durchschnitt(bester). Speichere das Ergebnis in ergebnisse_ausgeben() in einer Variablen, zum Beispiel Schueler bester = bester_schueler(klasse, anzahl);, und gib seinen Namen und Durchschnitt aus: bester.name und durchschnitt(bester).
So schreibst du es:
Anweisungen
- 1
Schreibe unter
note()(überergebnisse_ausgeben()) eine FunktionSchueler bester_schueler(const Schueler klasse[], int anzahl), die den Schüler mit dem höchsten Durchschnitt zurückgibt. - 2
Gib am Ende von
ergebnisse_ausgeben(), nach der Schleife (nicht in ihr), den Namen und den Durchschnitt des besten Schülers aus:Bestes Ergebnis: Finn (Durchschnitt 48.3)Wenn stattdessen Jonas erscheint, ist dein Vergleich falsch herum.