c語言寫重載函數(shù):
專注于為中小企業(yè)提供成都網站建設、網站制作服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)城子河免費做網站提供優(yōu)質的服務。我們立足成都,凝聚了一批互聯(lián)網行業(yè)人才,有力地推動了上千余家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網站建設實現(xiàn)規(guī)模擴充和轉變。
首先明確重載函數(shù)的定義:在相同的聲明域中的函數(shù)名相同的,而參數(shù)表不同的,即通過函數(shù)的參數(shù)表而唯一標識并且來區(qū)分函數(shù)的一種特殊的函數(shù)。
當將要定義一組函數(shù),使它們執(zhí)行一系列的操作,但是它們是應用在不同的參數(shù)類型上的。此時可以選擇重載函數(shù)。
例如:
上面的三個函數(shù)都可以大概地說成判斷一組數(shù)中的最大值,對于函數(shù)的用戶來說,他們并不關心函數(shù)定義的細節(jié),也就是說他們不關心判斷兩個整數(shù)的大小和判斷數(shù)組(vector容器)數(shù)的大小應該使用不同的函數(shù),而對于程序的設計者來說這可是不得不想到的。程序員必須記住并查找每個函數(shù)名。而函數(shù)的重載把程序員從這種問題的復雜性中解放了出來,C++提供了這種支持。
上面的三個比較大小的函數(shù)可以定義成:
通過參數(shù)就可以一眼分辨不同的函數(shù)。
#include stdio.h
#includestring.h
int main(void) {
char echo[100] = {0};
// 你的代碼
while(1)//無限循環(huán)
{
gets(echo);
if(strcmp(echo,"quit")==0)//循環(huán)終止的條件
break;
printf("%s\n",echo);
}
return 0;
}
文件中保存的數(shù)據(jù)有實型有整型,則在讀取數(shù)據(jù)時,均按浮點數(shù)據(jù)讀取就好了。
參考代碼:
#include stdio.h
int main()
{
FILE *fp ;
int i,n;
double a[100];
fp=fopen("data.txt", "r") ;
if ( !fp )
{
printf("open file error");
return -1;
}
i=0;
while( i100 ) //控制不能超過數(shù)組的大小
{
if ( fscanf(fp, "%lf",a[i] )!= 1 ) //按浮點數(shù)讀取數(shù)據(jù)
break;
i++;
}
n=i;
for( i=0;in;i++ ) //輸出讀到的結果
printf("%g\n", a[i] );
fclose(fp);
return 0;
}
fwrite
功能說明
將數(shù)據(jù)寫至文件
表頭文件
stdio.h
函數(shù)定義
size_t fwrite (const void *ptr, size_t size, size_t nmemb, FILE *stream)
函數(shù)說明
fwrite()用于將數(shù)據(jù)寫入文件中。參數(shù)stream為已打開文件的文件類型指針;ptr為指向存放寫入數(shù)據(jù)內存的指針;總共寫入nmemb個單元的數(shù)據(jù),每單元有size個字節(jié)。
返 回 值
函數(shù)調用成功返回實際寫入的數(shù)據(jù)單元的數(shù)目;失敗或已到文件尾時,可能返回一個比參數(shù)nmemb小的值。
相關函數(shù)
fopen,fread,fseek
C語言中的POW函數(shù)使用:
#includestdio.h
#defineACCURACY100
doublefunc1(doublet,intn);
doublefunc2(doubleb,intn);
doublepow2(doublea,doubleb);
intmain(){
printf("%lf",pow2(5.21,4.11));
return0;
}
doublepow2(doublea,doubleb){
if(a==0b0){
return0;
}
elseif(a==0b=0){
return1/0;
}
elseif(a0!(b-(int)b0.0001||(b-(int)b0.999))){
return1/0;
}
if(a=2a=0){
doublet=a-1;
doubleanswer=1;
for(inti=1;iACCURACY;i++){
answer=answer+func1(t,i)*func2(b,i);
}
returnanswer;
}
elseif(a2){
inttime=0;
while(a2){
a=a/2;
time++;
}
returnpow2(a,b)*pow2(2,b*time);
}
else{
if((int)b%2==0){
returnpow2(-a,b);
}
else{
return-pow2(-a,b);
}
}
}
doublefunc1(doublet,intn){
doubleanswer=1;
for(inti=0;in;i++){
answer=answer*t;
}
returnanswer;
}
doublefunc2(doubleb,intn){
doubleanswer=1;
for(inti=1;i=n;i++){
answer=answer*(b-i+1)/i;
}
returnanswer;
}
擴展資料
C++提供以下幾種pow函數(shù)的重載形式:
doublepow(doubleX,intY);
floatpow(floatX,floatY);
floatpow(floatX,intY);
longdoublepow(longdoubleX,longdoubleY);
longdoublepow(longdoubleX,intY);
使用的時候應合理設置參數(shù)類型,避免有多個“pow”實例與參數(shù)列表相匹配的情況。
其中較容易發(fā)生重載的是使用形如:
intX,Y;
intnum=pow(X,Y);
這是一個比較常用的函數(shù),但是編譯器會提醒有多個“pow”實例與參數(shù)列表相匹配。
可以使用強制類型轉換解決這個問題:num=pow((float)X,Y);
前面弄的那個格式錯亂了!所以重新弄了一遍,這次應該沒問題了!
(1)無參函數(shù)的定義一般形式:
類型說明符 函數(shù)名()
{
類型說明符
語句
}
例如: void Hello()
{
printf("Hello,world");
}
(2)有參函數(shù)的定義一般形式:
類型說明符 函數(shù)名(形式參數(shù)表)
{
類型說明符
語句
}
例如: int max(int a,int b)
{
if(ab)
return a;
else
return b;
}
其中類型說明符指明了本函數(shù)的類型,函數(shù)的類型實際上是函數(shù)返回值的類型,它們通常是C語言的
基本數(shù)據(jù)類型.