拜托C高手讲解一下

poliscat27 2010-04-01 02:18:20
#include<stdio.h>

void main()
{
void inv(int x[],int n);
int i,a[10]={3,7,9,11,0,6,7,5,4,2};
printf("the original array:\n");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
inv(a,10);
printf("the array has been inverted:\n");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
}

void inv(int x[],int n)
{
int temp,i,j,m=(n-1)/2;
for(i=0;i<=m;i++)
{
j=n-1-i; 这不明白 为什么??
temp=x[i];x[i]=x[j];x[j]=temp;
}
return;
}
...全文
288 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
tlx20093A 2010-04-05
  • 打赏
  • 举报
回复
数组元素是从下标0开始的。
落随风 2010-04-04
  • 打赏
  • 举报
回复
学习~~~~~~~~~
mafree 2010-04-04
  • 打赏
  • 举报
回复
也不太清楚 .
爱在深秋 2010-04-04
  • 打赏
  • 举报
回复
数组的倒置
liyanlin122 2010-04-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 linyongzuo 的回复:]
C/C++ code

for(i=0;i<=m;i++)//数组的反转如ls所说
{
j=n-1-i; //从数组的最后一个往前找
temp=x[i];x[i]=x[j];x[j]=temp;
}
[/Quote]


已经很清楚了...
hrx1989 2010-04-04
  • 打赏
  • 举报
回复
呵呵 可以理解
hanchunchun 2010-04-04
  • 打赏
  • 举报
回复
数组倒置嘛!
有什么不明白的
zbychhaozeng 2010-04-04
  • 打赏
  • 举报
回复
void inv(int x[],int n)
{
int temp,i,j,m=(n-1)/2;
for(i=0;i<=m;i++)
{
j=n-1-i; 这不明白 为什么??
temp=x[i];x[i]=x[j];x[j]=temp;
}
return;
}

其实i第一个的时候,j就是最后一个元素,然后i++;j--;之后交换!
bullbat 2010-04-04
  • 打赏
  • 举报
回复
呵呵,路过。。
releaner 2010-04-02
  • 打赏
  • 举报
回复
学习了
qjcslgnhwayagain 2010-04-02
  • 打赏
  • 举报
回复
就是将这个数组的顺序按原来的数组顺序的逆序排序
dukong123 2010-04-02
  • 打赏
  • 举报
回复
使劲的想啊。。。。。。。。。。。。。。
superyk 2010-04-02
  • 打赏
  • 举报
回复
顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊顶啊
不知名小ITer 2010-04-02
  • 打赏
  • 举报
回复
不明白...

呵呵,告诉你个简单有效的笨办法...

递归..当i=0的时候,j=?;当i=1时,j=?...然后联想一下...就知道问什么了..
msj321 2010-04-02
  • 打赏
  • 举报
回复
低调的路过
goodboy5201314 2010-04-02
  • 打赏
  • 举报
回复
楼主可以自己试试调试,单步调试,很快能看出是将数组倒转呀
COPPERLIJIAN 2010-04-02
  • 打赏
  • 举报
回复
不懂,可以运行试试啊,就是将数组的前(n-1)/2个和后(n-1)/2个互换的啊,a[0]与a[n-1], a[1]与a[n-2]。。。。。。
bobo364 2010-04-02
  • 打赏
  • 举报
回复
#include<stdio.h>

void inv(int x[],int n);

int main()
{

int i,a[10]={3,7,9,11,0,6,7,5,4,2};
printf("the original array:\n");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
printf("\n");
inv(a,10);
printf("the array has been inverted:\n");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
printf("\n");
system("pause");
return 0;
}

void inv(int x[],int n)
{
int temp,i,j,m=(n-1)/2;//m取数组个数减一的一半值,当n=10时,m=4
for(i=0;i<=m;i++)
{
j=n-1-i;//当i=0,j=9;i=1,j=8,在结合下面的交换模块,正好把wei尾和头的元素交换
temp=x[i];x[i]=x[j];x[j]=temp;
}
}
moon6623 2010-04-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 toborac 的回复:]
函数目的是把原数组倒转次序原地存放 n是输入的字符元素个数
i是前半截的数 j是和它对应的位于后半截的数
假如n=10
那么i,j关系如下 j = 10 - 1 - i = 9 - i
i: 0, 1, 2, 3, 4
j: 9, 8, 7, 6, 5
[/Quote]
UP
toborac 2010-04-01
  • 打赏
  • 举报
回复
函数目的是把原数组倒转次序原地存放 n是输入的字符元素个数
i是前半截的数 j是和它对应的位于后半截的数
假如n=10
那么i,j关系如下 j = 10 - 1 - i = 9 - i
i: 0, 1, 2, 3, 4
j: 9, 8, 7, 6, 5
加载更多回复(6)

70,035

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