鱼C论坛

 找回密码
 立即注册
楼主: 小甲鱼

[技术交流] 一道有意思的C语言试题

  [复制链接]
发表于 2015-3-13 20:41:47 | 显示全部楼层
{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-3-14 14:18:41 | 显示全部楼层
1、
        使用异或 能对两个整数 进行交换。
       
        原理是  a = a^b^b  
        第一步  *y = *x ^ *y
        第二步  *x = *x ^ *y = *x ^ *x ^ *y = *y ,就把*y的值交给*x
        第三步  *y = *x ^ *y = *y ^ *x ^ *y = *x,就把*x的值交给*y了
       
2、
        当输入是1,2,3,4,5,的时候,最中间的一次交换 是 把 3的值和3的值交换,
        这个时候就出现问题,因为传递给函数的*x和*y的x,y地址是一样的。所以对其中
        任何一个值修改,都会对另外一个进行修改

        当进入到函数后,*x和*y的地址是一样,值都为3.
        执行完第一步, *y = *x ^ *y    *y 的值是0  因为3^3 = 0
        但是因为x,y地址是一样,所以*x的值也是0了。
        所以后面两步执行下来,结果就把*x和*y的值都改为0了,所以结果有0

3、
        代码只要如果 first == last的时候,不执行交换函数就行了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-24 15:52:43 | 显示全部楼层
头尾对调的部分不懂,感觉很有意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-25 12:55:05 | 显示全部楼层
看看什么意思????
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-26 15:54:04 | 显示全部楼层
{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-3-27 09:27:51 From FishC Mobile | 显示全部楼层
{:1_1:}111111111111111116
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-28 22:00:10 | 显示全部楼层
看看答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-29 21:31:24 | 显示全部楼层
楼主加油,鱼C加油!我们都看好你哦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-1 18:44:52 | 显示全部楼层
激动人心,无法言表!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-5 20:19:26 | 显示全部楼层
2.中间的0是由于swap函数中,指针x和y指向同一个内存位置,所以三条语句都是两个相同的数进行异或,故最终*x,*y都为0.
3.将for语句中截止条件改为first<last.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-7 11:01:48 | 显示全部楼层
答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-4-7 14:34:42 | 显示全部楼层
真是难得给力的帖子啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-19 00:03:41 | 显示全部楼层
强烈支持楼主ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-26 15:46:26 | 显示全部楼层
回复看答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-26 19:18:43 | 显示全部楼层
强烈支持楼主ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-26 19:20:19 | 显示全部楼层
可以这样修改,不知道原来代码的错误


void reverse_array(int a[], int count)
{
        int first, last;
        
        for( first=0, last=count-1; first <= last; first++, last-- )
        {
                        if(first == last);
                       
                        else
                inplace_swap(&a[first], &a[last]);
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-28 23:54:58 | 显示全部楼层
强烈支持楼主ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-5-7 10:54:06 | 显示全部楼层
来学习..........................
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-5-13 10:30:14 | 显示全部楼层
enenen!!!!!!!!!!!!!!!!!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-6-4 13:03:29 | 显示全部楼层
mark
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 13:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表