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

简介: 【C】C语言——实现两个数的交换(多种方法)

@TOC

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;
}
相关文章
|
2月前
|
传感器 人工智能 物联网
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发,以及面临的挑战和未来趋势,旨在帮助读者深入了解并掌握这些关键技术。
55 6
|
3月前
|
Java 编译器 C语言
【一步一步了解Java系列】:Java中的方法对标C语言中的函数
【一步一步了解Java系列】:Java中的方法对标C语言中的函数
33 3
|
7月前
|
C语言
【C语言刷题每日一题】一维数组的交换
【C语言刷题每日一题】一维数组的交换
|
7月前
|
C语言
c语言左旋字符串问题(不同方法超详细解答)
c语言左旋字符串问题(不同方法超详细解答)
33 1
|
7月前
|
机器学习/深度学习 算法 C语言
详细介绍递归算法在 C 语言中的应用,包括递归的基本概念、特点、实现方法以及实际应用案例
【6月更文挑战第15天】递归算法在C语言中是强大力量的体现,通过函数调用自身解决复杂问题。递归涉及基本概念如自调用、终止条件及栈空间管理。在C中实现递归需定义递归函数,分解问题并设定停止条件。阶乘和斐波那契数列是经典应用示例,展示了递归的优雅与效率。然而,递归可能导致栈溢出,需注意优化。学习递归深化了对“分而治之”策略的理解。**
141 7
|
7月前
|
测试技术 C语言
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
54 1
|
7月前
|
IDE 编译器 开发工具
详细解读C语言程序设计:现代方法(第2版)第二章全部习题答案
详细解读C语言程序设计:现代方法(第2版)第二章全部习题答案
48 0
|
7月前
|
C语言
【C语言刷题系列】交换整数的奇数位和偶数位
【C语言刷题系列】交换整数的奇数位和偶数位
|
7月前
|
C语言
【C语言刷题系列】交换两个变量的三种方式
【C语言刷题系列】交换两个变量的三种方式
|
7月前
|
C语言