Когда я начал свое обучение в программировании почти год назад, я играл с массивами на C.
Это код, который я пишу:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#define WARY 1000
int main() {
srand(time(0)); // Initialisierung des Algorithmus für rand()
int a = 0, zahl = 0, rep = 0, wertmin, wertmax, eins, zwei, drei, vier, fuenf,
sechs, sieben, acht, neun, zehn;
int zary[WARY];
for (a = 0; a < WARY; ++a) {
zary[a] = rand() % 10 +
1; // Befüllen des Arrays mit Zufallszahlen (Bereich von 1-10)
}
for (a = 0; a < WARY; ++a) // Ausgabe aller Elemente des Arrays
{
printf("Inhalt von zary[%i]", a);
printf("ist: %i \n", zary[a]);
}
a = 0; // Initialisierung min/max mit Element der 1.Stelle des Arrays
wertmax = zary[a];
wertmin = zary[a];
for (a = 0; a < WARY; ++a) // Durchsuchen des Arrays nach Min/Max
{
if (wertmin > zary[a]) wertmin = zary[a];
if (wertmax < zary[a]) wertmax = zary[a];
}
printf("Das kleinste Element der Tabelle ist %i\n", wertmin);
printf("Das groesste Element der Tabelle ist %i\n", wertmax);
for (a = 0; a < WARY; ++a) // Zählen der Häufigkeit aller Elemente des Arrays
{
switch (zary[a]) {
case 1:
eins++;
break;
case 2:
zwei++;
break;
case 3:
drei++;
break;
case 4:
vier++;
break;
case 5:
fuenf++;
break;
case 6:
sechs++;
break;
case 7:
sieben++;
break;
case 8:
acht++;
break;
case 9:
neun++;
break;
case 10:
zehn++;
break;
default:
printf("Fehler\n");
}
}
printf(
"Elemente des Arrays sind:\n %i (1)er\n; %i (2)er\n; %i (3)er\n; %i "
"(4)er\n; %i (5)er\n; %i (6)er\n; %i (7)er\n; %i (8)er\n; %i (9)er\n; %i "
"(10)er\n",
eins, zwei, drei, vier, fuenf, sechs, sieben, acht, neun, zehn);
return 0;
}
Последнее намерение этого кода состояло в том, чтобы заполнить массив случайными числами от 1 до 10, а затем зачитать элементы массива и как часто они появляются.
Он работает довольно хорошо, но каждый раз, когда он говорит, что его число превышает 4.000.000 раз.
Где моя ошибка?
Вам необходимо инициализировать все eins,zwei,drei,vier,fuenf,sechs,sieben,acht,neun,zehn
до 0 до блока switch
.
eins = 0;
и так далее.
Вы увеличиваете свои переменные (например, eins
) до их инициализации. Технически это неопределенное поведение.
Вам нужно написать int eins = 0;
и т.д. или включают линию
eins = zwei = drei/*etc */= 0;
после объявления, но до любого ++
.