您好,登錄后才能下訂單哦!
本文小編為大家詳細(xì)介紹“C語言函數(shù)的使用方法是什么”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“C語言函數(shù)的使用方法是什么”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識(shí)吧。
在定義函數(shù)時(shí),一個(gè)函數(shù)內(nèi)不能再定義另一個(gè)函數(shù),即不能嵌套定義,但可以嵌套調(diào)用函數(shù),即在調(diào)用一個(gè)函數(shù)的過程中,又調(diào)用另一個(gè)函數(shù)。
??注意:
函數(shù)可以嵌套調(diào)用但是不可以嵌套定義。
每一個(gè)函數(shù)都應(yīng)該在大括號(hào)的外面獨(dú)立存在。
代碼示例:
根據(jù)這張圖可以清楚的看到,three_line() 函數(shù)內(nèi)部嵌套了一個(gè) new_line() 函數(shù)。
當(dāng)前代碼打印了3個(gè)haha。
函數(shù)的鏈?zhǔn)皆L問就是把一個(gè)函數(shù)的返回值作為另一個(gè)函數(shù)的參數(shù)。
當(dāng)前代碼,strlen()函數(shù)是作為printf()打印函數(shù)的參數(shù),把自己的返回值3返回給了printf()函數(shù),所以最終打印結(jié)果是:3。
下面代碼的打印結(jié)果是什么?
#include<stdio.h> int main() { printf("%d", printf("%d", printf("%d", 43))); return 0; }
輸出結(jié)果:
代碼分析:
??注意:printf()函數(shù)的返回值是打印字符的個(gè)數(shù)。
當(dāng)?shù)弥藀rintf()函數(shù)的返回值是打印字符的個(gè)數(shù)后,可以做出一下分析。
程序調(diào)用自身的編程技巧稱為遞歸??梢灾苯踊蜷g接的調(diào)用,本質(zhì)是把復(fù)雜的問題轉(zhuǎn)化為一個(gè)規(guī)模小的問題。遞歸一般只需少量的代碼就可描繪出多次重復(fù)計(jì)算。遞歸的主要思考方式:大事化小
存在限制條件,當(dāng)滿足這個(gè)限制條件的時(shí)候,遞歸便不再繼續(xù)。
每次遞歸調(diào)用之后越來越接近這個(gè)限制條
1. 能夠要求轉(zhuǎn)化為新的問題,且二者解決方法相同,所處理的對象存在規(guī)律變化。
2. 非遞歸比較麻煩,而遞歸很簡單。
3. 有模板或是公式可以直接套用,不會(huì)出現(xiàn)明顯問題。
1. 每級遞歸都有自己的變量,可能名稱相同,但是值不同。
遞歸調(diào)用時(shí),系統(tǒng)自動(dòng)保留當(dāng)前函數(shù)的參數(shù)變量。
每次調(diào)用系統(tǒng)都會(huì)為函數(shù)開辟相應(yīng)的空間。
2. 每次調(diào)用都要返回值,遞歸執(zhí)行結(jié)束后,控制權(quán)傳回到上一級函數(shù)。
調(diào)用結(jié)束后,系統(tǒng)釋放本次調(diào)用所開辟的空間,
程序返回到上一次的調(diào)用點(diǎn),同時(shí)獲得初進(jìn)該級調(diào)用的參數(shù)。
每級遞歸必須逐級返回,不可跳躍或間斷。
3. 函數(shù)中遞歸語句之前的代碼,按被調(diào)函數(shù)的順序執(zhí)行,
遞歸之后的代碼,與被調(diào)函數(shù)相反的順序執(zhí)行。
接受一個(gè)整型值(無符號(hào)),按照順序打印它的每一位。例如,輸入:1234,輸出:1 2 3 4
代碼示例:
#include<stdio.h> void print(unsigned int n) { if (n > 9) { print(n / 10); } printf("%d ", n % 10); } int main() { unsigned int num = 0; scanf("%u", &num); //print函數(shù)可以打印參數(shù)部分?jǐn)?shù)字的每一位 print(num); //函數(shù)遞歸 - 自己調(diào)用自己 return 0; }
輸出結(jié)果:
代碼分析:
存在限制條件,當(dāng)滿足這個(gè)限制條件的時(shí)候,遞歸便不再繼續(xù)。
每次遞歸調(diào)用之后越來越接近這個(gè)限制條件。
如果是遞歸,兩個(gè)限制條件必定滿足。
編寫函數(shù)不允許創(chuàng)建臨時(shí)變量,求字符串的長度:
題目要求不允許創(chuàng)建臨時(shí)變量,當(dāng)前代碼不符合要求。
#include<stdio.h> #include<string.h> int my_strlen(char* str) { int count = 0; // 臨時(shí)變量 //printf("%c\n", *s); while (*str != '\0') { count++; str++; } return count; } int main() { //求字符串的長度 char arr[] = "haha"; int len = strlen(arr); printf("%d\n", len); return 0; }
符合要求的寫法:
#include<stdio.h> #include<string.h> int my_strlen(char* str) { if (*str == '\0') { return 0; } else { return 1 + my_strlen(str + 1); } } int main() { //求字符串的長度 char arr[] = "haha"; //arr是數(shù)組名,數(shù)組名是數(shù)組首元素的地址 int len = my_strlen(arr); printf("%d\n", len); return 0; }
代碼分析:
運(yùn)行結(jié)果:
讀到這里,這篇“C語言函數(shù)的使用方法是什么”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。