2017-09-25 13 views
0

私はタイプintの2つの配列を持っています。各要素の長さは約17901です。 1つは標高を表し、もう1つは対気速度を表します。私は2つの配列を分割したいと考えています(この分割はマッハ数になります)。どうすればいい?C:2つの配列の分割

これは私が現在使用しているコードです:

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

このコードの問題は何ですか? –

+0

@AlexandreFenyo私はこの式(size/2)+1が無効だと思います:)(size + 1)/ 2でなければなりませんか? –

+0

1. 'machNumber'が浮動小数点型の配列で、' ASarray'と 'soundspeed'が両方とも整数の配列である場合、このコードは整数の切り捨てを行います。 2. I = 0、I

答えて

1

が計算されたサイズsizeof(ASarray)/sizeof(*ASarray)

でこの道を((size/2)+1を交換、ループについての疑いがあるでしょう。もちろん、ASarrayのサイズは静的に定義する必要があります(メモリはmallocで割り当てられていてはなりません)。サイズHalfingの

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

'ASarray'の宣言が見えないので、文字通り* array *として宣言されているとは限りません(単なるポインタではありません)。あなたの 'sizeof'トリックはポインタのためには機能しません。 – AnT

+1

はい、そうです、これが私が書いた理由です*メモリはmalloc *で割り当てられていてはいけません。しかし、サイズは既知であるため(17901要素)、これは静的に割り当てられている可能性があります。 –

+0

私はあなたが何をしているのか知っていますが、「もちろん、サイズは静的に定義する必要があります」と言えば、他の人がこれをよく理解していると仮定していますが、それは明らかに*真実ではありません。多くの初心者プログラマーはこれを理解しておらず、それを間違えてしまいます。 –

0

正しく要素の数を計算しない。代わりに、その要素(両方のバイト)のサイズによって配列のサイズを分割しなければなりません。さらに、machNumberは浮動小数点型であるともないASarraysoundspeedがある場合、あなたは適切なマッハ値を計算するためにキャストを必要とする:

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