鱼C论坛

 找回密码
 立即注册
查看: 1339|回复: 7

[已解决]各位看代码吧

[复制链接]
发表于 2019-8-14 17:47:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <stdio.h>

  2. void place_swap(int *x,int *y)
  3. {
  4.         *x=*x^*y;
  5.         *y=*x^*y;
  6.         *x=*x^*y;
  7. }
  8. void reverse(int s[],int n)
  9. {
  10.         int first,last,i;
  11.         for(first=0,last=n-1;first<=last;first++,last--)
  12.         {
  13.                 place_swap(&s[first],&s[last]);
  14.                 printf("%d   %d",s[first],s[last]);
  15.         }
  16.         putchar('\n');
  17.         for(i=0;i<n;i++)
  18.         printf("%d   ",s[i]);
  19. }

  20. int main()
  21. {
  22.         int a=3,b=3;
  23.         int s[]={1,2,3,4,5};
  24.         place_swap(&a,&b);
  25.         reverse(s,5);
  26.         printf("\n%d  %d",a,b);
  27.        
  28.         return 0;
  29. }
复制代码


/****************************************************************************************************************************************************
这是运行结果
5   14   20   0
5   4   0   2   1   
3  3

第一行,for执行了3次,不是应该打印6个数吗?
第三行,结果不应该是0 0吗?(数组的s[2]的结果都是0了)
各位看看,给点看法。
最佳答案
2019-8-14 21:00:36
这个是你的函数定义:
void place_swap(int *x,int *y)
{
        *x=*x^*y;
        *y=*x^*y;
        *x=*x^*y;
}
这个是条件:
int a=3,b=3;
在函数place_swap(3,3)中,第一行:
*x=*x^*y;
执行之后,*x = 0, *y = 3
然后第二行:
*y=*x^*y;
执行之后,*x = 0, *y = 3
最后,执行第三行:
*x=*x^*y;
各个变量的值:*x = 3, *y = 3
所以最后的输出为:3,3 没有问题啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-8-14 18:06:30 From FishC Mobile | 显示全部楼层
首先是6个数。14是1 4 你没加空格所以黏在一起了,第三行你输出的是s b不关s得事吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-14 18:09:17 From FishC Mobile | 显示全部楼层
其次你那个用异或交换值的算法有问题,当x y是同一个变量的时候,这个变量就变成0了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-14 18:17:57 | 显示全部楼层
迷雾少年 发表于 2019-8-14 18:09
其次你那个用异或交换值的算法有问题,当x y是同一个变量的时候,这个变量就变成0了

这个我知道,所以a,b执行那个算法之后,结果应该就是0 0 啊,但是第三行结果怎么是 3 3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-14 18:19:12 | 显示全部楼层
迷雾少年 发表于 2019-8-14 18:06
首先是6个数。14是1 4 你没加空格所以黏在一起了,第三行你输出的是s b不关s得事吧

我忘了第二个要输出的参数加空格了
第三行我要输出的是a,b啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-14 19:31:33 From FishC Mobile | 显示全部楼层
本帖最后由 迷雾少年 于 2019-8-14 19:59 编辑
jiuyuan 发表于 2019-8-14 18:19
我忘了第二个要输出的参数加空格了
第三行我要输出的是a,b啊


第三行是输出a b啊 a和b都是3啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-14 21:00:36 | 显示全部楼层    本楼为最佳答案   
这个是你的函数定义:
void place_swap(int *x,int *y)
{
        *x=*x^*y;
        *y=*x^*y;
        *x=*x^*y;
}
这个是条件:
int a=3,b=3;
在函数place_swap(3,3)中,第一行:
*x=*x^*y;
执行之后,*x = 0, *y = 3
然后第二行:
*y=*x^*y;
执行之后,*x = 0, *y = 3
最后,执行第三行:
*x=*x^*y;
各个变量的值:*x = 3, *y = 3
所以最后的输出为:3,3 没有问题啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-14 21:25:49 | 显示全部楼层
wwhywhy 发表于 2019-8-14 21:00
这个是你的函数定义:
void place_swap(int *x,int *y)
{

嗯,我懂了,a,b不是一个变量。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 19:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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