給定兩個整形變量的值,將兩個值的內容進行交換

交換a,b兩個變量的值,顧名思義,就是將b的值賦給a,之後再將a的值賦予b,那麼問題就出現了,將b的值賦予a時b的值已經發生了變化。這時就要定義一箇中間變量來存放b的值,利用中間變量來進行交換。

int main()  
{
int old_num = 0;
int new_num = 0;
int item = 0;

printf("輸入兩個數:");
scanf("%d %d",&old_num, &new_num);

item = old_num;     //利用中間變量來進行交換;
old_num = new_num;
new_num = item;

printf("交換之後:%d %d", old_num, new_num);
 
system("pause");
return 0;
}

也可以利用地址的訪問進行交換。什麼是變量的定義:所謂的定義就是(編譯器)創建一個對象,爲這個對象分配一塊內存並給它取上一個名字,這個名字就是我們經常說的變量名。這個方法就是利用指針找到變量的地址並訪問變量所在內存進行兩值的交換,還需要創建一箇中間變量來存放其中一個變量的值。就好比有兩瓶醋a,b,將他們瓶中的液體進行交換,這時候就需要一個空瓶子c來充當中間變量,第一步,將其中一瓶醋a倒入空瓶c中;第二步,將瓶子b中的醋倒入a中;第三步,將c中的醋倒入b中;這樣就大功告成了。

int main()  
{
int old_num = 0;
int new_num = 0;
int item = 0;
int *p1 = &old_num;
int *p2 = &new_num;

printf("輸入兩個數:");
scanf("%d %d",&old_num,  &new_num);

item = *p1;
*p1 =*p2;
*p2 = item;

printf("交換之後:%d %d", old_num, new_num);
 
system("pause");
return 0;
}


上面兩種方法都需要申請一箇中間變量,那麼有沒有不需要申請中間變量就可以交換兩個整形變量的值呢?

方法一:

int main()  
{
int a = 5;
int b = 8;

printf("交換之前:a=%d b=%d \n", a, b);

a = a - b;        //a = -3
b = b + a;       //b = 5;
a = b - a;        //a = 8;


printf("交換之後:a=%d b=%d", a, b);
 
system("pause");
return 0;
}

方法二:異或法

int main()  
{
int a = -1;
int b = -5;

printf("交換之前:a=%d b=%d \n", a, b);

a = a^b;  
b = a^b;        //a^b^b=a^(b^b)=a^0=a;
a = a^b;       //a^a^b=0^b=b;


printf("交換之後:a=%d b=%d", a, b);
 
system("pause");
return 0;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章