C语言——实现两个数的交换(多种方法)

1

1.创建临时变量的

(1)直接在主函数中

#include<stdio.h>
int main(void)
{   
    int a = 10;
    int b = 20;
    int c = 0;//创建c为临时变量
    printf("交换之前:a=%d,b=%d\n", a, b);
    c = a;
    a = b;
    b = c;
    printf("交换之后:a=%d,b=%d\n", a, b   );
    return 0;
}

(2)创建一个函数

//思路:将a和b的地址传过去,因为通过地址就可以找到代码,
    将地址传过去,就要用指针来接收。
#include<stdio.h>
void exchange(int* pa, int* pb)
{
    int c = 0;
    c = *pa;
    //将a备份到c中
    //然后改变a
    *pa = *pb;
    *pb = c;
}
int main(void)
{
    int a = 10;
    int b = 20;
    printf("交换之前:a = %d b = %d\n", a, b);
    exchange(&a, &b);
    printf("交换之后:a = %d b = %d\n", a, b);
    return 0;
}

2.无临时变量的

(1)加减法 缺陷:当两个加在一起特别大的时候会有些二进制位的丢失——溢出

#include<stdio.h>
int main(void)
{
    int a = 10;
    int b = 20;
    printf("交换之前:a=%d,b=%d\n", a, b);
    a = a + b;
    b = a - b;
    a = a - b;
    printf("交换之后:a=%d,b=%d\n", a, b);
    return 0;
}

(2)

#include<stdio.h>
int main(void)
{
    int a = 10;
    int b = 20;
    printf("交换之前:a=%d,b=%d\n", a, b);
    //整型在内存中战32个比特位
    //ab分别用二进制表示
    //00000000000000000000000000001010
    //00000000000000000000000000010100
    //进行三次按位异或——相同为0,相异为1
    a = a ^ b;
    //00000000000000000000000000011110——这个所表示的数是30
    //即现在的a变成了30
    //*******现在要进行按位异或的ab分别是
    //00000000000000000000000000011110
    //00000000000000000000000000010100
    b = a ^ b;
    //得到
    //00000000000000000000000000001010——这个所表示的数是10
    //即现在的b变成了10
    //*******现在要进行按位异或的ab分别是
    //00000000000000000000000000011110
    //00000000000000000000000000001010
    a = a ^ b;
    //得到
    //00000000000000000000000000010100——这个所表示的数是20
    //即现在的a变成了20
    printf("交换之后:a=%d,b=%d\n", a, b);
    return 0;
}