|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
int main()
{
int i,j;
int a[10]={11,22,33,44,56,67,78,98,93,100};
int *p=a;
for(i=0,j=9;i<10;i++,j--)
{
*(p+j)=*(a+i);
}
for(i=0;i<10;i++)
{
printf("%d\n",*(p+i));
}
for(i=0;i<10;i++)
{
printf("%d",*(p+i));
}
return 0;
}
求大佬帮忙求解
[b]这个程序试图反转一个数组,但是实现有问题。当 i 和 j 同步增减时,你会在数组的前半部分进行交换,然后在后半部分又将它们换回来,所以这个数组并没有被反转。你应该只在 i < j 时交换 a[i ] 和 a[j] 。
这是一个正确的实现方法:
- #include <stdio.h>
- int main()
- {
- int i,j;
- int a[10]={11,22,33,44,56,67,78,98,93,100};
- int temp;
- for(i=0,j=9;i<j;i++,j--)
- {
- // 使用临时变量 temp 进行交换
- temp = a[i];
- a[i] = a[j];
- a[j] = temp;
- }
- for(i=0;i<10;i++)
- {
- printf("%d\n", a[i]);
- }
- return 0;
- }
复制代码
在这个新的程序中, i 和 j 从数组的两端开始,并向中心移动,只在 i < j 时交换元素,以确保每对元素只交换一次。[/b]
|
|