内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

函數(shù)(6)-創(chuàng)新互聯(lián)

目錄

10年積累的做網(wǎng)站、成都做網(wǎng)站經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站設(shè)計后付款的網(wǎng)站建設(shè)流程,更有平山免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

1、函數(shù)是什么?

2、C語言中函數(shù)的分類:

1、庫函數(shù)

2、自定義函數(shù)

3、函數(shù)的參數(shù)

4、函數(shù)的調(diào)用

5、練習(xí)

1、打印100~200之間的素數(shù)

2、打印100~200之間的閏年

3、寫一個函數(shù),實現(xiàn)一個整形有序數(shù)組的二分查找

6、函數(shù)的嵌套調(diào)用和鏈?zhǔn)皆L問

7、函數(shù)的聲明和定義

1、函數(shù)聲明:

2、函數(shù)定義:

8、函數(shù)遞歸

1、什么是遞歸?

2、遞歸的兩個必要條件

3、練習(xí)

1、接收一個整型值(無符號),按照順序打印它的每一位。 例如:輸入:1234,輸出 1 2 3 4

2、編寫函數(shù)不允許創(chuàng)建臨時變量,求字符串的長度

3、求n的階乘(不考慮溢出)

4、求第n個斐波那契數(shù)(不考慮溢出)

9、函數(shù)棧幀創(chuàng)建和銷毀


1、函數(shù)是什么?

維基百科中對函數(shù)的定義:子程序

在計算機(jī)科學(xué)中,子程序(英語:Subroutine, procedure, function, routine, method, subprogram, callable unit),是一個大型程序中的某部分代碼,由一個或多個語句塊組成。它負(fù)責(zé)完成某項特定任務(wù),而且相較于其他代碼,具備相對的獨立性。一般會有輸入?yún)?shù)并有返回值,提供對過程的封裝和細(xì)節(jié)的隱藏。這些代碼通常被集成為軟件庫。

2、C語言中函數(shù)的分類:

1. 庫函數(shù)

2. 自定義函數(shù)

1、庫函數(shù)

1、為什么會有庫函數(shù)?

答:在我們學(xué)習(xí)C語言編程的時候,總是在一個代碼編寫完成之后迫不及待的想知道結(jié)果,想把這個結(jié)果打印到屏幕上看看。這個時候我們會頻繁的使用一個功能:將信息按照一定的格式打印到屏幕上(printf)。像這種我們描述的基礎(chǔ)功能,它們不是業(yè)務(wù)性的代碼。我們在開發(fā)的過程中每個程序員都可能用的到,為了支持可移植性和提高程序的效率,所以C語言的基礎(chǔ)庫中提供了一系列類似的庫函數(shù),方便程序員進(jìn)行軟件開發(fā)。

2、如何學(xué)習(xí)庫函數(shù)?

可通過網(wǎng)站學(xué)習(xí):https://cplusplus.com/reference/

使用庫函數(shù),必須包含 #include 對應(yīng)的頭文件

2、自定義函數(shù)

函數(shù)的組成:

例1:寫一個函數(shù)可以找出兩個整數(shù)中的大值

#includeint get_max(int x, int y)
{
	return (x >y) ? (x) : (y);
}

int main()
{
	int num1 = 10;
	int num2 = 20;
	int max = get_max(num1, num2);
	printf("max = %d\n", max);
	return 0;
}

例2:寫一個函數(shù)可以交換兩個整形變量的內(nèi)容

#includevoid Swap(int* x,int* y)
{
	int tmp = *x;
	*x = *y;
	*y = tmp;
}

int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	Swap(&a, &b);
	printf("a=%d b=%d\n", a, b);
	return 0;
}

注意:這里不能用傳值傳參,需要用傳址傳參。當(dāng)函數(shù)調(diào)用的時候,實參傳給形參,形參是實參的一份臨時拷貝,對形參的修改是不影響實參的。

3、函數(shù)的參數(shù)

1、實際參數(shù)(實參):真實傳給函數(shù)的參數(shù),叫實參。實參可以是:常量、變量、表達(dá)式、函數(shù)等。無論實參是何種類型的量,在進(jìn)行函數(shù)調(diào)用時,它們都必須有確定的值,以便把這些值傳送給形參。

2、形式參數(shù)(形參):形式參數(shù)是指函數(shù)名后括號中的變量,因為形式參數(shù)只有在函數(shù)被調(diào)用的過程中才實例化(分配內(nèi)存單元),所以叫形式參數(shù)。形式參數(shù)當(dāng)函數(shù)調(diào)用完成之后就自動銷毀了。因此形式參數(shù)只在函數(shù)中有效。

