c语言中三个数交换位置,关于C语言交换两个数的实现方法以及个人心得

c4468b3f4df77e96b0a416fa2a870fba.png

对于C语言中交换两个数的方法,目前大体上有这么5种:

1:直接利用中间变量进行交换;

2:利用指针传入函数地址在函数内部进行利用中间变量交换;

3:将两个需要交换的数进行加减运算进行交换;

注:因C语言有浮点数之分,不可以认为乘除也可进行交换。

4:将两个数进行亦或运算,也可以实现交换两个数的目的;

5:对两个数进行位操作,也可以实现交换两个数的目的。

接下来我将对后面三种进行分析:

前面两种太过常见,在此不做说明:

第三种:加减交换

将两个数之和赋值给第一个数,然后用新第一个数减去第二个数得到旧第一个数,并赋值给第二个数

,再用新第一个数减去新第二个数(旧第一个数)得到旧第二个数,并赋值给第一个数,在此,实现

两个数的交换,代码如下:

1 #include

2

3 intmain(){

4 int a=10,b=20;

5 a+=b;

6 b=a-b;

7 a=a-b;

8

9 return 0;

10 }

注意:此法使用缺陷

当需要交换的两个数是指向同一下标的数组元素,那么此时,此法失效。

诸君请看:

1 #include

2

3 intmain(){4 int a[5] = {1,2,3,4,5};5 int i=2,j=2;6 a[i] += a[j]; //因为i=j;所以此时a[i]=a[j]=2[i];

7 a[j] = a[i] - a[j];//由上知,此时a[i]=a[j]=0;

8 a[i] = a[i] - a[j];//此时两者均为0;交换失败9   return 0;

10 }

此外,使用此法时应注意两个数之和不能超过所定义的类型所能表达的最大数,不然也将交换失败

第四种:异或运算进行交换

在此,我先说一下异或运算的原理:两个数做异或运算,将两个数化为二进制,逐位比较,相同者得0,不同者得1;具体如下:

0 1 0 1   1 0 0 1

1 0 0 1   0 1 0 0

运算得   1 1 0 0   1 1 0 1

0 1 0 1   1 0 0 1

与第一个数                 至此感悟,代码如下:

运算得       1 0 0 1   0 1 0 0

1 #include

2

3 intmain(){4 int a = 10,b = 20;5 b ^=a;6 a ^=b;7 b ^=a;8

9 return 0;10 }

注:和上一方法一样,此法在对数组使用时也受到相同的限制,但只需在对数组使用之前做一个,判断确保指向的不是同一个数,

那么我觉得这种方法应是最简单快捷的。

第五种:位运算进行交换

该方法也是基于二进制进行运算

首先带大家认识两个位运算符:>> 箭头朝右指,故右移运算符   <

比如 5>>1 表示将5右移一位  -->  即    5的二进制 0 0 0 0  0 1 0 1    右移一位得   0 0 0 0   0 0 1 0  原本末尾的1被移走,高位补0;左移同理

注意:因右边是数据的最低位,所以当右移出去后,再左移是不能恢复到原来的数字的,但左移不同,左边剩下的高位都为0,都是存在的,当你的数

字不足够大时,左移之后是还可以通过右移恢复原数的

fecba05f1c23ee18448446a20ebd214e.png

当想使用位运算交换两个数的时,应先对每个数实际二进制位数做简单估测,再确定所移动位数,下面为交换两个数的实例

1 #include

2

3 intmain(){4 int a = 5,b = 10;5 a <<= 8; //将a移动到高位

6 a += b; //将b的值加到a移动之后的低位

7 b = a >> 8; //取a原来的值

8 a = a & 0xff ; //取新移进来的b,高位直接通过与运算赋值为0

9

10 return 0;11 }

注:上述代码中的&运算符运算原理和亦或相似,这个是如果两个都为1,则为1,否则为0;

当用此方法进行交换两个数时,一是两个 数的大小 比第三种方法还受限制,而且所移的位数不好确定,不推荐使用

第一次写博客,我知道肯定毛病颇多,望各位大佬口下留情,手下留情,多多指点;谢过谢过

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

C语言——多种方法交换两个数 多种方法交换两个数 题目描述 输入两个数 a , b ,交换他们的值 解题思路及方法 采用中间变量的方法,交换两个数的值,或者采用交换地址的方式输出他们的值,或者用位运算符,只要达到输出的时候体现出他们的值被交换过了就行。 样例输入 10 20 样例输出 20 10 方法一 (采用中间变量) #include<stdio.h> int main() { int ... 阅读详情

相关推荐

c语言指针作为函数参数--实现两个数交换位置

/* 指针作为函数参数 交换两个数的位置 */ /* 指针作为函数参数 交换两个数的位置 */ #include <stdio.h> changeData(int a,int b){ int c; c=a; a=b; b=c; printf("a=%d",a); printf("b=%d",b); ...

轻描时光 4644

交换变量算法(3个数转换)

【代码】交换变量算法。

weixin_71987403的博客 470

数组中数据位置交换(c语言代码)

