要用函數(shù)實現(xiàn)兩個數(shù)的交換,則函數(shù)參數(shù)必須定義為指針形式,否則函數(shù)中對數(shù)值的修改將不會影響主調函數(shù),這是C語言的規(guī)則。
網站的建設成都創(chuàng)新互聯(lián)專注網站定制,經驗豐富,不做模板,主營網站定制開發(fā).小程序定制開發(fā),H5頁面制作!給你煥然一新的設計體驗!已為主動防護網等企業(yè)提供專業(yè)服務。
所以,以整型為例,自定義函數(shù)書寫如下:
void swap_int(int*a,int*b)
{
int t;
t = *a;
*a=*b;
*b=t;
}
#include"stdio.h"int swap(int *a,int *b){int temp;temp=*a;*a=*b;*b=temp;}
main(){int x,y;printf("請輸入x與y的值,用空格隔開\n");scanf("%d%d",x,y);printf("x=%d,y=%d\n",x,y);swap(x,y);printf("交換后\nx=%d,y=%d\n",x,y);}
擴展資料:
C語言是一門通用計算機編程語言,廣泛應用于底層開發(fā)。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環(huán)境支持便能運行的編程語言。
盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平臺的特性,以一個標準規(guī)格寫出的C語言程序可在許多電腦平臺上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業(yè)平臺。
二十世紀八十年代,為了避免各開發(fā)廠商用的C語言語法產生差異,由美國國家標準局為C語言制定了一套完整的美國國家標準語法,稱為ANSI C,作為C語言最初的標準。目前2011年12月8日,國際標準化組織(ISO)和國際電工委員會(IEC)發(fā)布的C11標準是C語言的第三個官方標準,也是C語言的最新標準,該標準更好的支持了漢字函數(shù)名和漢字標識符,一定程度上實現(xiàn)了漢字編程。
C語言是一門面向過程的計算機編程語言,與C++,Java等面向對象的編程語言有所不同。其編譯器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。
參考資料:百度百科-C語言
不知道你要交換的兩個變量類型,所以這里以整型數(shù)據(jù)交換為例,以下swap函數(shù)實現(xiàn)了交換兩個整型變量值的功能:
#include?stdio.h
//?交換給定指針指向整型變量的值。
//?參數(shù):
// a?-?指向第一個變量的指針
// b?-?指向第二個變量的指針
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?-?指向第一個變量的指針
// b?-?指向第二個變量的指針
void?swap(int*?a,?int*?b)
{
//?聲明一個臨時變量,保存第一個指針指向變量
//?的值。
//?其中?*a?是取出?a?指針指向變量的值
int?temp?=?*a;
//?將?b?指針指向的值賦值給?a?指針指向變量
(*a)?=?(*b);
//?將臨時變量?temp?中保存的?a?指針指向變量的值賦值給
//?b?指針指向的變量。
(*b)?=?temp;
}
以上代碼運行結果如下:
以下代碼實現(xiàn)了使用宏定義作為模板,聲明不同類型交換函數(shù)的功能,以下以聲明double和float為例:
#include?stdio.h?
//?聲明一個函數(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;?\
}?
//?使用模板聲明并實現(xiàn)一個?double?類型變量交換函數(shù),函數(shù)名為?swap_double
DEF_SWAP_FUNC(double)
//?使用模板聲明并實現(xiàn)一個?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;
}
運行結果如下:
交換函數(shù)很好寫。
比較難的讀文件。文件格式 與 讀語句要 相配。 特別是 多余 的 空行和回車鍵。
調試時用 printf 語句 檢查 讀得對不對。
fgets() 函數(shù)可用來讀整行的字符串,含回車鍵。
#include stdio.h
#includestdlib.h
void jh(char *a, char *b){
char x[100];
strcpy(x,a),strcpy(a,b),strcpy(b,x);
}
int main(){
FILE *fp;
int n,i,j;
char a[100];
char b[100];
char ch;
if((fp=fopen("2.2.txt","r"))==NULL){
printf("Error");
exit(0);
}
fgets(a,100,fp);
sscanf(a,"%d",n);
//printf("n=%d\n",n);
for(j=1;j=n;j++){
fgets(a[0],100,fp);
//printf("read a: %s",a);
fgets(b[0],100,fp);
// printf("read b: %s",b);
printf("Case %d\n",j);
jh(a,b);
printf("%s",a);
printf("%s",b);
fgets(a[0],100,fp); // 假定2組數(shù)間只有一個空白行,則用它跳過。
}
fclose(fp);
return 0;
}
void
swap(int
*a,int*
b)
{
int
temp=0;
temp=*a;
*a=*b;
*b=temp;
}
因為是指針,只要更換指針內的內容就可以了;
還有一種是
換指針,就設a指向沒存A,b指向內存B,交換后把b指向內存A,把a指向內存B
void
swap(int
*a,int*
b)
{
int
*temp;
temp=a;
a=b;
b=temp;
}