C语言中临时变量写在哪里,C语言中不允许创建临时变量,交换两个数的内容
在C语言中可以通过建立临时变量来实现两个变量的交换,当不允许建立临时变量时,应该怎样实现两变量的交换呢?
假设有两个变量num1和num2;下面通过两种方法进行分析。
方法一:利用加减法。具体算法分析如下:
由于 num1+num2-num1=num2;
num1+num2-num2=num1;
则将num1+num2赋给num1;num1-num2赋给num2;num1-num2赋给num1,这样就可以实现num1和num2两个数内容的交换。通过相同的思想,我们也可以将加减运算改为乘除运算,但此法存在缺陷。对于不能整除的两个数,设定的精度不同结果的误差就不同。
代码如下:#include
int main()
{
int num1=10,num2=20;
num1=num1+num2;
num2=num1-num2;
num1=num1-num2;
/*相同方法:将“+”“-”换成“*”“/”*/
printf("%d %d",num1,num2);
return 0;
}
方法二:利用按位异或法。C语言中异或运算符“^”也称为“XOR”运算符,对于二进制数据它的运算规则是:0^0=0;0^1=1;1^0=1;1^1=1;若参加运算的两个数同号,则结果为0(假);异号时结果为1(真)。
具体算法分析如下:num1^num2^num1=num2;
num1^num2^num2=num1;
则将num1^num2赋给num1;num1^num2赋给num2;num1^num2赋给num1,这样就可以实现num1和num2两个数内容的交换。
例如:两个变量a=2和b=3.
a=2 00000000 00000000 00000000 00000010
b=3 00000000 00000000 00000000 00000011
a=a^b=2^3 00000000 00000000 00000000 00000001
b=a^b=2^3^3 00000000 00000000 00000000 00000010
a=a^b=2^3^2 00000000 00000000 00000000 00000011
此时两个数a,b的内容交换了。
代码如下:#include
int main()
{
int num1=35,num2=56;
num1=num1^num2;
num2=num1^num2;
num1=num1^num2;
/*异或,此法优于用加减法或乘除法*/
printf("num1=%d,num2=%d",num1,num2);
return 0;
}
小知识:如何动态求取数组大小?
例如:对于数组不知道其大小,可通过sizeof求其长度。sizeof运算符可以动态计算类型大小,
对于数组a[],它的数组大小可用sizeof(a)/sizeof(a[0]),求取对于整型数组sizeof(a[0])=4。
C语言中临时变量写在哪里,C语言中不允许创建临时变量,交换两个数的内容相关推荐
- 不允许创建临时变量,交换两个数的内容
不允许创建临时变量,交换两个数的内容 #include <stdio.h> int main(int argc, char *argv[]) { int a = 10, b = 100; ...
- C++实现1.交换两个整形变量的内容.2.不创建临时变量的条件下,交换两个数的内容.3.求是个整数中的最大值.4.将三个数按从大到小输出.5.求两个数的最大公约数.
/ //给定两个整型变量的值,并交换他们的值 int main(){ int a = 10; int b = 20; int temp = a; //创建一个临时变量,来做交换值的中间媒介 a = b ...
- 不创建临时变量交换两个数,这才是高手
不创建临时变量交换两个数?这才是高手 1.基本介绍 1.代码编写 总结 1.基本介绍 交换两个数,想必大家都很熟悉,也很容易写出来就可以实现,即创建一个临时变量,就可以完成两个数的交换,然后更牛逼的大 ...
- C语言异或交换两个数的原理解析-大厂面试题:不使用第三变量交换两个数的值
常用操作交换两个数的值 常用的交换两个数值的方法一般是采用第三个变量,这种方法简单易懂,用代码举例 int main() {//交换两个整形变量int a = 3;int b = 5;int c = ...
- 【java】java 如何不使用第三个变量来交换两个数的值
文章目录 1.概述 2.方案 2.1 算术运算 2.2 位运算 1.概述 今天是一个悲伤的一天,我的悲伤逆流成河.非常非常的悲伤.主要是有这个一个面试题.如何不使用第三个变量来交换两个数的值. 考官说 ...
- C语言拆分一个三位数。以及交换两个数(常规法复习加指针法学习)
给一个三位数,要求拆分出百位十位,个位.然后输出. 以前我们在水仙花那次求水仙花数 提到过经典的取法 我们再次展示一下: #include<stdio.h> int main() {int ...
- C语言实现交换两个数
方法一:最普通方法--建立临时变量 思路分析:建立一个临时变量,通过temp=a,a=b,b=temp来实现交换. 缺点:这只是一种假交换,由于这只是在函数内部临时变量间的交换,所以当函数退出,函数栈 ...
- c语言用指针两个字母交换,c语言指针基础之用指针交换两个数(代码实例)
用指针交换两个数: void swap(int *p,int *q) { int temp; temp = *p; *p = *q; *q = temp; } int main() { int a = ...
- 用按位异或运算符交换两个数,不引入第三个变量
2019独角兽企业重金招聘Python工程师标准>>> 用按位异或运算符交换两个数,不引入第三个变量 void swap(int &a , int &b) { a = ...
最新文章
- java中使用MD5进行计算摘要
- SQL validation failed.Column ‘content‘ not found in any table
- php 断点续传 暂停,PHP 断点续传实例详解
- java 字符串是否包含字符串_在Java中,如何检查字符串是否包含子字符串(忽略大小写)?...
- SpringMVC 文件上传及下载
- Oracle11g安装完成后给用户解锁
- cher怎么翻译中文_中文翻译法语收费标准是怎么定的
- hdu 4928 Series 2 (优化+模拟)
- android app自动锁屏,安卓手机锁屏后程序自动关闭,怎么设置手机app允许锁屏后台运行...
- HorizontalScrollView 仿真 tabLayout
- 冰点还原安装了找不到图标,或许该这样!
- 冬瓜哥对时间和空间的理解方式—时空参悟(上)
- .frm mysql_mysqlfrm使用
- 余压监控系统保证火灾发生时消防疏散通道的通畅,为大型高层建筑的安全运行和人民生命财产安全保驾护航
- 如何在网站里插入视频
- 变中求生 ——频繁变化的团队如何打造团队文化
- 使用 canvas 画矩形,实现橡皮擦功能
- python处理adb截屏_《自拍教程38》Python_adb一键截屏
- XaaC一切皆计算机 和 XaaS一切皆服务
- Material UI 带复选框表格获取选中值(索引)