反转整数数组的元素

时间:2015-10-20 09:29:59

标签: arrays

    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    #include <stdlib.h>
    int reverse(int a[20],int n);

    int main()
     {
     int a[20];
      int n;
      printf("enter the number of elements \n");

      scanf("%d",&n);
      printf("enter the array elements\n");
      for(int i=0;i<n;i++)
      {
        scanf("%d ",&a[i]);
      }
      reverse(a,n);

      return 0;
   }
     int reverse(int a[20],int n)
    {
     for(int i=n-1;i>=0;i--)
       {
       printf("%d ",a[i]);
         }
    return 0;

    }

这里如果我输入n = 4然后在运行时我必须采取5个元素然后它反转。例如,如果我采取n = 4然后没有元素我必须采取1,2,3,4, 5然后只输出4 3 2 1.为什么?我的逻辑错了?同样在这段代码中,我无法将数组的元素数量排成一行,如1 2 3 4.当我输入数字时,每个数字都在新行中输入。我是C中的新手程序员,因而拥有这些疑惑。请任何人解释......

2 个答案:

答案 0 :(得分:0)

以下是您重构的整个程序正常运行:

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int reverse(int a[20], int n)

int main()
{
    int a[20];
    int n;
    printf("enter the number of elements \n");

    scanf("%d",&n);
    printf("enter the array elements\n");
    for (int i=0; i<n; i++)
    {
        scanf("%d",&a[i]);
    }
    reverse(a,n);

    return 0;
}

int reverse(int a[20], int n)
{
    int mid = n/2;
    for (int i=0; i < mid; ++i)
    {
        int temp = a[n-i-1];
        a[n-i-1] = a[i];
        a[i] = temp;
    }

    return 0;
}

答案 1 :(得分:0)

您的代码存在的问题是您%dscanf之后的额外空格,即您接受数组元素,即

for(int i=0;i<n;i++)
{
   scanf("%d ",&a[i]); //should be scanf("%d",&a[i]);
}

改变这一点,你很高兴。