Ein Array füllen
Bisher hast du alle Elemente in geschweifte Klammern geschrieben. Oft berechnet das Programm die Werte aber selbst. Dann erstelle ein Array der richtigen Größe ohne Werte und fülle es in einer Schleife:
int quadrate[5];
int anzahl = sizeof(quadrate) / sizeof(quadrate[0]);
for (int i = 0; i < anzahl; i++) {
quadrate[i] = i * i;
}
for (int i = 0; i < anzahl; i++) {
printf("%d ", quadrate[i]);
}
printf("\n");Das gibt Folgendes aus:
0 1 4 9 16int quadrate[5]; erstellt ein Array aus fünf Elementen, die noch keine Werte haben. sizeof funktioniert auch jetzt, denn die Größe eines Arrays steht von Anfang an fest. Die erste Schleife gibt jedem Element seinen Wert, das Quadrat seines Index: quadrate[0] bekommt 0, quadrate[1] bekommt 1, quadrate[2] bekommt 4 und so weiter. Die zweite Schleife gibt sie aus.
Lies ein Element nicht, bevor es einen Wert hat: C sagt nicht, was darin steht. Bei einer einzelnen Variablen ohne Wert meldet diese Seite einen Fehler, bei einem Element eines Arrays nicht, du musst diesen Fehler also selbst vermeiden.
Wenn alle Elemente bei null beginnen sollen, schreibe = {0}. Das ist praktisch für Zähler. Hier zählt jedes Element die Stimmen für einen von vier Kandidaten:
int stimmen[4] = {0};
stimmen[2]++;
stimmen[2]++;
stimmen[0]++;
int anzahl = sizeof(stimmen) / sizeof(stimmen[0]);
for (int i = 0; i < anzahl; i++) {
printf("%d ", stimmen[i]);
}
printf("\n");Das gibt Folgendes aus:
1 0 2 0Wenn in den geschweiften Klammern weniger Werte stehen als die Größe des Arrays, füllt C die übrigen Elemente mit Nullen. {0} setzt das erste Element auf 0, und die anderen werden ebenfalls 0. Aber Vorsicht: = {1} füllt das Array nicht mit Einsen. Es setzt nur das erste Element auf 1, und alle anderen sind 0.
Die geschweiften Klammern funktionieren nur beim Erstellen eines Arrays. Später kannst du nicht das ganze Array auf einmal füllen: stimmen = {0, 0, 0, 0}; endet mit error: expected expression. Auch kopieren kannst du ein Array nicht mit =. Wenn kopie und punkte zwei Arrays aus fünf int sind, lässt sich kopie = punkte; nicht kompilieren:
main.c:6:11: error: array type 'int[5]' is not assignableDie Meldung sagt, dass einem Array nicht als Ganzes etwas zugewiesen werden kann. Um ein Array zu kopieren, kopiere es Element für Element in einer Schleife:
int punkte[] = {80, 92, 75, 60, 88};
int anzahl = sizeof(punkte) / sizeof(punkte[0]);
int kopie[5];
for (int i = 0; i < anzahl; i++) {
kopie[i] = punkte[i];
}
printf("%d %d\n", kopie[0], kopie[4]);Das gibt Folgendes aus:
80 88Die Kopie muss mindestens so groß sein wie das Original. In einer kleineren würde die Schleife über ihr Ende hinausgehen.
So schreibst du es:
Anweisungen
- 1
Erstelle unter dem Kommentar ein Array
vielfacheaus 10 ganzen Zahlen, ohne Werte. Fülle es dann in einer Schleife mit der Siebenerreihe:7,14,21und so weiter bis70. Das Element mit dem Indexibekommt den Wert(i + 1) * 7. - 2
Gib in einer zweiten Schleife alle Elemente in einer Zeile aus, getrennt durch Leerzeichen:
7 14 21 28 35 42 49 56 63 70. - 3
Erstelle darunter ein zweites Array
kopieaus 10 ganzen Zahlen und kopierevielfachein einer Schleife hinein. - 4
Gib zum Schluss auch die Kopie in einer Zeile aus, mit
Kopie:davor. Die Ausgabe soll die ZeileKopie: 7 14 21 28 35 42 49 56 63 70enthalten.