4、函數(shù)的調(diào)用

1、傳值調(diào)用:函數(shù)的形參和實參分別占有不同內(nèi)存塊,對形參的修改不會影響實參。

2、傳址調(diào)用:傳址調(diào)用是把函數(shù)外部創(chuàng)建變量的內(nèi)存地址傳遞給函數(shù)參數(shù)的一種調(diào)用函數(shù)的方式。這種傳參方式可以讓函數(shù)和函數(shù)外邊的變量建立起真正的聯(lián)系,也就是函數(shù)內(nèi)部可以直接操 作函數(shù)外部的變量。

5、練習(xí) 1、打印100~200之間的素數(shù)

分析:判斷素數(shù)n,用試除法,從2到根號n即可。根號函數(shù)sqrt(),頭文件#include

#include#includeint is_primer(int n)
{
	for (int j = 2; j<= sqrt(n); j++)
	{
		if (n % j == 0)
			return 0;
	}
	return 1;
}

int main()
{
	for (int i = 100; i<= 200; i++)
	{
		if (is_primer(i) == 1)
			printf("%d ", i);
	}
	return 0;
}
2、打印100~200之間的閏年

分析:判斷閏年,4年一閏且百年不閏,或400年一閏。

注意:邏輯與、或的結(jié)果為真、假,即真對應(yīng)1,假對應(yīng)0。

#includeint is_leap_year(int year)
{
	if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
		return 1;
	else
		return 0;
}

int main()
{
	int count = 0;
	for (int i = 100; i<= 200; i++)
	{
		if (is_leap_year(i) == 1)
		{
			count++;
			printf("%d ", i);
		}
	}
	printf("\ncount=%d\n", count);
	return 0;
}
3、寫一個函數(shù),實現(xiàn)一個整形有序數(shù)組的二分查找

分析:每次取中間元素進(jìn)行比較,然后重復(fù)

注意:數(shù)組在傳參的時候,不會將整個數(shù)組傳過去,傳遞的是數(shù)組首元素的地址。形參那里可以寫數(shù)組形式 int arr[ ] 或者指針形式?int* arr 來接收,但本質(zhì)會變成 int* arr,為了可讀性,一般建議寫int arr[ ],即數(shù)組形式。所以數(shù)組傳參時,應(yīng)再傳一個參數(shù),即數(shù)組元素個數(shù)。

#includeint binary_search(int arr[], int n, int k)
{
	int left = 0;
	int right = n - 1;
	while (left<= right)
	{
		int mid = (left + right) / 2;
		if (arr[mid] >k)
			right = mid - 1;
		else if (arr[mid]< k)
			left = mid + 1;
		else
			return mid;
	}
	return -1;
}

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int key = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);
	scanf("%d", &key);
	int ret = binary_search(arr, sz, key);
	if (ret >= 0)
		printf("找到了,下標(biāo)是%d\n", ret);
	else
		printf("沒找到\n");
	return 0;
}
6、函數(shù)的嵌套調(diào)用和鏈?zhǔn)皆L問

1、函數(shù)和函數(shù)之間可以根據(jù)實際的需求進(jìn)行組合的,也就是互相調(diào)用的。

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

3、把一個函數(shù)的返回值作為另外一個函數(shù)的參數(shù)。

7、函數(shù)的聲明和定義 1、函數(shù)聲明:

1、告訴編譯器有一個函數(shù)叫什么,參數(shù)是什么,返回類型是什么。但是具體是不是存在,函數(shù)聲明決定不了。

2、函數(shù)的聲明一般出現(xiàn)在函數(shù)的使用之前。要滿足先聲明后使用。

3、函數(shù)的聲明一般要放在頭文件中的。

2、函數(shù)定義:

函數(shù)的定義是指函數(shù)的具體實現(xiàn),交待函數(shù)的功能實現(xiàn)。

8、函數(shù)遞歸 1、什么是遞歸?

遞歸:遞(遞推),歸(回歸)。

程序調(diào)用自身的編程技巧稱為遞歸( recursion)。一個過程或函數(shù)在其定義或說明中有直接或間接調(diào)用自身的一種方法,它通常把一個大型復(fù)雜的問題層層轉(zhuǎn)化為一個與原問題相似的規(guī)模較小的問題來求解,遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復(fù)計算,大大地減少了程序的代碼量。遞歸的主要思考方式在于:把大事化小。

2、遞歸的兩個必要條件

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

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

3、練習(xí)

