鱼C论坛

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

[已解决]各位看代码吧

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

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

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

x
#include <stdio.h>

void place_swap(int *x,int *y)
{
        *x=*x^*y;
        *y=*x^*y;
        *x=*x^*y;
}
void reverse(int s[],int n)
{
        int first,last,i;
        for(first=0,last=n-1;first<=last;first++,last--)
        {
                place_swap(&s[first],&s[last]);
                printf("%d   %d",s[first],s[last]);
        }
        putchar('\n');
        for(i=0;i<n;i++)
        printf("%d   ",s[i]);
}

int main()
{
        int a=3,b=3;
        int s[]={1,2,3,4,5};
        place_swap(&a,&b);
        reverse(s,5);
        printf("\n%d  %d",a,b);
        
        return 0;
}

/****************************************************************************************************************************************************
这是运行结果
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-10-4 03:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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