Zurück zur Startseite der Übungen
Nachstehend finden Sie einige ergänzende Übungen zum Themenbereich Arrays, bei denen auch Lösungen bzw. Lösungshinweise gegeben werden, die durch Aufklappen der entsprechenden Untersektion eingesehen werden können.
Viel Spaß und Erfolg beim Üben!
Übung A-1: Ein- und Ausgabe eines Arrays von int-Werten
Deklarieren und definieren Sie bitte ein int-Array der Größe 5. Lassen Sie die Werte mit Hilfe einer (for-)Schleife (Iteration) von Tastatur in das Array einlesen (mit scanf()) und anschließend mittels einer entsprechenden Schleife wieder auf die Konsole ausgeben.
Lösungshinweise / Lösungsvorschlag hierzu (Zum Öffnen und später wieder Schließen auf diese Zeile klicken.)
Nachstehend finden Sie ein vollständiges kleines Programm zu dieser Aufgabenstellung.
/* Elementare Ein- und Ausgabe eines int-Arrays */ #include <stdio.h> #include <stdlib.h> int main() { int a[5]; int i; for (i=0; i<5; i++) { printf("Bitte den Wert zum Index %d eingeben: ",i); scanf("%d",&a[i]); } for (i=0; i<5; i++) { printf("a[%d] = %d\n",i,a[i]); } return EXIT_SUCCESS; }
Übung A-2: float-Arrays
Was ist bei dem Programm der vorhergehenden Aufgabenstellung zu ändern, wenn
wir nun mit einem Array von 10 float-Werten arbeiten wollen?
Schreiben Sie bitte das entsprechende Programm (Ein- und Ausgabe der 10 float-Werte).
Lösungshinweise / Lösungsvorschlag hierzu
Anzupassen sind die Array-Dimensionierung (10 statt 5) und die Anpassung von int auf float, die
auch bei den Formatierungen in printf() und scanf() zu berücksichtigen ist.
Wollen Sie den vollständigen Programm-Code wirklich sehen? Dann klappen Sie ihn gerne auf...
/* Elementare Ein- und Ausgabe eines float-Arrays */
#include <stdio.h>
#include <stdlib.h>
int main()
{
float a[10];
int i;
for (i=0; i<10; i++)
{
printf("Bitte den Wert zum Index %d eingeben: ",i);
scanf("%f",&a[i]);
}
for (i=0; i<10; i++)
{
printf("a[%d] = %f\n",i,a[i]);
}
return EXIT_SUCCESS;
}
Anmerkung: Sie haben bei dem Übergang von A-1 zu A-2 vermutlich bemerkt, dass es lästig und
auch fehleranfällig ist, im Code zu suchen, wo die Zahl 5 (und im Allgemeinen dann auch mit der
entsprechenden Bedeutung der Array-Größe) vorkommt und diese durch 10 zu ersetzen.
Darum nachstehend noch einmal der mit einer Präprozessor-Konstanten leicht umformulierte Code.
/* Elementare Ein- und Ausgabe eines float-Arrays */
#include <stdio.h>
#include <stdlib.h>
#define GROESSE 10
int main()
{
float a[GROESSE];
int i;
for (i=0; i < GROESSE; i++)
{
printf("Bitte den Wert zum Index %d eingeben: ",i);
scanf("%f",&a[i]);
}
for (i=0; i < GROESSE; i++)
{
printf("a[%d] = %f\n",i,a[i]);
}
return EXIT_SUCCESS;
}
Übung A-3: Arrays befüllen
Betrachten wir der Einfachheit halber wieder int-Arrays.
- Deklarieren Sie bitte zwei Arrays a und b vom Basistyp int und mit der Größe 5; deklarieren und definieren Sie bitte ein drittes Array c vom Basistyp int der Größe 10.
- Schreiben Sie nun die Funktion eingabe(), die ein int-Array von Tastatur einliest.
Sie dürfen selbstverständlich den bei den vorherigen Aufgaben geschriebenen Code verwenden, nur soll dieser jetzt in eine Funktion aufgenommen werden. - Sie ahnen es? Implementieren Sie bitte ebenfalls die Funktion ausgabe(), die die Werte eines solchen int-Arrays auf die Konsole ausgibt.
eingabe(a,5); eingabe(c,10); ausgabe(a,5); ausgabe(c,10);
Lösungshinweise / Lösungsvorschlag hierzu
1. Lösung zur Deklaration und Definition
int a[5], b[5]; int c[10];
2. Eine mögliche Eingabe-Funktion
void eingabe(int array[], int groesse) { int i; for (i=0; i < groesse; i++) { printf("Wert bei Index %d: ",i); scanf("%d", &array[i]); } }
3. Eine mögliche Ausgabe-Funktion
void ausgabe(int array[], int groesse) { int i; for (i=0; i < groesse; i++) { printf("Wert bei Index %d: %d\n",i,array[i]); } }
Übung A-4: Einige Berechnungen
Wir betrachten Arrays von float-Werten. Hierzu sollen die folgenden Funktionen geschrieben werden.
- Die Funktion summe() ermittelt die Summe aller im als Parameter übergebenen Array und liefert diesen Wert per return zurück.
- Die Funktionen minimum() und maximum() geben jeweils den kleinsten bzw. größten Wert im Array mittels return zurück.
- Die Funktion quadratsumme() liefert die Summe aller Quadrate der Werte in dem Array zurück.
(Für die Array-Werte { 2, 3, 4 } wäre dies der Wert 2*2+3*3+4*4 = 29. - Eine solche Quadratsumme werden Sie vermutlich später in der Vorlesung Statistik benötigen.)
Lösungshinweise / Lösungsvorschlag hierzu
Nachstehend der Code beispielhafter Funktionen.
float summe(float array[], int groesse) { float sum = 0; int i; for (i=0; i < groesse; i++) { sum = sum + array[i]; // oder auch kuerzer moeglich: sum += array[i]; } return sum; } float minimum(float array[], int groesse) { float tempmin = array[0]; // Unser erster Kandidat f. d. Minimum int i; for (i=1; i < groesse; i++) { if (array[i] < tempmin) // Finden wir einen kleineren Wert im Array, { // dann wird dieser zu unserem Kandidaten tempmin = array[i]; } } return tempmin; return sum; } float quadratsumme(float array[], int groesse) { float qsum = 0; int i; for (i=0; i < groesse; i++) { qsum = qsum + array[i] * array[i]; // oder auch kuerzer moeglich: sum += array[i] * array[i]; } return qsum; }
Übung A-5: Inhaltlicher Vergleich zweier Arrays
Deklarieren und definieren Sie bitte zwei int-Arrays der Größe 10.
Schreiben Sie bitte eine Funktion equals(), die zwei int-Arrays überprüft, ob sie
inhaltlich gleich sind, also an den korrespondierenden Stellen jeweils dieselben Werte stehen.
Im Falle der Gleichheit soll die Funktion den Wert 1 (im Sinne von true) zurückliefern,
andernfalls den Wert 0 (false).
Ein Aufruf dieser Funktion kann wie folgt aussehen.
int a[10] = { 0 }, b[10] = { 0 }; // Zur Erinnerung: hiermit werden die Arrays komplett auf 0 initialisiert // ... if (equals(a,b,10)) { printf("Die beiden Arrays sind gleich!\n"); } else { printf("Die beiden Arrays sind nicht gleich!\n"); }
Lösungshinweise / Lösungsvorschlag hierzu
Nachstehend der Code einer solchen equals()-Funktion, wenn Sie die Sektion aufklappen.
Die Grundidee ist, stellenweise durch die
beiden Arrays zu gehen und zu vergleichen; wird eine Ungleichheit gefunden, ist bereits klar,
dass die Arrays ungleich sind und es kann mit dem Wert 0 beendet werden (return 0); kommt man
nach der Vergleichsschleife an, dann sind die beiden Arrays gleich (return 1).
Wollen Sie den Code sehen? (Dann bitte hier anklicken.)
int equals(int array1[], int array2[], int groesse)
{
int i;
for (i=0; i < groesse; i++)
{
if (array1[i] != array2[i])
{
return 0;
}
}
return 1;
}
© 2020-2023 Peter Baeumle-Courth