#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中的新手程序员,因而拥有这些疑惑。请任何人解释......
答案 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)
您的代码存在的问题是您%d
行scanf
之后的额外空格,即您接受数组元素,即
for(int i=0;i<n;i++)
{
scanf("%d ",&a[i]); //should be scanf("%d",&a[i]);
}
改变这一点,你很高兴。