2、 实数数组有16个存储空间,放着16个实数(键盘输入或初始化均可),将最小的与第一个交换,最大的与最后一个交换,然后依次输出这16个实数。

将一个三位数的位置交换顺序

输入一个三位数,将其位置交换顺序,代码如下。 #include

liebecl的博客 5829

四类九种移位寄存器总结(循环(左、右、双向)移位寄存器、逻辑和算术移位寄存器、串并转换移位寄存器、线性反馈移位寄存器LFSR|verilog代码|Testbench|仿真结果)

移位寄存器有哪些分类呢? 按移位方向分类:①单向移位寄存器(包括左移、右移)②双向移位寄存器 按循环方式分类:①循环移位寄存器②非循环移位寄存器 按部位的不同分类:①逻辑移位寄存器②算术移位寄存器 按输入输出方式分类:①串入串出②串入并出③并入串出④并入并出

Loudrs的博客 1万+

ZYNQ实战:手把手教你用AXI4-Full IP核打通PL与PS的DDR数据通道

本文提供了一份详细的ZYNQ实战指南,手把手教你创建并使用具备AXI4-Full Master接口的自定义IP核,实现PL(可编程逻辑)通过AXI HP接口直接读写PS(处理系统)的DDR内存。文章涵盖了从Vivado硬件设计、IP核配置、地址映射到Vitis软件验证的完整流程,并深入解析了数据一致性(禁用Cache)等关键要点,旨在帮助开发者掌握ZYNQ异构计算中高效数据搬运的核心技术。

weixin_29193359的博客 284

黑马程序员 C语言基础:变量值互换的三种方法

一、使用临时变量int main (void) { int a = 10; int b = 20; int temp = b; b = a; a = temp; return 0; }

Stumm的专栏 1181

深入解析Apollo Lattice Planner:自动驾驶轨迹规划的核心算法与实践

本文深入解析了百度Apollo自动驾驶平台中的核心轨迹规划算法——Lattice Planner。文章详细阐述了其作为车辆“即时决策者”的工作原理,通过“采样-评估”的六步流程(Frenet坐标转换、状态采样、轨迹生成、硬约束过滤、代价函数打分及决策平滑),在复杂路况下实时规划出安全、舒适、高效的行驶轨迹。该算法是自动驾驶实现智能决策与精准控制的关键技术。

weixin_29090677的博客 830

C语言:三个数排序,函数交换

#C语言:排序 #include<stdio.h> void Swap(int *a , int *b) { int temp; if (*a > *b) { temp = *a; *a = *b ; *b = temp; } } void Sort(int *a,int *b,int *c) { Swap(a,b);// a < b Swap(a,c);// a < c Swap(b,c);// b < c } int main(in

qq_54127452的博客 1537

硬件单板类机考复习提纲

6、 功率晶体管低导通损耗时处于的状态(饱和状态、放大状态、截止状态)(放大器的采样频率特性)总结:元器件特性(电阻、电容、二极管、三极管、晶体、晶振、MOS、磁珠等)信号质量问题产生根因(单调性、边沿过缓、毛刺、回沟、抖动等)3、 几种电容容量范围大小(超级电容、钽电容、陶瓷电容、铝电容)66、背板连接器接触设计的接触顺序(先导向、再地针、最后信号针)28、逻辑电平接口的特性(CMOS、TTL、ECL、PECL)76、差分电平(lvpecl、RS-422/485、cml)

2303_79562407的博客 1万+

决策树(分类树、回归树)

决策树 前言:第一篇博客,最近看完决策树,想着归纳一下,也方便自己以后回顾。写的会比较全面一些,可能会有很多不太正确的地方,欢迎大家交流指正 : ) 决策树模型: 决策树模型是运用于分类以及回归的一种树结构。决策树由节点和有向边组成,一般一棵决策树包含一个根节点、若干内部节点和若干叶节点。决策树的决策过程需要从决策树的根节点开始,待测数据与决策树中的特征节点进行比较,并按照比较结果选...

你午睡了吗 9万+

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

C语言——实现两个数的交换(多种方法) 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)创建一个函数 //思路:将

半生瓜のblog 2万+

Stata实战:DID平行趋势检验完整操作指南(附reghdfe+coefplot代码)

本文提供了一份使用Stata进行DID平行趋势检验的完整实战指南。文章详细讲解了从数据准备、生成相对时间变量,到利用reghdfe命令构建动态效应模型,以及使用coefplot命令进行结果可视化的全流程操作。核心在于通过检验政策前交互项的显著性,验证处理组与对照组是否满足平行趋势假设,为后续因果推断奠定可靠基础。

weixin_29231725的博客 1381

c语言实现两个数的交换(3种方法)

一、描述:交换两个数字。 二、程序: 方法一:创建临时变量 #include<stdio.h> #include<windows.h> int main(){ int a = 0, b = 0; int temp = 0; printf("请输入两个数字:"); scanf_s("%d %d", &a, &b); printf("Before:a=...

qq_45328505的博客 2万+

从零构建知识图谱:本体工程与知识建模实战指南

