【C語言】函數(shù)-創(chuàng)新互聯(lián)

函數(shù)

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

十年的閬中網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。全網(wǎng)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整閬中建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“閬中網(wǎng)站設(shè)計”,“閬中網(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實執(zhí)行。C語言中函數(shù)的分類
  1. 庫函數(shù)
  2. 自定義函數(shù)

C語言早期沒有庫函數(shù)

如果每個人都定義一個printf,那么

1.代碼冗余

2.開發(fā)效率低

3.不標(biāo)準(zhǔn)

所以廠商就把常用的一些功能實現(xiàn)成函數(shù),集成為庫,由C語言直接提供。

C語言標(biāo)準(zhǔn)就可以規(guī)定庫函數(shù)的標(biāo)準(zhǔn):

int strlen(const char* str);

功能:求str 指向的字符串的長度。

所有的編譯器都遵循此規(guī)則。

Cplusplus

可以在上面這個網(wǎng)站找到所有庫函數(shù)。

  • IO函數(shù)
    字符串操作函數(shù)
    字符操作函數(shù)
    內(nèi)存操作函數(shù)
    時間/日期函數(shù)
    數(shù)學(xué)函數(shù)
    其他庫函數(shù)
如何使用文檔?

在這里插入圖片描述

#include#includeint main()
{char arr1[] = "abcdef";
	char arr2[20] = "XXXXXXXXXXXXXX";
//能把arr1中的abcdef拷貝到arr2;
	strcpy(arr2,arr1);
	printf("%s",arr2);
	return 0;
}

在這里插入圖片描述

//  memory set
//內(nèi)存設(shè)置
//size_t  ->unsigned int
#include#includeint main()
{char arr[] = "hello sfy";
	//設(shè)置內(nèi)存的時候是以字節(jié)為單位的
	//每個字節(jié)的內(nèi)容都是一樣的
	memset(arr,'x',5);
	printf("%s",arr);
	return 0;
}
自定義函數(shù)

自定義函數(shù)和庫函數(shù)一樣,有函數(shù)名,返回值類型和函數(shù)參數(shù)。

但是不一樣的是這些都是我們自己來設(shè)計。

在這里插入圖片描述

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

int Max(int a,int b)
{return (a>b)?(a):(b));
}

寫一個函數(shù)可以交換兩個整形變量的內(nèi)容。
在這里插入圖片描述

x y 的修改不影響 ab

當(dāng)實參傳給形參時,形參是實參的一份臨時拷貝,對形參的修改不會影響實參。

在這里插入圖片描述

正確版本:

// *(&a) == a
void Swap(int *a,int *b)
{int tmp = 0;
	tmp = *a;
	*a = *b;
	*b = tmp;
}
//改int傳int的地址,int*接收,解引用修改

這兩張圖很重要

在這里插入圖片描述在這里插入圖片描述

實際參數(shù)(實參):
真實傳給函數(shù)的參數(shù),叫實參。
實參可以是:常量、變量、表達(dá)式、函數(shù)等。
無論實參是何種類型的量,在進(jìn)行函數(shù)調(diào)用時,它們都必須有確定的值,以便把這些值傳送給形
參。
形式參數(shù)(形參):
形式參數(shù)是指函數(shù)名后括號中的變量,因為形式參數(shù)只有在函數(shù)被調(diào)用的過程中才實例化(分配內(nèi)
存單元),所以叫形式參數(shù)。形式參數(shù)當(dāng)函數(shù)調(diào)用完成之后就自動銷毀了。因此形式參數(shù)只在函數(shù)中有效。

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

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

練習(xí):

  1. 寫一個函數(shù)可以判斷一個數(shù)是不是素數(shù)。
int is_prime(int val)//返回1是素數(shù),返回0表示不是素數(shù)
{int i = 0;
	if (val == 1)
	{return 0;
	}
	for (i = 2; i<= val - 1; ++i)
	{if (val % i == 0)
		{	return 0;
		}
	}
	return 1;
}
int main()
{printf("%d",is_prime(3));

	return 0;
}

TDD 測試驅(qū)動開發(fā)

test driven development

先想函數(shù)怎么使用—-測試

測試場景想好之后,設(shè)計函數(shù)

