2017-05-19 43 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-1'而不是'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 

至于你的代码,然后就这样循环

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

是错误的,因为是访问存储阵列A超越的尝试时,索引i等于size