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));
}