本文是一份从零构建知识图谱的实战指南,重点阐述了知识建模与本体工程的核心地位。文章详细介绍了如何使用Protégé工具进行本体设计,包括定义领域、复用现有本体、构建类层次与属性约束,并讲解了如何利用D2RQ工具将关系数据库数据转换为RDF三元组,最终通过Apache Jena Fuseki搭建SPARQL端点进行知识查询与推理,让知识图谱真正“活”起来。

weixin_29057695的博客 572

把 SAP 输出稳稳落到 PDF:从 SPAD 前端打印到 ABAP 程序级转换的一套方法

摘要:本文介绍了三种在SAP系统中将报表输出转为PDF文件的方法。路线A通过SPAD配置前端输出设备,结合Windows打印机设置实现用户交互式PDF保存;路线B在SP01事务码中将已有Spool请求另存为PDF,适用于补救导出;路线C通过ABAP程序自动转换Spool为PDF,适合批量处理。文章详细说明了配置步骤,并针对常见问题(如乱码、文件格式错误等)提供了排查思路。三种方案分别适用于不同场景,用户可根据实际需求选择最合适的PDF导出方式。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 221

9.C语言之指针(3)交换两个数的值(深度解析),形参和实参

C语言经典程序,指针交换两个数的值,深度解析(通俗易懂),形参和实参是一个变量吗?

爱打羽毛球的程序员 9977

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

用计算机算法交换两个数的位置,两个数交换算法

两个数交换算法(包含不用第3个变量而直接交换的情况)2006-12-17 20:07对两个数进行交换,在C中可采用指针实现,而在C++可使用引用来实现,无论是用指针还是引用,都要借助第3个变量。本文将介绍两种直接交换的 算法******************************* 后附有完整算法和测试程序方法一:采用整数的加(减)法实现,属于算术运算void SwapWithAri( int...

weixin_42374596的博客 1441

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C语言 | 交换a、b值较好的方法?

交换a、b的值在C语言的学习中是很常见的问题。最常用的方法就是引入一个中间变量当做中间介质来交换a、b的值。代码如下:voidchange_ab(int*a,int*b) { ...

嵌入式大杂烩 8885

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

C语言用fun函数实现两个数的交换

#include <stdio.h> void fun(int *x,int *y)//定义fun函数,此时需要注意与main函数时的定义方式相同 { int t;//定义一个中间变量,用于让两个数交换留一个位置 t=*x,*x=*y,*y=t; } void main() { int a,b; scanf("%d %d",&a,&b);//定义两个交换的数 fun(&a,&b); printf("%d %d\n...

m0_68444149的博客 2868

c语言不用临时变量交换两个数程序分析

首先看这样一个程序 int a, b; a = a + b; b = a - b;    此时b = (a + b) - b = a;     (经过第一步a为a+b) a = a - b;    此时a = (a + b) - a = b;  (经过第二步时b已为a) 可见这个程序实现了a和b的交换。注意+和-互为逆运算,可以得到(a+b)-b=a,埋个伏笔先。 在看这个例子: i

Pegasus (http://ningning.today) 2279

输入两个数,按大小顺序输出

输入两个数,按由大到小的顺序输出 我刚开始学习C语言程序设计,对于这样简单的问题,我并不十分清楚。我写这篇博客,就是想请教各位,我这样理解对不对,敬请大家不吝赐教,本人将不胜感激。 首先,用最简单方法按大小顺序输出两个数,就是没有用函数,也没有用指针。请看代码: #include <...

weixin_46719333的博客 2万+

【C语言】交换两个数的位置(指针)

兼容手机端(贴图): 代码(内附注释): //指针--输入两个数,并交换两个数的位置 #include "stdio.h" int main() { //定义 int a,b,t,*p1,*p2; printf("Enter two integer Number:"); scanf("%d,%d",&a,&b); printf("...

Alan的博客 1万+

c语言中字符串交换位置,c如何实现字符串奇偶位置的互换

要求:不申请变量和空间反转字符串,用一个函数实现。VIA笔试题基本思路:从两头往中间做字符交换。字符串最后一个字符是'\0',表示结束,没有实际意义,可以将它当作中间变量,等处理完成后,再将最后一个字符置'\0'即可***********************************************************************void Reverse (char ...

weixin_39812224的博客 6084

3010:【例4.1】 交换两个数的位置(Scratch、C、C++)

3010:【例4.1】 交换两个数的位置(Scratch、C、C++)

青少年趣味编程 1025

C语言自定义函数Swap实现两个数的交换

通过swap函数的实现,我们可以简单的区分传值调用和传址调用,当我们使用的是传值调用的时候,函数的会创建临时变量去接收,新开辟了一片区域来存储数值,相当于拷贝了一份数值,对拷贝的值进行处理,自然不会影响到原本的数据。而当我们使用传址调用时,就可以通过地址准将地找到原本数据存储的位置从而进行修改。有任何问题还希望大家能够及时指出!初来乍到还有很多问题需要改进=.= 写的不好还望大家多多体谅=.=

QingFFFF的博客 896
上一篇: android webview js,javascript-在Android WebView中注入外部JS文件并...
下一篇: android bound service,Bound Services
竹谭
博客等级 码龄6年 42粉丝 94原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值