寫一個函數(shù)判斷一年是不是閏年

int is_leap_year(int y)
{return (((y%4 ==0) &&(y%100!=0))||(y%400==0));
}

設(shè)計函數(shù)的時候,功能足夠單一!

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

int binary_search(int arr[],int val,int sz)//找到了返回下標(biāo),找不到返回-1
{int begin = 0;
	int end = sz-1;
	int mid = left+(right-left)/2;
	int i =0;
	while(left<=right)
{if(arr[mid]>val)
		{	right = mid-1;
		}
		else if(arr[mid]	left = mid+1;
		}
		else
			return mid;
}
return -1;
}

數(shù)組在傳參時,傳的是首元素地址。

寫一個函數(shù),每調(diào)用一次這個函數(shù),就會將 num 的值增加1。

int Plus(int *p)
{(*p)++;
}
函數(shù)的嵌套調(diào)用和鏈?zhǔn)皆L問
#includevoid new_line()
{printf("hehe\n");
}
void three_line()
{int i = 0;
 for(i=0; i<3; i++)
   {new_line();
   }
}
int main()
{three_line();
 return 0;
}

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

鏈?zhǔn)皆L問

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

int main()
{int len = strlen("abc");
	printf("%d",len);
}
printf("%d", printf("%d", printf("%d", 43)));

4 3 2 1

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

告訴編譯器有一個函數(shù)叫什么,參數(shù)是什么,返回類型是什么。但是具體是不是存在,函數(shù)
聲明決定不了。
2. 函數(shù)的聲明一般出現(xiàn)在函數(shù)的使用之前。要滿足先聲明后使用。
3. 函數(shù)的聲明一般要放在頭文件中的。

在這里插入圖片描述

只有一個文件的時候,把函數(shù)定義放到調(diào)用前面

分文件書寫

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

可以把文件編譯成一個靜態(tài)庫
在這里插入圖片描述

把.h 和 .lib文件給別人就可以使用這個函數(shù) 然后點生成解決方案

要放在當(dāng)前文件目錄里

引別人的頭文件 直接添加現(xiàn)有項

在這里插入圖片描述

lib使用
在這里插入圖片描述

自己包的不是庫里的頭文件要用雙引號 “ ”

函數(shù)遞歸

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

遞歸的主要思考方式在于:把大事化小

遞歸

自己調(diào)自己,不過這個函數(shù)棧溢出了 Stack overflow

在這里插入圖片描述

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

在這里插入圖片描述

在這里插入圖片描述

每次調(diào)用函數(shù)在棧上開辟空間,消耗很大,棧溢出就是空間不夠了,死遞歸的話。

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

遞歸的必要條件

存在限制條件,當(dāng)滿足這個限制條件的時候,遞歸便不再繼續(xù)。
每次遞歸調(diào)用之后越來越接近這個限制條件。

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

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

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

int main()
{char arr[] = "abcdef";
	int len = my_strlen(arr);
	printf("%d", len);

	return 0;
}

return 0返回到上一次的調(diào)用

遞歸與迭代

求n的階乘的一個遞歸的方法。

int 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", ret);
	return 0;
}

迭代版本

int fac(int n)
{int i = 0;
	int ret = 1;
	for (i = 1; i<= n; i++)
	{ret *= i;
	}
	return ret;
}

斐波那契數(shù)列

1 1 2 3 5 8 13 21 34 55……

前兩個數(shù)一加,變成第三個數(shù)。

在這里插入圖片描述

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

在這里插入圖片描述

遞歸太慢

用非遞歸算

讓abc動,c=a+b,然后后移重復(fù)動作

在這里插入圖片描述

int 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;
}

漢諾塔問題

在這里插入圖片描述

青蛙跳臺階
在這里插入圖片描述

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

網(wǎng)頁題目:【C語言】函數(shù)-創(chuàng)新互聯(lián)
本文來源:http://muchs.cn/article44/dsgcee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、電子商務(wù)全網(wǎng)營銷推廣、營銷型網(wǎng)站建設(shè)外貿(mào)建站、外貿(mào)網(wǎng)站建設(shè)

廣告

聲明:本網(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è)網(wǎng)站維護(hù)公司