一个简单的C语言的问题 3.2

来源:百度知道 编辑:UC知道 时间:2024/06/28 14:57:38
有整形数组a[]。通过调用子程序inv(),对a[]数组中的元素反向交换存储位置。不得增行或者删行。题中有两处空。
void inv(int X[],int n)
{
int temp,i,j,m=[____1____];
for(i=0;i<=m;i++)
{j=n-i-1;
temp=x[i];
[___2___];
x[j]=temp;
}
return;
}
main()
{
int a[10]={4,5,6,7,8,9,10,11,12,88};
int i;
printf("The original array:\n");
for(i=0;i<10;i++)
printf("%3d",a[i]);
printf("\n");
inv(a,10);
printf("The reverse array:\n");
for(i=0;i<10;i++)
printf("%3d",a[i]);
printf("\n");
}

#include<stdio.h>
void inv(int x[],int n)
{
int temp,i,j,m=(n-2)/2;
for(i=0;i<=m;i++)
{j=n-i-1;
temp=x[i];
x[i]=x[j];
x[j]=temp;
}
}
void main()
{
int a[10]={4,5,6,7,8,9,10,11,12,88};
int i;
printf("The original array:\n");
for(i=0;i<10;i++)
printf("%3d",a[i]);
printf("\n");
inv(a,10);
printf("The reverse array:\n");
for(i=0;i<10;i++)
printf("%3d",a[i]);
printf("\n");
}

调试结果正确

ps:x一定要注意大小写保持一致,最前面要加#include<stdio.h>

因为i<=m这个条件楼主说不能改动,楼上那位n/2 没有考虑到当a数组为偶数的时候,中间两位数组元素会被交换2次,这样结果就不正确了。另外如果把答案1改为(n-1)/2虽然结果也正确,但是这样当数组为奇数个数时,数组中间的元素又会白白多交换一次,无用功。

因此最正确答案应该是:
1处填写 (n-2)/2
2处填写 x[i]=x[j]

我也是c的学习者,希望能帮到楼主:)

void inv(int X[],int n)
{
int temp,i,j,m=n;
for(i