Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
Vorwort des Gutachters
1 Einstieg in C
2 Das erste Programm
3 Grundlagen
4 Formatierte Ein-/Ausgabe mit »scanf()« und »printf()«
5 Basisdatentypen
6 Operatoren
7 Typumwandlung
8 Kontrollstrukturen
9 Funktionen
10 Präprozessor-Direktiven
11 Arrays
12 Zeiger (Pointer)
13 Kommandozeilenargumente
14 Dynamische Speicherverwaltung
15 Strukturen
16 Ein-/Ausgabe-Funktionen
17 Attribute von Dateien und das Arbeiten mit Verzeichnissen (nicht ANSI C)
18 Arbeiten mit variabel langen Argumentlisten – <stdarg.h>
19 Zeitroutinen
20 Weitere Headerdateien und ihre Funktionen (ANSI C)
21 Dynamische Datenstrukturen
22 Algorithmen
23 CGI mit C
24 MySQL und C
25 Netzwerkprogrammierung und Cross–Plattform-Entwicklung
26 Paralleles Rechnen
27 Sicheres Programmieren
28 Wie geht’s jetzt weiter?
A Operatoren
B Die C-Standard-Bibliothek
Stichwort

Buch bestellen
Ihre Meinung?

Spacer
<< zurück
C von A bis Z von Jürgen Wolf
Das umfassende Handbuch
Buch: C von A bis Z

C von A bis Z
3., aktualisierte und erweiterte Auflage, geb., mit CD und Referenzkarte
1.190 S., 39,90 Euro
Rheinwerk Computing
ISBN 978-3-8362-1411-7
Pfeil 11 Arrays
Pfeil 11.1 Arrays deklarieren
Pfeil 11.2 Initialisierung und Zugriff auf Arrays
Pfeil 11.2.1 Gültigkeitsbereich von Arrays
Pfeil 11.3 Arrays vergleichen
Pfeil 11.4 Anzahl der Elemente eines Arrays ermitteln
Pfeil 11.5 Übergabe von Arrays an Funktionen
Pfeil 11.6 Arrays aus Funktionen zurückgeben
Pfeil 11.7 Programmbeispiel zu den Arrays
Pfeil 11.8 Einlesen von Array-Werten
Pfeil 11.9 Mehrdimensionale Arrays
Pfeil 11.9.1 Mehrdimensionale Arrays initialisieren
Pfeil 11.9.2 Übergabe von zwei- bzw. mehrdimensionalen Arrays an Funktionen
Pfeil 11.10 Arrays in Tabellenkalkulation einlesen (*.CSV–Dateien)
Pfeil 11.11 Strings/Zeichenketten (»char«-Array)
Pfeil 11.11.1 Vom String zur Binärzahl
Pfeil 11.12 Einlesen von Strings
Pfeil 11.13 Die Standard-Bibliothek <string.h>
Pfeil 11.13.1 »strcat()« – Strings aneinanderhängen
Pfeil 11.13.2 »strchr()« – ein Zeichen im String suchen
Pfeil 11.13.3 »strcmp()« – Strings vergleichen
Pfeil 11.13.4 »strcpy()« – einen String kopieren
Pfeil 11.13.5 »strcspn()« – einen Teilstring ermitteln
Pfeil 11.13.6 »strlen()« – Länge eines Strings ermitteln
Pfeil 11.13.7 »strncat()« – String mit n Zeichen aneinanderhängen
Pfeil 11.13.8 »strncmp()« – n Zeichen von zwei Strings miteinander vergleichen
Pfeil 11.13.9 »strncpy()« – String mit n Zeichen kopieren
Pfeil 11.13.10 »strpbrk()« – nach dem Auftreten bestimmter Zeichen suchen
Pfeil 11.13.11 »strrchr()« – das letzte Auftreten eines bestimmten Zeichens im String suchen
Pfeil 11.13.12 »strspn()« – das erste Auftreten eines Zeichens, das nicht vorkommt
Pfeil 11.13.13 »strstr()« – einen String nach dem Auftreten eines Teilstrings durchsuchen
Pfeil 11.13.14 »strtok()« – einen String anhand bestimmter Zeichen zerlegen


Rheinwerk Computing - Zum Seitenanfang

11.7 Programmbeispiel zu den Arrays topZur vorigen Überschrift

Das folgende, etwas umfangreichere Beispiel zeigt, welche Möglichkeiten die Verwendung von Arrays bietet. Das Beispielprogramm wertet eine Statistik für zwei Fußballmannschaften aus, und zwar das Tore- und Punkteverhältnis der letzten fünf Spiele, die beide Mannschaften gegeneinander gespielt haben:

/* array13.c */
#include <stdio.h>
#include <stdlib.h>

/* Bilanz aus 5 Spielen */
#define SPIELE 5
#define WIN    3
#define LOSE   0
#define REMIS  1

/* Alle Elemente mit 0 initialisieren */
int Bayern[SPIELE]  = { 0 };
int Borussia[SPIELE]= { 0 };