注意:

1、stack overflow是棧溢出。

2、函數(shù)調(diào)用,會建立棧幀,會在棧區(qū)申請內(nèi)存空間。

3、%d 指有符號整數(shù);%u 指無符號整數(shù);%f 指單精度浮點型;%lf 指雙精度浮點型。

1、接收一個整型值(無符號),按照順序打印它的每一位。 例如:輸入:1234,輸出 1 2 3 4

分析:用循環(huán)時的做法是1234/10 得到123,1234%10 得到4,然后循環(huán)即可。

#includevoid print(unsigned int n)
{
	if (n< 10)
		printf("%d ", n);
	else
	{
		print(n / 10);
		printf("%d ", n % 10);
	}
}

int main()
{
	unsigned int num = 0;
	scanf("%u", &num);
	print(num);
	return 0;
}
2、編寫函數(shù)不允許創(chuàng)建臨時變量,求字符串的長度

1、編寫函數(shù),求字符串長度

#includeint my_strlen(char* str)
{
	int count = 0;
	while (*str != '\0')
	{
		count++;
		str++;
	}
	return count;
}

int main()
{
	char arr[] = "abc";
	int len = my_strlen(arr);
	printf("%d\n", len);
	return 0;
}

2、不允許創(chuàng)建臨時變量,求字符串的長度

遞歸方法:

#includeint my_strlen(char* str)
{
	if (*str != '\0')
		return 1 + my_strlen(str + 1);
	else
		return 0;
}

int main()
{
	char arr[] = "abc";
	int len = my_strlen(arr);
	printf("%d\n", len);
	return 0;
}
3、求n的階乘(不考慮溢出)

1、遞歸方法:

#includeint Fac(int n)
{
	if (n<= 1)
		return 1;
	else
		return n * Fac(n - 1);
}

int main()
{
	int n = 0;
	scanf("%d", &n);
	int ret = Fac(n);
	printf("%d\n", ret);
	return 0;
}

2、循環(huán)方法:

#includeint Fac(int n)
{
	int ret = 1;
	for (int i = 1; i<= n; i++)
		ret *= i;
	return ret;
}

int main()
{
	int n = 0;
	scanf("%d", &n);
	int ret = Fac(n);
	printf("%d\n", ret);
	return 0;
}
4、求第n個斐波那契數(shù)(不考慮溢出)

1、遞歸(有大量重復(fù)的計算,效率低)

#includeint Fib(int n)
{
	if (n<= 2)
		return 1;
	else
		return Fib(n - 1) + Fib(n - 2);
}

int main()
{
	int n = 0;
	scanf("%d", &n);
	int ret = Fib(n);
	printf("%d\n", ret);
	return 0;
}

2、循環(huán)

#includeint Fib(int n)
{
	int a = 1;
	int b = 1;
	int c = 1;
	while (n >2)
	{
		c = a + b;
		a = b;
		b = c;
		n--;
	}
	return c;
}

int main()
{
	int n = 0;
	scanf("%d", &n);
	int ret = Fib(n);
	printf("%d\n", ret);
	return 0;
}
9、函數(shù)棧幀創(chuàng)建和銷毀

esp、ebp 這兩個寄存器中存放的是地址,這兩個地址是用來維護(hù)函數(shù)棧幀的。

棧區(qū)的使用習(xí)慣是先使用高地址,再使用低地址。

main()函數(shù)也是被調(diào)用的,函數(shù)調(diào)用會建立棧幀,在棧區(qū)開辟內(nèi)存空間,大片的內(nèi)存申請,建議移步到堆區(qū)。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

本文標(biāo)題:函數(shù)(6)-創(chuàng)新互聯(lián)
文章地址:http://www.rwnh.cn/article34/essse.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、移動網(wǎng)站建設(shè)、品牌網(wǎng)站建設(shè)、商城網(wǎng)站、App開發(fā)、定制開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計公司
陆丰市| 临朐县| 北安市| 三穗县| 株洲县| 邓州市| 屏东县| 织金县| 城步| 锡林浩特市| 镇坪县| 平远县| 睢宁县| 阿拉善右旗| 绥阳县| 房产| 定远县| 鄢陵县| 娄底市| 诸城市| 庄河市| 永嘉县| 原平市| 楚雄市| 香格里拉县| 东乡族自治县| 汤阴县| 久治县| 嫩江县| 昆山市| 古蔺县| 武隆县| 乌鲁木齐市| 大庆市| 新余市| 云南省| 邢台市| 龙江县| 女性| 纳雍县| 陆川县|