2017-05-19 7 views
0

私が実行するタスクを持っていると私は最初の部分を実行するために管理:アレイリフレクション基本タスク

// create an array B that has twice as many elements as A and is 
// A forward followed by A in reverse 
// if A is {3, 22, -5, 7} then we create B {3, 22, -5, 7, 7, -5, 22, 3} 

// array A is declared and the size of A is 'size' 
// myapproach 

int B[2*size]; 
int i; 
for (i = size; i >-1 ; i--) { 
    B[i] = A[i]; 
} 
int j; int k; 
for (j = 2*size; j>size; i--) { 
    k = size; 
    k++; 
    while (2*size < k) { 
     B[j] = B[k]; 
    } 
} 

私のコードはタスク(B = {3、22、-5の最初の部分のために働きます、 7、})しかし、私は残りを把握できませんでした。手伝ってくれますか?

+1

合計2つのループと、ネストされたループは必要ありません。また、最初のループは 'size'ではなく' size-1'からでなければなりません。 'A [size]'は範囲外です。 – twain249

答えて

0

ここにあります。

#include <stdio.h> 

int main(void) 
{ 
    int A[] = { 3, 22, -5, 7 }; 
    const size_t size = sizeof(A)/sizeof(*A); 
    int B[2 * size]; 

    for (size_t i = 0; i < size; i++) 
    { 
     B[2 * size - i - 1] = B[i] = A[i]; 
    } 

    for (size_t i = 0; i < 2 * size; i++) printf("%d ", B[i]); 
    putchar('\n'); 
} 

プログラムの出力は、あなたのコードのよう

3 22 -5 7 7 -5 22 3 

ある配列Aを超えてメモリにアクセスしようとする試みがあるため、その後、既にこのループ

 for (i = size; i >-1 ; i--) { 
      B[i] = A[i]; 
     } 

が間違っていますインデックスisizeに等しい。