溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C語言函數(shù)的使用方法是什么

發(fā)布時(shí)間:2022-04-25 15:32:45 來源:億速云 閱讀:259 作者:iii 欄目:開發(fā)技術(shù)

本文小編為大家詳細(xì)介紹“C語言函數(shù)的使用方法是什么”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“C語言函數(shù)的使用方法是什么”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識(shí)吧。

一、函數(shù)的嵌套調(diào)用

在定義函數(shù)時(shí),一個(gè)函數(shù)內(nèi)不能再定義另一個(gè)函數(shù),即不能嵌套定義,但可以嵌套調(diào)用函數(shù),即在調(diào)用一個(gè)函數(shù)的過程中,又調(diào)用另一個(gè)函數(shù)。

C語言函數(shù)的使用方法是什么

??注意:

  • 函數(shù)可以嵌套調(diào)用但是不可以嵌套定義。

  • 每一個(gè)函數(shù)都應(yīng)該在大括號(hào)的外面獨(dú)立存在。

代碼示例:

C語言函數(shù)的使用方法是什么

根據(jù)這張圖可以清楚的看到,three_line() 函數(shù)內(nèi)部嵌套了一個(gè) new_line() 函數(shù)。

當(dāng)前代碼打印了3個(gè)haha。

二、函數(shù)的鏈?zhǔn)皆L問

函數(shù)的鏈?zhǔn)皆L問就是把一個(gè)函數(shù)的返回值作為另一個(gè)函數(shù)的參數(shù)。

C語言函數(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é)果:

C語言函數(shù)的使用方法是什么

代碼分析:  

 ??注意:printf()函數(shù)的返回值是打印字符的個(gè)數(shù)。

當(dāng)?shù)弥藀rintf()函數(shù)的返回值是打印字符的個(gè)數(shù)后,可以做出一下分析。

C語言函數(shù)的使用方法是什么

三、函數(shù)遞歸

遞歸的優(yōu)缺點(diǎn)

程序調(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)明顯問題。

函數(shù)遞歸的細(xì)節(jié)說明 

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é)果:

C語言函數(shù)的使用方法是什么

代碼分析:

C語言函數(shù)的使用方法是什么

對兩個(gè)必要條件的理解

存在限制條件,當(dāng)滿足這個(gè)限制條件的時(shí)候,遞歸便不再繼續(xù)。

C語言函數(shù)的使用方法是什么

每次遞歸調(diào)用之后越來越接近這個(gè)限制條件。

C語言函數(shù)的使用方法是什么

如果是遞歸,兩個(gè)限制條件必定滿足。

四、遞歸練習(xí)

編寫函數(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;
}

代碼分析:

C語言函數(shù)的使用方法是什么

運(yùn)行結(jié)果:

C語言函數(shù)的使用方法是什么

讀到這里,這篇“C語言函數(shù)的使用方法是什么”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(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)容。

AI