1. 在VC++中如何不通过中间变量交换两个变量的值
可以这样,比如要交换a和b的值
a=a+b;/*a变为a与b的和*/
b=a-b;/*b变为a与b的和减去b,就是a*/
a=a-b;/*a变为a与b的和减去a(因为现在b的值是原来a的值),就是原来b的值*/
2. 用c语言写一个程序,题目是这样的:互换两个变量的值,转换过程中不能用到中间变量,如何写
int main()
{
int a, b;
a=10; b= 3;
printf("Before swap: a=%d, b=%d\n", a, b);
a = a^b;
b = a^b;
a = a^b;
printf("After swap: a=%d, b=%d\n", a, b);
return 0;
}
无溢出危险
3. 不用中间变量交换 a ,b(三种方法)
1、加减法:该方法可以交换整型和浮点型数值的变量,但在处理浮点型的时候有可能出现精度的损失
a = a + b;
b = a - b;
a = a - b;
2、异或法:可以完成对整型变量的交换,对于浮点型变量它无法完成交换。
a = a^b;
b = a^b;
a = a^b;
3、乘除法:可以处理整型和浮点型变量,但在处理浮点型变量时也存在精度损失问题。而且乘除法比加减法要多一条约束:b必不为0。
a = a * b
b = a / b
a = a / b
(3)c语言不通过中间变量交换ab扩展阅读:
变数或变量,是指没有固定的值,可以改变的数。变量以非数字的符号来表达,一般用拉丁字母。变量是常数的相反。变量的用处在于能一般化描述指令的方式。结果只能使用真实的值,指令只能应用于某些情况下。变量能够作为某特定种类的值中任何一个的保留器。
4. 不用中间变量交换a和b的值,有哪些方法
不行。。 首先 a=b,将b赋值给a,此时a的值已经变为b的值, (a=b)*0为0,再加上a(此时a的值已经是b了),所以此语句的结果什么都没做。。比如a = 5,b=4.最后结果是4.
一种方法是 a = a+b; b=a-b; a=a-b;此时a,b值互换。。。
5. 定义两个变量ab如何用c语言编程使两个变量的值能相互交换
1、首先,就是最基本的知识,写头文件,函数声明,定义变量。
6. 在C语言中用a^=b^=a^=b为何能交换两个变量而不借助中间变量
a^=b^=a^=b; 可以写成 a=a^b; b=b^a;//这句就相当于b=b^a^b就相当于b=a了 a=a^b;//同理.....
7. 用C语言来实现,不通过中间变量,交换两个整形变量的值
有两种方式:
1 通过加法交换a,b的值。
设a,b原始值为A,B
a +=b; //这时a=A+B; b=B
b = a-b; //b = a-b=A
a = a-b;// a=a-b = B
实现交换。
2 通过异或。
对于任意一个值,用同一个值两次异或后结果为原值。
设a,b原始值为A,B
a=a^b; //a=A^B;
b = a^b; //b = A
a=a^b; // a=B
实现交换。
8. C语言中,怎样不用中间变量而互换两个变量的值呢
有两种方式可以不使用中间变量,交换同类型的变量a,b的值:
1 .使用加法操作
a+=b;
b=a-b;
a -= b;
2 .使用异或操作:
a^=b;
b^=a;
a^=b;
9. 如何不用变量交换两个数的数值求大神指导,谢谢。用c语言实现
是问如何不用额外的变量交换两个数的数值吗?
整数类型
1)
位运算
,异或运算
/*
异或运算的性质:
b=
a
^(a^
b)
;a=
b
^(a^
b);
*/
typedef
int
interType;
void
swapint(intType
*a,intType
*b)
{
/*
*b=
*a
^(*a^
*b)
;
*a=
*b
^(*a^
*b);
*/
*a
^=
*b;
*b
^=
*a;
/*
此时
,完成
*b
=
*a
;
即
*b=
*a
^(*a^
*b)
*/
*a
^=
*b;
/*
此时,完成
*a
=
*b
;
即
*a=
*b
^(*a^
*b);交换完成
*/
}
2)
任意数据,还是利用异或运算,把数据当做
字符数组
,逐个字节的交换。
void
swapByte(unsigned
char
*a,unsigned
char
*b)
{
*a
^=
*b;
*b
^=
*a;
/*
此时
,完成
*b
=
*a
;
即
*b=
*a
^(*a^
*b)
*/
*a
^=
*b;
/*
此时,完成
*a
=
*b
;
即
*a=
*b
^(*a^
*b);交换完成
*/
}
void
swap(void
*p,viod*q,
size_t
size)
{
/*
还是要定义变量的,只是这个变量不是交换的中介。*/
size_t
i;
for(i=0;i<size;i++)
swapByte((unsigned
char
*)p+i,(unsigned
char
*)q+i));
}