2017-09-25 4 views
0

Ich habe zwei Arrays vom Typ int. Jeder ist ungefähr 17901 Elemente lang. Einer repräsentiert die Höhe, der andere die Fluggeschwindigkeit. Ich möchte die beiden Arrays teilen (diese Division ergibt die Mach-Nummer). Wie würde ich das tun?C: Division von zwei Arrays

Dies ist der Code, den ich im Moment bin mit:

for (i = 0; i < ((size/2) + 1); i++) { // size/2 here is 17901 
    machNumber[i] = (ASarray[i]/soundspeed[i]); 
} 
+6

Was ist das Problem mit diesem Code? –

+0

@AlexandreFenyo Ich denke, dass dieser Ausdruck (Größe/2) +1 ist ungültig :) Sollte es (Größe + 1)/2 sein? –

+0

1. Wenn 'machNumber' ein Fließkomma-Array ist, aber' ASarray' und 'soundspeed' beide Arrays von Ganzzahlen sind, führt dieser Code eine abgeschnittene Ganzzahladdition aus, die möglicherweise nicht Ihren Vorstellungen entspricht. 2. Sie sollten die Schleife für I = 0, I

Antwort

1

ersetzen ((size/2)+1 durch die berechnete Größe sizeof(ASarray)/sizeof(*ASarray)

Auf diese Weise wird es keine Zweifel über die Schleife sein. Natürlich muss die Größe von ASarray statisch definiert sein (der Speicher darf nicht mit malloc belegt sein).

for(i = 0; i < sizeof(ASarray)/sizeof(*ASarray); i++) { 
    machNumber[i] = (ASarray[i]/soundspeed[i]); 
} 
+1

Wenn Sie die Deklaration von 'ASarray' nicht sehen, können Sie nicht sicher sein, dass sie buchstäblich als * Array * deklariert ist (im Gegensatz zu einem bloßen Zeiger). Ihr 'sizeof' Trick funktioniert nicht für einen Zeiger. – AnT

+1

Ja, du hast Recht, deshalb habe ich geschrieben * der Speicher darf nicht mit malloc * belegt sein. Aber da die Größe bekannt ist (17901 Elemente), wurde diese möglicherweise statisch zugewiesen. –

+0

Ich weiß, dass Sie wissen, was Sie tun, aber wenn Sie sagen: "Natürlich muss die Größe statisch definiert sein", gehen Sie davon aus, dass alle anderen das gut verstehen, aber das ist offensichtlich * nicht * wahr; viele beginnende Programmierer verstehen das nicht und machen diesen Fehler. –

0

Halfing die Größe nicht die Anzahl der Elemente nicht korrekt berechnen: Sie stattdessen die Größe der Anordnung von der Größe seines Element teilen sollten (beide in Bytes). Wenn darüber hinaus machNumber eine Art schwimmende Punkt ist, und weder ASarray noch soundspeed sind, müssen Sie ein gegossenes den richtigen Mach Wert zu berechnen:

for (size_t i = 0; i < sizeof(ASarray)/sizeof(ASarray[i]); i++) { 
    machNumber[i] = (double)ASarray[i]/soundspeed[i]; 
}