/* Funktion zum Zählen der Punkte */
void punkte(int bm[], int bd[], int count) {
   if(bm[count] > bd[count]) {

      bm[count] = WIN;  /* 3 Punkte für Bayern */
      bd[count] = LOSE;
   }
   else if(bm[count] < bd[count]) {
      bm[count] = LOSE;
      bd[count] = WIN;  /* 3 Punkte für Borussia */
   }
   else if(bm[count] == bd[count]) {
      bm[count] = REMIS; /* 1 Punkt für jeden - unentschieden */
      bd[count] = REMIS;
   }
}

int main(void) {
   unsigned int tor1, tor2;
   unsigned int tmptor1 = 0, tmptor2 = 0;
   unsigned int punkte_bay = 0, punkte_bor = 0;
   unsigned int count=0;        /* Indexzaehler */

   /* Eingabe des Anwenders */
   printf("Eingabe der letzten %d Spiele\n", SPIELE);

   while(count != SPIELE) {
         printf("%d. Spiel : Bayern - Borrusia\n", count+1);
         printf("Tor(e) Bayern   : ");
         scanf("%2u", &tor1);
         Bayern[count] = tor1;
         printf("Tor(e) Borussia : ");
         scanf("%2u", &tor2);
         Borussia[count] = tor2;

         tmptor1 += tor1;         /*Tore zaehlen Bayern*/
         tmptor2 += tor2;         /*Tore zaehlen Borussia*/
         /* Werte an Funktion punkte() uebergeben */
         punkte(Bayern, Borussia, count);

         /* Punkte zaehlen */
         punkte_bay += Bayern[count];
         punkte_bor += Borussia[count];
         /* Nächstes Spiel */
         count++;
   }
   /* Ausgabe der Statistik */
   printf("\n\nStatistik der letzten %d Spiele\n\n", SPIELE);

   printf("Bayern - Borussia\n");
   printf("Punkte : %2d : %2d\n", punkte_bay, punkte_bor);
   printf("Tore   : %2d : %2d\n", tmptor1, tmptor2);
   return EXIT_SUCCESS;
}

Die Bildschirmausgabe des Programms könnte (abhängig von den Eingabewerten) z. B. so aussehen wie in Abbildung 11.5.

Abbildung 11.5 Ausgabe des Programmbeispiels

Das Programm soll nun Schritt für Schritt erläutert werden.

int Bayern[SPIELE]  = { 0 };
int Borussia[SPIELE]= { 0 };

Hier wird jeweils ein Array mit dem Wert 0 initialisiert. Sehr wichtig im Programm ist folgende Variable:

unsigned int count = 0;

Mit ihr wird die Anzahl der gespielten Spiele gezählt.

In der while-Schleife der Hauptfunktion werden Sie aufgefordert, das Endergebnis jedes einzelnen Spiels einzugeben. Der Wert wird an die Arrays mittels

Bayern[count] = tor1;
...
Borussia[count] = tor2;

übergeben. War das erste Ergebnis beispielsweise 2:1 für Bayern, dann bekommen die Elemente mit dem Index 0 folgende Werte:

Bayern[0] = 2;
...
Borussia[0] = 1;

Diese beiden Werte werden danach mit der Anzahl absolvierter Spiele an die Funktion void punkte(...) übergeben:

punkte(Bayern, Borussia, count);

Tatsächlich werden hier die Anfangsadressen der Arrays an die Funktion punkte() übergeben. Dort wird mit if else-Anweisungen überprüft, welcher der beiden Werte höher ist. Dabei ist das aktuelle Ergebnis von Interesse, das mit dem Index [count] angegeben ist. Im konkreten Beispiel (2:1) wäre folgende Bedingung wahr:

if(bm[count] > bd[count]) {
      bm[count] = WIN;   /* 3 Punkte für Bayern */
      bd[count] = LOSE;
   }

Somit werden den Elementen der Arrays folgende Werte zugewiesen:

bm[0] = 3    /* Punkte für Bayern */
bd[0] = 0    /* Punkte für Borussia */

Wenn Borussia siegen sollte, überprüft die Funktion punkte() die nächste Bedingung. Die letzte else-if-Anweisung steht für ein Unentschieden beider Mannschaften, und jeder bekommt einen Punkt. Danach fährt das Programm mit der while-Schleife der Hauptfunktion fort. Dort wird mit

count++;

der Indexzähler um 1 erhöht, und es kommt die nächste Abfrage der Werte für:

Bayern[1]=... und Borussia[1]=...

Es werden so lange Werte eingegeben, bis

while(count != SPIELE)

unwahrheitsgemäß abbricht. Das ist der Fall, sobald count == SPIELE wird, also 5 Spiele gespielt wurden. Anschließend wird die Gesamtpunktzahl von jedem Team auf dem Bildschirm ausgegeben. Zur Vergabe von Punkten wurden hier symbolische Konstanten verwendet, falls sich im Reglement wieder einmal etwas in der Punktevergabe ändert.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen. >> Zum Feedback-Formular
<< zurück
  
  Zum Katalog
Zum Katalog: C von A bis Z

 C von A bis Z
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: C/C++






 C/C++


Zum Katalog: Einstieg in C






 Einstieg in C


Zum Katalog: Schrödinger programmiert C++






 Schrödinger
 programmiert C++


Zum Katalog: C++ Handbuch






 C++ Handbuch


Zum Katalog: IT-Handbuch für Fachinformatiker






 IT-Handbuch für
 Fachinformatiker


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Rheinwerk Verlag GmbH 2009
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de