Glückwunsch!
Glückwunsch, dein Programm funktioniert, und du hast das Ende des C-Kurses erreicht! Es gibt eine Tabelle mit den Punkten, dem Durchschnitt und der Note jedes Schülers aus, findet das beste Ergebnis, vergibt den Bonus für die Hilfe beim Wettbewerb und korrigiert Punkte anhand des Namens. Und das alles hast du selbst geschrieben.
Eine letzte Verbesserung. Die Lehrerin möchte auch wissen, wie die ganze Klasse abgeschnitten hat: den Klassendurchschnitt. Das ist wieder das Summenmuster: eine Variable, die bei 0 beginnt, und eine Schleife, die den durchschnitt() jedes Schülers zu ihr addiert. Dann teilst du die Summe durch anzahl. Danach siehst du, dass dein Programm für jede Klasse funktioniert: Eine neue Schülerin kommt dazu, und du musst sie nur zum Array hinzufügen.
Was du gelernt hast. Sieh dir an, wie jeder Teil des Kurses in deinem Programm seinen Platz gefunden hat:
printfund seine Formate geben die Tabelle aus:%sfür die Namen,%4dfür die Punkte,%6.1ffür die Durchschnitte und%dfür die Noten. Die Breiten richten die Spalten aus.- Variablen und Typen enthalten die Summen und die Durchschnitte. Die Durchschnitte haben Nachkommastellen, weil du in einer
double-Variablen addiert hast. - Bedingungen entscheiden über die Note (
else ifin der richtigen Reihenfolge), halten jeden Test bei höchstens 50 Punkten und prüfen, ob ein Schüler gefunden wurde. - Schleifen gehen die Schüler und ihre Punkte durch (eine Schleife in einer Schleife), addieren, finden den besten Schüler und suchen einen Schüler anhand des Namens.
- Arrays enthalten die Schüler und die Punkte jedes einzelnen.
sizeofberechnet, wie viele Schüler es sind. - Zeichenketten sind die Namen der Schüler:
char-Arrays, die mit'\0'enden, die du mit%sausgibst und mitstrcmpvergleichst. - Funktionen teilen das Programm in Teile mit klaren Aufgaben:
durchschnitt(),note()undbester_schueler()berechnen ein Ergebnis und geben es zurück,bonus_geben()undpunkte_korrigieren()ändern die Daten,finde_schueler()sucht undergebnisse_ausgeben()gibt aus. - Zeiger lassen
bonus_geben()den Schüler direkt im Array ändern (&klasse[2]), undfinde_schueler()gibt die Adresse des gefundenen Schülers zurück oderNULL. Arrays gehen als Adresse ihres ersten Elements an Funktionen, ohne Kopie, undconstsagt, dass die Funktion sie nur liest. - Strukturen halten zusammen, was zusammengehört: einen Namen und drei Ergebnisse. Auf die Member greifst du mit einem Punkt zu, über einen Zeiger mit dem Pfeil
->. Ein Strukturparameter ist eine Kopie, und eine Funktion kann auch eine Struktur zurückgeben. - Und wenn etwas nicht funktionierte, haben dir die Fehlermeldungen des Compilers gesagt, was falsch war und in welcher Zeile. Es lohnt sich immer, zuerst die erste zu beheben.
C auf deinem eigenen Computer. Hier hat dein Browser die Programme übersetzt und ausgeführt. Auf deinem eigenen Computer hast du mehrere Möglichkeiten:
- Ein Online-Compiler braucht keine Installation. Wähle zum Beispiel auf onlinegdb.com C als Sprache, füge dein Programm ein und führe es mit dem Button Run aus. Eingaben von der Tastatur funktionieren dort auch.
- Windows: Installiere Code::Blocks, das kostenlos ist. Lade den Installer mit
mingwim Namen herunter: Er enthält auch den GCC-Compiler. Lege dann ein neues Projekt an (File, New, Project, Console application), wähle C als Sprache, ersetze den Beispielcode durch dein Programm und führe es mitF9(Build and run) aus. - macOS: Installiere im Terminal die Werkzeuge mit dem Befehl
xcode-select --install. Speichere dein Programm alsmain.c, wechsle im Terminal mitcdin seinen Ordner und übersetze es:clang -Wall main.c -o main. Das erzeugt ein Programm namensmain, das du mit./mainausführst. - Linux: Installiere den GCC-Compiler, zum Beispiel unter Ubuntu mit
sudo apt install gcc. Übersetze dein Programm dann mitgcc -Wall main.c -o mainund führe es mit./mainaus.
Der Teil -o main bestimmt, wie das fertige Programm heißen soll, und -Wall schaltet Warnungen ein. Lies sie! Hier hat die Website die gefährlichsten als Fehler behandelt, aber auf deinem Computer sind viele nur Warnungen, und das Programm wird trotzdem erzeugt. Ein Programm mit so einem Fehler kann dann Unsinn ausgeben oder abstürzen, zum Beispiel mit der Meldung Segmentation fault. Übersetze den Code nach jeder Änderung neu, sonst führst du die alte Version aus. Hier auf der Website hat das der Button Ausführen für dich erledigt.
Wie es weitergeht. Du kennst jetzt die Grundlagen, aus denen jedes C-Programm gebaut ist. Hier sind ein paar Ideen, was du als Nächstes lernen kannst:
- Eingaben des Benutzers. Auf deinem Computer funktioniert
scanf:scanf("%d", &punkte);wartet, bis der Benutzer eine Zahl tippt und die Eingabetaste drückt, und speichert sie in der Variablen. Beachte das&:scanfbekommt die Adresse der Variablen, damit es sie ändern kann, genau wiebonus_geben(). (Hier im Browser gibt es niemanden, der tippt, deshalb haben die Programme ihre Daten aus Variablen bekommen.) Die Lehrerin könnte die Punkte dann selbst eintippen. - Dateien. Mit
fopen,fprintfundfcloseausstdio.hkann ein Programm die Ergebnisse in einer Datei speichern und beim nächsten Mal wieder einlesen, damit sie nicht verschwinden, wenn das Programm endet. - Speicher. Die Größe des Arrays
klassesteht fest, wenn du das Programm schreibst. Mitmallocundfreeausstdlib.hfragt ein Programm zur Laufzeit nach Speicher, zum Beispiel für so viele Schüler, wie in einer Datei stehen. Dort sind Zeiger am nützlichsten. - C++. C++ baut auf C auf: Fast alles, was du kennst, funktioniert dort auch, und es kommen Zeichenketten dazu, die von selbst wachsen (
std::string), Vektoren, Klassen und vieles mehr. Auf dieser Website gibt es auch einen C++-Kurs. - Eigene Projekte und Wettbewerbe. Ein Zahlenratespiel, ein Quiz, Tic-Tac-Toe in einem 2D-Array. Am meisten lernst du, wenn du deine eigenen Probleme löst. C und C++ werden auch zum Programmieren kleiner Geräte wie Arduino-Boards verwendet, und sie sind bei Programmierwettbewerben sehr beliebt, zum Beispiel bei den Informatik-Olympiaden, die viele Länder für Schüler weiterführender Schulen veranstalten.
Und wenn du eine andere Sprache ausprobieren möchtest, warten die Kurse C++, Python und JavaScript auf dich.
So schreibst du es:
Anweisungen
- 1
Gib am Ende von
ergebnisse_ausgeben()unter der Zeile mit dem besten Ergebnis den Klassendurchschnitt aus: Addiere in einer Schleife die Durchschnitte aller Schüler und teile die Summe durchanzahl. Unsere Klasse hat:Klassendurchschnitt: 37.3 - 2
Eine neue Schülerin, Mia, ist in die Klasse gekommen. Füge sie am Ende des Arrays
klassehinzu:{"Mia", {40, 44, 47}},. Sonst musst du nichts ändern:anzahlwird mitsizeofberechnet, und die Funktionen funktionieren für beliebig viele Schüler. Die Ergebnisse enden so:Lena 35 40 41 38.7 2 Mia 40 44 47 43.7 2 Bestes Ergebnis: Finn (Durchschnitt 50.0) Klassendurchschnitt: 38.4Wenn der Klassendurchschnitt
46.1ist, teilst du durch eine 5, die direkt im Code steht, statt durchanzahl. Und füge Mia am Ende hinzu: Am Anfang würde sie die Indizes der anderen Schüler verschieben, und der Bonus ginge an Emma und Finn statt an Finn und Jonas.