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