4.3 函數的調用與參數

創新互聯長期為成百上千客戶提供的網站建設服務,團隊從業經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯網生態環境。為昌寧企業提供專業的成都網站制作、做網站,昌寧網站改版等技術服務。擁有10余年豐富建站經驗和眾多成功案例,為您定制開發。
如果一個函數要使用參數,它就必須定義接受參數值的變量。
4.3.1 形式參數與實際參數
函數定義時填入的參數我們稱之為形式參數,簡稱形參,它們同函數內部的局部變量作用相同。形參的定義是在函數名之后和函數開始的花括號之前。
調用時填入的參數,我們稱之為實際參數,簡稱實參。
必須確認所定義的形參與調用函數的實際參數類型一致,同時還要保證在調用時形參與實參的個數出現的次序也要一一對應。如果不一致,將產生意料不到的結果。與許多其它高級語言不同,(是健壯的,它總要做一些甚至你不希望的事情,幾乎沒有運行時錯誤檢查,完全沒有范圍檢測。作為程序員,必須小心行事以保證不發生錯誤,安全運行。
4.3.2 賦值調用與引用調用
一般說來,有兩種方法可以把參數傳遞給函數。第一種叫做“賦值調用”(call by value),這種方法是把參數的值復制到函數的形式參數中。這樣,函數中的形式參數的任何變化不會影響到調用時所使用的變量。
把參數傳遞給函數的第二種方法是“引用調用”(call by reference)。這種方法是把參數的地址復制給形式參數,在函數中,這個地址用來訪問調用中所使用的實際參數。這意味著,形式參數的變化會影響調用時所使用的那個變量(詳細內容請參見后續章節)。
除少數情況外,C語言使用賦值調用來傳遞參數。這意味著,一般不能改變調用時所用變量的值。請看例4 - 9。
[例4 - 9]
main ( )
{
int t =10;
printf("%d %d ",sqr(t),t); /* sqr(t)是函數調用,t是實參* /
}
int sqr(x) /* 函數定義,x是形式參數* /
int x;
{
x = x * x;
return (x);
}
在這個例子里,傳遞給函數sqr( )的參數值是復制給形式參數x的,當賦值語句x = x * x執行時,僅修改局部變量x。用于調用sqr( )的變量t,仍然保持著值10。
執行程序:
100 10
切記,傳給函數的只是參數值的復制品。所有發生在函數內部的變化均無法影響調用時使用的變量。
4.4 遞歸
C語言函數可以自我調用。如果函數內部一個語句調用了函數自己,則稱這個函數是“遞歸”。遞歸是以自身定義的過程。也可稱為“循環定義”。
遞歸的例子很多。例如定義整數的遞歸方法是用數字1,2,3,4,5,6,7,8,9加上或減去一個整數。例如,數字1 5是7 + 8;數字2 1是9 + 1 2; 數字1 2是9 + 3。
一種可遞歸的計算機語言,它的函數能夠自己調用自己。一個簡單的例子就是計算整數階乘的函數factor( )數N的階乘是1到N之間所有數字的乘積。例如3的階乘是1×2×3,即是6。
factor( )和其等效函數fact( )如例4 - 1 0所示。
[例4 - 1 0 ]
factor(n) /* 遞歸調用方法* /
int n;
{
int answer;
if (n==1)
return (1);
answer=factor(n-1) * n; /* 函數自身調用* /
return(answer);
}
[例4 - 11 ]
fact(n) /* 非遞歸方法* /
int n;
{
int t,a n s w e r;
answer = 1;
for (t=1; t = n; t ++)
answer = answer * t;
return(answer);
}
非遞歸函數fact( )的執行應該是易于理解的。它應用一個從1開始到指定數值結束的循環。
在循環中,用“變化”的乘積依次去乘每個數。
factor( )的遞歸執行比fact( )稍復雜。當用參數1調用factor( )時,函數返回1;除此之外的其它值調用將返回factor(n-1) * n這個乘積。為了求出這個表達式的值,用( n - 1)調用factor( )一直到n等于1,調用開始返回。
計算2的階乘時對factor( )的首次調用引起了以參數1對factor( )的第二次調用。這次調用返回1,然后被2乘(n的初始值),答案是2(把printf( )語句插入到factor ( )中,察看各級調用及其中間答案,是很有趣的)。
對于C語言中的函數類型,一般可以分為以下兩類:
1. 庫函數(Library Function):也稱為內置函數(Built-in Function),是由C語言提供的、已經封裝好的函數。庫函數通常具有標準化、通用化的特點,包括數學運算、字符串處理、文件操作等方面。例如`printf()`和`scanf()`是C語言中常用的庫函數。
2. 用戶自定義函數(User-Defined Function):也稱為外置函數(External Function),是程序員根據需求自行編寫的函數。用戶自定義函數可以將某一段需要重復使用的代碼封裝成一個函數,在其他地方調用該函數即可實現相同的功能,起到了復用代碼的作用。在需要多次執行特定任務時,使用自定義函數可以使程序結構更加清晰、易于理解。
h:表示短整數(short?int)。
%d:接受整數值并將它表示為有符號的十進制整數
%hd:實際上就是輸出一個短整數。
相關的還有下面的代碼
l ?: 如果與d合起來使用,表示長整數,如果與f合起來使用,表示雙精度浮點數。
擴展資料:
c語言中的其他函數
數學函數
long labs(long n) 返回長整型參數n的絕對值
double?frexp(double value,int *eptr) 返回value=x*2n中x的值,n存貯在eptr中
double?ldexp(double value,int exp); 返回value*2exp的值
字符庫函數
int?isascii(int ch) 若ch是字符(ASCII碼中的0-127)返回非0值,否則返回0
參考資料來源: 百度百科-C語言函數
C語言庫函數,常用庫函數有:
1、scanf格式輸入函數
2、printf格式輸出函數
3、systemdos命令函數
4、sort排序
5、main主函數
6、fgets文件讀取字符串函數
7、fputs文件寫入字符串函數
8、fscanf文件格式讀取函數
9、fprintf文件格式寫入函數
10、fopen打開文件函數
11、getchar輸入字符函數
12、putchar輸出字符函數
13、malloc動態申請內存函數
14、free釋放內存函數
15、abs求絕對值數學函數
16、sqrt求平方根數學函數
擴展資料
語言組成:
1、數據類型
C的數據類型包括:整型、字符型、實型或浮點型(單精度和雙精度)、枚舉類型、數組類型、結構體類型、共用體類型、指針類型和空類型。
2、常量與變量
常量其值不可改變,符號常量名通常用大寫。
變量是以某標識符為名字,其值可以改變的量。標識符是以字母或下劃線開頭的一串由字母、數字或下劃線構成的序列,請注意第一個字符必須為字母或下劃線,否則為不合法的變量名。變量在編譯時為其分配相應存儲單元。
3、數組
如果一個變量名后面跟著一個有數字的中括號,這個聲明就是數組聲明。字符串也是一種數組。它們以ASCII的NULL作為數組的結束。要特別注意的是,方括內的索引值是從0算起的。
4、指針
如果一個變量聲明時在前面使用 * 號,表明這是個指針型變量。換句話說,該變量存儲一個地址,而 *(此處特指單目運算符 * ,下同。C語言中另有 雙目運算符 *) 則是取內容操作符,意思是取這個內存地址里存儲的內容。指針是 C 語言區別于其他同時代高級語言的主要特征之一。
參考資料來源:百度百科-函數
                網站名稱:c語言函數課件 C語言函數課件
                
                文章來源:http://www.yijiale78.com/article42/ddjgehc.html
            
成都網站建設公司_創新互聯,為您提供面包屑導航、建站公司、域名注冊、自適應網站、電子商務、關鍵詞優化
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