c語(yǔ)言中用函數(shù)交換兩個(gè)變量的值方法是先將變量賦值給中間變量,然后中間變量再賦值給另外一個(gè)變量,程序如下:
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名與空間、網(wǎng)站空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、南充網(wǎng)站維護(hù)、網(wǎng)站推廣。
#include "Stdio.h"
#include "Conio.h"
void swap(int x,int y)
{
int t,m;
t=x; ?//變量x賦值給中間變量t
m=y; ? ?//變量y賦值給中間變量m
x=m; ? ?//中間變量m賦值給變量x,將y的值賦值給了x。
y=t; ? ? ?//中間變量t賦值給變量y,將x的值賦值給了y。
}
main()
{
int a,b;
a=1,b=2;
swap(a,b); //調(diào)用交換函數(shù)
printf("%d,%d",a,b);
getch();
}
擴(kuò)展資料:
C語(yǔ)言的語(yǔ)法結(jié)構(gòu):
1、順序結(jié)構(gòu)
順序結(jié)構(gòu)的程序設(shè)計(jì)是最簡(jiǎn)單的,只要按照解決問(wèn)題的順序?qū)懗鱿鄳?yīng)的語(yǔ)句就行,它的執(zhí)行順序是自上而下,依次執(zhí)行。
例如:a = 3,b = 5,現(xiàn)交換a,b的值,這個(gè)問(wèn)題就好像交換兩個(gè)杯子里面的水,這當(dāng)然要用到第三個(gè)杯子,假如第三個(gè)杯子是c,那么正確的程序?yàn)椋篶 = a; a = b; b = c;執(zhí)行結(jié)果是a = 5,b = c = 3如果改變其順序,寫成:a = b; c = a; b =c;則執(zhí)行結(jié)果就變成a = b = c = 5,不能達(dá)到預(yù)期的目的,初學(xué)者最容易犯這種錯(cuò)誤。
順序結(jié)構(gòu)可以獨(dú)立使用構(gòu)成一個(gè)簡(jiǎn)單的完整程序,常見(jiàn)的輸入、計(jì)算、輸出三步曲的程序就是順序結(jié)構(gòu)。
2、選擇結(jié)構(gòu)
對(duì)于要先做判斷再選擇的問(wèn)題就要使用選擇結(jié)構(gòu)。選擇結(jié)構(gòu)的執(zhí)行是依據(jù)一定的條件選擇執(zhí)行路徑,而不是嚴(yán)格按照語(yǔ)句出現(xiàn)的物理順序。選擇結(jié)構(gòu)的程序設(shè)計(jì)方法的關(guān)鍵在于構(gòu)造合適的分支條件和分析程序流程,根據(jù)不同的程序流程選擇適當(dāng)?shù)倪x擇語(yǔ)句。
選擇結(jié)構(gòu)適合于帶有邏輯或關(guān)系比較等條件判斷的計(jì)算,設(shè)計(jì)這類程序時(shí)往往都要先繪制其程序流程圖,然后根據(jù)程序流程寫出源程序,這樣做把程序設(shè)計(jì)分析與語(yǔ)言分開(kāi),使得問(wèn)題簡(jiǎn)單化,易于理解。程序流程圖是根據(jù)解題分析所繪制的程序執(zhí)行流程圖。
3、循環(huán)結(jié)構(gòu)
循環(huán)結(jié)構(gòu)可以減少源程序重復(fù)書寫的工作量,用來(lái)描述重復(fù)執(zhí)行某段算法的問(wèn)題,這是程序設(shè)計(jì)中最能發(fā)揮計(jì)算機(jī)特長(zhǎng)的程序結(jié)構(gòu),C語(yǔ)言中提供四種循環(huán),即goto循環(huán)、while循環(huán)、do while循環(huán)和for循環(huán)。
四種循環(huán)可以用來(lái)處理同一問(wèn)題,一般情況下它們可以互相代替換,但一般不提倡用goto循環(huán),因?yàn)閺?qiáng)制改變程序的順序經(jīng)常會(huì)給程序的運(yùn)行帶來(lái)不可預(yù)料的錯(cuò)誤。
參考資料來(lái)源:百度百科-C語(yǔ)言
不知道你要交換的兩個(gè)變量類型,所以這里以整型數(shù)據(jù)交換為例,以下swap函數(shù)實(shí)現(xiàn)了交換兩個(gè)整型變量值的功能:
#include?stdio.h
//?交換給定指針指向整型變量的值。
//?參數(shù):
// a?-?指向第一個(gè)變量的指針
// b?-?指向第二個(gè)變量的指針
void?swap(int*?a,?int?*?b);
int?main(int?argc,?int?argv)
{
int?a?=?3,?b?=?5;
printf_s("交換前:a?=?%d,?b?=?%d\n",?a,?b);
swap(a,?b);
printf_s("交換后:a?=?%d,?b?=?%d\n",?a,?b);
return?0;
}
//?交換給定指針指向整型變量的值。
//?參數(shù):
// a?-?指向第一個(gè)變量的指針
// b?-?指向第二個(gè)變量的指針
void?swap(int*?a,?int*?b)
{
//?聲明一個(gè)臨時(shí)變量,保存第一個(gè)指針指向變量
//?的值。
//?其中?*a?是取出?a?指針指向變量的值
int?temp?=?*a;
//?將?b?指針指向的值賦值給?a?指針指向變量
(*a)?=?(*b);
//?將臨時(shí)變量?temp?中保存的?a?指針指向變量的值賦值給
//?b?指針指向的變量。
(*b)?=?temp;
}
以上代碼運(yùn)行結(jié)果如下:
以下代碼實(shí)現(xiàn)了使用宏定義作為模板,聲明不同類型交換函數(shù)的功能,以下以聲明double和float為例:
#include?stdio.h?
//?聲明一個(gè)函數(shù)代碼模板,邏輯參考?swap(int*?a,?int*?b)
#define?DEF_SWAP_FUNC(Type)?void?swap_##Type(Type*?a,?Type*?b)?\
{?\
Type?temp?=?(*a);?\
(*a)?=?(*b);?\
(*b)?=?temp;?\
}?
//?使用模板聲明并實(shí)現(xiàn)一個(gè)?double?類型變量交換函數(shù),函數(shù)名為?swap_double
DEF_SWAP_FUNC(double)
//?使用模板聲明并實(shí)現(xiàn)一個(gè)?float?類型變量交換函數(shù),函數(shù)名為?swap_float
DEF_SWAP_FUNC(float)
int?main(int?argc,?int?argv)
{
//?double?類型數(shù)據(jù)交換
double?da?=?5.6,?db?=?3.5;
printf_s("double?交換前:da?=?%lf,?db?=?%lf\n",?da,?db);
swap_double(da,?db);
printf_s("double?交換后:da?=?%lf,?db?=?%lf\n",?da,?db);
//?float?類型數(shù)據(jù)交換
float?fa?=?3.4,?fb?=?6.8;
printf_s("float?交換前:fa?=?%f,?fb?=?%f\n",?fa,?fb);
swap_float(fa,?fb);
printf_s("float?交換前:fa?=?%f,?fb?=?%f\n",?fa,?fb);
return?0;
}
運(yùn)行結(jié)果如下:
void
swap(int
*a,int*
b)
{
int
temp=0;
temp=*a;
*a=*b;
*b=temp;
}
因?yàn)槭侵羔?,只要更換指針內(nèi)的內(nèi)容就可以了;
還有一種是
換指針,就設(shè)a指向沒(méi)存A,b指向內(nèi)存B,交換后把b指向內(nèi)存A,把a(bǔ)指向內(nèi)存B
void
swap(int
*a,int*
b)
{
int
*temp;
temp=a;
a=b;
b=temp;
}