c语言:4种方法;交换两个整数的位置(包括引入第三方变量和不引入第三方变量)
2016-05-29 13:34
579 查看
方法一:创建临时变量
程序:
#include <stdio.h>
void swap(int *p1, int *p2)
{
int t = *p1;
*p1 = *p2;
*p2 = t;
}
int main()
{
int num1 = 2;
int num2 = 4;
int tmp = 0;
printf("num1=%d\n", num1);
printf("num2=%d\n", num2);
swap(&num1, &num2);
printf("num1=%d\n", num1);
printf("num2=%d\n", num2);
return 0;
}
结果:
num1=2
num2=4
num1=4
num2=2
请按任意键继续. . .
方法二:异或法
程序:
#include <stdio.h>
int main()
{
int num1 = 2;
int num2 = 4;
printf("num1=%d\n", num1);
printf("num2=%d\n", num2);
//num1^num2;
//011
//101
//110
//异或法可以完成对整型变量的交换,对于浮点型变量它无法完成交换
num1 = num1^num2;
num2 = num1^num2;
num1 = num1^num2;
printf("num1=%d\n", num1);
printf("num2=%d\n", num2);
return 0;
}
异或法的改进:
程序:
#include <stdio.h>
int main()
{
int num1 = 2;
int num2 = 4;
printf("num1=%d\n", num1);
printf("num2=%d\n", num2);
num1^=num2^= num1^=num2;
printf("num1=%d\n", num1);
printf("num2=%d\n", num2);
return 0;
}
结果:
num1=2
num2=4
num1=4
num2=2
请按任意键继续. . .
方法三:加减
程序:
#include <stdio.h>
int main()
{
int num1 = 3;
int num2 = 12;
printf("num1=%d\n", num1);
printf("num2=%d\n", num2);
num1 = num1 + num2;
num2 = num1 - num2;
num1 = num1 - num2;
//可以交换整型和浮点型数值的变量,但在处理浮点型的时候有可能出现精度的损失
printf("num1=%d\n", num1);
printf("num2=%d\n", num2);
return 0;
}
结果:
num1=3
num2=12
num1=12
num2=3
请按任意键继续. . .
精度损失:
程序:
#include <stdio.h>
int main()
{
float num1 = 3.123456;
float num2 = 1234567.000000;
printf("num1=%f\n", num1);
printf("num2=%f\n", num2);
num1 = num1 + num2;
num2 = num1 - num2;
num1 = num1 - num2;
//可以交换整型和浮点型数值的变量,但在处理浮点型的时候有可能出现精度的损失
printf("num1=%f\n", num1);
printf("num2=%f\n", num2);
return 0;
}
结果报错:
num1=3.123456
num2=1234567.000000
num1=1234567.000000
num2=3.125000
请按任意键继续. . .
修改为双精度型double,范围加大,运行结果正确:
num1=3.123456
num2=1234567.000000
num1=1234567.000000
num2=3.123456
请按任意键继续. . .
方法四:乘除
程序:
#include <stdio.h>
int main()
{
int num1 = 2;
int num2 = 4;
printf("num1=%d\n", num1);
printf("num2=%d\n", num2);
//同加减法一样,可以交换整型和浮点型数值的变量,但在处理浮点型的时候有可能出现精度的损失
num1 = num1*num2;
num2 = num1 / num2;
num1 = num1 / num2;
printf("num1=%d\n", num1);
printf("num2=%d\n", num2);
return 0;
}
结果:
num1=2
num2=4
num1=4
num2=2
请按任意键继续. . .
本文出自 “岩枭” 博客,请务必保留此出处http://yaoyaolx.blog.51cto.com/10732111/1715547
程序:
#include <stdio.h>
void swap(int *p1, int *p2)
{
int t = *p1;
*p1 = *p2;
*p2 = t;
}
int main()
{
int num1 = 2;
int num2 = 4;
int tmp = 0;
printf("num1=%d\n", num1);
printf("num2=%d\n", num2);
swap(&num1, &num2);
printf("num1=%d\n", num1);
printf("num2=%d\n", num2);
return 0;
}
结果:
num1=2
num2=4
num1=4
num2=2
请按任意键继续. . .
方法二:异或法
程序:
#include <stdio.h>
int main()
{
int num1 = 2;
int num2 = 4;
printf("num1=%d\n", num1);
printf("num2=%d\n", num2);
//num1^num2;
//011
//101
//110
//异或法可以完成对整型变量的交换,对于浮点型变量它无法完成交换
num1 = num1^num2;
num2 = num1^num2;
num1 = num1^num2;
printf("num1=%d\n", num1);
printf("num2=%d\n", num2);
return 0;
}
异或法的改进:
程序:
#include <stdio.h>
int main()
{
int num1 = 2;
int num2 = 4;
printf("num1=%d\n", num1);
printf("num2=%d\n", num2);
num1^=num2^= num1^=num2;
printf("num1=%d\n", num1);
printf("num2=%d\n", num2);
return 0;
}
结果:
num1=2
num2=4
num1=4
num2=2
请按任意键继续. . .
方法三:加减
程序:
#include <stdio.h>
int main()
{
int num1 = 3;
int num2 = 12;
printf("num1=%d\n", num1);
printf("num2=%d\n", num2);
num1 = num1 + num2;
num2 = num1 - num2;
num1 = num1 - num2;
//可以交换整型和浮点型数值的变量,但在处理浮点型的时候有可能出现精度的损失
printf("num1=%d\n", num1);
printf("num2=%d\n", num2);
return 0;
}
结果:
num1=3
num2=12
num1=12
num2=3
请按任意键继续. . .
精度损失:
程序:
#include <stdio.h>
int main()
{
float num1 = 3.123456;
float num2 = 1234567.000000;
printf("num1=%f\n", num1);
printf("num2=%f\n", num2);
num1 = num1 + num2;
num2 = num1 - num2;
num1 = num1 - num2;
//可以交换整型和浮点型数值的变量,但在处理浮点型的时候有可能出现精度的损失
printf("num1=%f\n", num1);
printf("num2=%f\n", num2);
return 0;
}
结果报错:
num1=3.123456
num2=1234567.000000
num1=1234567.000000
num2=3.125000
请按任意键继续. . .
修改为双精度型double,范围加大,运行结果正确:
num1=3.123456
num2=1234567.000000
num1=1234567.000000
num2=3.123456
请按任意键继续. . .
方法四:乘除
程序:
#include <stdio.h>
int main()
{
int num1 = 2;
int num2 = 4;
printf("num1=%d\n", num1);
printf("num2=%d\n", num2);
//同加减法一样,可以交换整型和浮点型数值的变量,但在处理浮点型的时候有可能出现精度的损失
num1 = num1*num2;
num2 = num1 / num2;
num1 = num1 / num2;
printf("num1=%d\n", num1);
printf("num2=%d\n", num2);
return 0;
}
结果:
num1=2
num2=4
num1=4
num2=2
请按任意键继续. . .
本文出自 “岩枭” 博客,请务必保留此出处http://yaoyaolx.blog.51cto.com/10732111/1715547
相关文章推荐
- c语言:给十个整数比较大小
- 熟悉一下C语言中的const
- C++实验6-矩阵求和
- C++基础<01>—C++初识
- 一道关于重载的例子
- #define st(x) do { x } while (__LINE__ == -1)及“\”分析
- dev C/C++运行结果一闪而过的解决
- C/C++上机指南
- C++11智能指针
- 第十四周项目 阅读程序 3
- 第十四周项目 阅读程序 2
- C++中能否通过内嵌汇编修改const常量的值?
- 第十四周项目 阅读程序 1
- 第十四周项目 3 数组类模板
- 第十四周项目 2.2 两个成员的类模板 (2)
- 第十四周项目2.1 两个成员的类模板 (1)
- 第十四周项目 1 排序函数模板
- leetcode #52 in cpp
- c++11学习 override 和 final 关键字
- fatal error C1001: INTERNAL COMPILER ERROR (compiler file 'msc1.cpp', line 1)记录