Zuerst müssen Sie die elements
Variable in main()
erklären:
int elements = 7;
oder noch besser:
int elements = sizeof(percentages)/sizeof(*percentages);
, die automatisch die Größe des Arrays berechnet.
Dann ändern Sie nicht die Variable elements
in Ihrer Schleife. Wenn Sie dies tun, programmieren Sie jedes Mal, wenn das aktuelle Maximum geändert wird, Ihre Schleife so, dass sie nach dem nächsten Element stoppt, wobei möglicherweise das tatsächliche Maximum fehlt, das sich am Ende des Arrays befinden kann.
Dann, wie Bob sagte, sollten Sie den Index des Maximums zurückgeben, auf diese Weise können Sie die entsprechende sampleSize oder Jahr abrufen.
Wenn Sie years[high]
tun, verwenden Sie einen Prozentsatz als Array-Index, der keinen realen Wert in [0,100] annehmen kann, anstelle eines Index, der in {0, 1, 2, 3, 4, 5 bleiben muss , 6}.
Darüber hinaus speichern Sie high
in einer Ganzzahl Variable, was zu einer Kürzung des Werts führt. Möglicherweise möchten Sie es als doppelte Variable speichern.werden
findHighNumber()
kann also:
int findHighNumber(double percentages[], int elements)
{
int index;
double high;
int high_index;
high_index = 0;
high = percentages[high_index];
for (index = 1; index < elements; index++)
if (high < percentages[index]) {
high = percentages[index];
high_index = index;
}
return high_index;
}
Die main()
Funktion kann nun werden so etwas wie:
int main (void)
{
int years[] = {2000, 2002, 2004, 2006, 2008, 2010, 2012};
double percentages[] = {6.7, 6.6, 8, 9, 11.3, 14.7, 14.6};
int sampleSizes[] = {187761, 444050, 172335, 308038, 337093, 1000,
46978};
int elements = sizeof(percentages)/sizeof(*percentages);
int high_index = findHighNumber(percentages, elements);
printf ("%i had the highest percentage with autism at %.2lf%% (sample"
"size was %d).\n", years[high_index], percentages[high_index],
sampleSizes[high_index]);
return 0;
}
Dann einige kleine Hinweise:
- ein Prototyp
findHighNumber()
setzen ist nicht benötigt, definiere einfach die Funktion über den Stellen wo es ne ist erreicht. Auf diese Weise, wenn Sie wirklich einen Prototyp für eine Funktion setzen müssen, gibt es einen Hinweis, dass Sie dazu gezwungen wurden, (zum Beispiel für gegenseitig rekursive Funktionen), und es verkürzt den Code.
Sie sollten ein definieren, beispielsweise struct autism_sample
wie folgt aus:
struct autism_sample {
int year;
int sample_size;
double percentage;
};
Auf diese Weise haben Sie nur ein Array zu definieren:
struct autism_sample autism_samples[] = {
{
.year = 2000,
.sample_size = 187761,
.percentage = 6.7,
},
{
.year = 2002,
.sample_size = 444050,
.percentage = 6.6,
},
...
};
Auf diese Weise Ihre Daten in einer organisierten Logischer Weg, weniger fehleranfällig zu pflegen und Sie erhalten die Wahl, in der Implementierung von findHighNumber(), entweder den Index des Maximums oder direkt, ein Zeiger auf das Element mit dem Maximum, der Index wird dann nutzlos.
Was mehr ist, ist es einfacher, (un) serialisiert ...
Sie müssen den Index des Maximalwerts entlang des Werts selbst speichern und zurückgeben. Ich würde die Funktion auch in 'findIndexOfMax' umbenennen, um deutlich zu machen, was es tun soll. – Lou
Danke Jungs! Ich habe es zur Arbeit gebracht. –