【C语言刷题系列】交换两个变量的三种方式

简介: 【C语言刷题系列】交换两个变量的三种方式

本文所属专栏C语言刷题_倔强的石头106的博客-CSDN博客

两个变量值的交换是编程中最常见的问题之一,以下将介绍三种变量的交换方式。

其中第一种方式是最常用也是最实用的,后两种方式一般只在特殊限制下使用

1.使用临时变量(推荐)

这是日常使用最多的一种方式,只需要额外申请一个临时变量,简单实用

#include<stdio.h>
int main()
{
  int a = 5;
  int b = 3;
  printf("交换前 %d %d\n", a, b);
 
  int c = a; //a的值放到临时变量中
  a = b;     //b的值放到a中
  b = c;     //临时变量中存放的a的值放到b中
  printf("交换后 %d %d\n", a, b);
 
  return 0;
}

 

2.相加和相减的方式(值较大时可能丢失数据)

使用这种方式的环境,就是在条件不允许创建额外的临时变量时(比如题目要求,面试官要求)

但是这种情况虽然能达到交换的效果,但是在两个变量较大时(接近整型变量的上限),求和之后就会丢失一部分的数据,导致结果出错

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

3.按位异或运算

这种方式巧妙得运用了按位异或的计算特点——对任何两个值进行按位异或运算之后,再拿结果与原来的一个值进行按位异或,都会得到另外一个原来的值

这种方式解决了上一种方式存在的丢失数据问题,且不需要额外的临时变量,缺点是可读性较差

#include<stdio.h>
int main()
{
  int a = 5;
  int b = 3;
  printf("交换前 %d %d\n", a, b);
 
  a = a ^ b;
  b = a ^ b;
  a = a ^ b;
  printf("交换后 %d %d\n", a, b);
  return 0;
}

 

创作不易,还望点赞支持。如有错误,还望提醒更正。

相关文章
|
1月前
|
存储 C语言
【C语言】基础刷题训练4(含全面分析和代码改进示例)
【C语言】基础刷题训练4(含全面分析和代码改进示例)
|
1月前
|
存储 C语言
C语言数据类型、变量和运算符以及printf相关问题
C语言数据类型、变量和运算符以及printf相关问题
|
16天前
|
存储 C语言
【C语言基础考研向】02 数据类型-常量-变量
本文介绍了编程中的基本概念,包括数据类型分类、常量与变量的定义及使用。首先概述了四大类数据类型:基本类型(整型、浮点、字符型)、构造类型(数组、结构体)、指针类型和空类型。接着阐述了常量与变量的区别及命名规则,并详细说明了整型、浮点型和字符型数据的特点与应用。最后总结了常见的易错点,如字符串与字符常量的区别及浮点数的默认输出格式。
|
17天前
|
存储 传感器 物联网
结合物联网开发探讨C语言的变量
在物联网(IoT)开发中,C语言的变量起着至关重要的作用。由于物联网设备资源有限,C语言的高效性和对硬件的直接控制使其成为开发嵌入式系统的首选。
|
19天前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
|
24天前
|
存储 Ubuntu Linux
C语言 多线程编程(1) 初识线程和条件变量
本文档详细介绍了多线程的概念、相关命令及线程的操作方法。首先解释了线程的定义及其与进程的关系,接着对比了线程与进程的区别。随后介绍了如何在 Linux 系统中使用 `pidstat`、`top` 和 `ps` 命令查看线程信息。文档还探讨了多进程和多线程模式各自的优缺点及适用场景,并详细讲解了如何使用 POSIX 线程库创建、退出、等待和取消线程。此外,还介绍了线程分离的概念和方法,并提供了多个示例代码帮助理解。最后,深入探讨了线程间的通讯机制、互斥锁和条件变量的使用,通过具体示例展示了如何实现生产者与消费者的同步模型。
|
1月前
|
存储 编译器 C语言
【C语言篇】C语言数据类型和变量
我们使⽤强制类型转换都是万不得已的时候使用,如果不需要强制类型转化就能实现代码,这样⾃然更好的.
|
1月前
|
C语言
C语言数据类型和变量
C语言数据类型和变量
35 5
|
1月前
|
存储 C语言 容器
C语言中的变量作用域
C语言中的变量作用域
|
1月前
|
C语言
【C语言刷题训练】——第7节(含代码与分析思路)
【C语言刷题训练】——第7节(含代码与分析思路)