<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
函數是C語言的基本單元,函數中包含實現程式功能的程式碼。
C語言程式的入口位於main()函數之中,為了方便組織配合,偵錯和執行,一般是用main函數作為主調函數,通過呼叫其他的函數來實現程式的執行。
他們的關係圖如下:
先給大家看看完整的函數程式碼格式,先有個大概印象
int add(int a,int b); //這是函數宣告,告訴系統有這樣一個函數 //注:如果函數寫在main函數之前,那這句程式碼是可以省略的 int add(int a,int b) { int c=a+b; return c; }
格式:
返回型別 函數名 (引數1,引數2,…)
對於上面函數例子int add(int a,int b)
來說,add前面的int是返回型別,add是函數名,int a 是第一個引數,int b 是第二個引數。
翻譯: 定義了一個名為add的函數,向函數傳入兩個整形資料後,函數會返回一個函數內部處理後的整形資料。
函數名後帶括號裡的全部內容。函數體內部包括宣告變數和執行完成函數功能的程式碼。
解釋: 這裡宣告了整形變數c,用c接受了引數a和引數b相加後的值,然後add函數返回c的值。
函數的宣告的告訴編譯器有一個函數叫什麼,引數是什麼,返回型別是什麼。但是具體內容還是要看函數內部的功能程式碼。
形式:
返回型別 函數名 (引數) ;
注意要有";"來結束宣告。
在C語言學習中會經常看到這樣一句程式碼return 0;
這也是main函數的最後一句程式碼,其作用有以下兩點:
來給大家看個例子:
//int Add5(int n); //這裡的函數宣告在main函數之前,可以省略上面一行的程式碼 int Add5(int n) { return n + 5; //看看return後面的語句能不能被執行 printf("能執行的話吱一聲"); } int main() { int a = 1,b=0; b = Add5(b); printf("%d", b); return 0; }
return 後面的程式碼是不會執行的。
引數根據其傳送的方式分為形式引數和實際引數兩種。
形式引數的作用就算傳送數值,它把引數的數值傳入函數,但引數本身的值是不會被函數修改的,前面舉的例子都是用的形參(形式引數的簡稱)。
下面給大家看看例子:
void fuc(int n); //void型別即返回型別為空,不會有返回值,但還是會執行內部的程式碼。 //這裡的宣告不能省!函數的定義在main函數下面。 int main() { int a = 10; fuc(a);//將a的值傳給了n printf("%d", a); return 0; } void fuc(int n)//這裡是函數的定義 { n = 0; }
結果列印a的值為10,沒有被fuc()修改成0。
實際引數是通過把引數的地址傳到函數內部,函數通過地址直接修改實際變數的值,因此,實際引數是可以通過函數修改的。
這裡看看傳遞實參的效果:
void fuc(int* n); //改動1 n的型別是指標,它存的是實際變數的地址 int main() { int a = 10; fuc(&a); //改動二 &為取地址符,直接獲取變數的地址,這裡是把a的地址傳送到函數內部 printf("%d", a); return 0; } void fuc(int* n)//改動三 其實和改動一是一樣的 //這裡的變數是n,n的型別是int*,n現在是變數a的地址 { *n = 0; }
對於*n = 0;
*為解除參照操作符,可以取出地址裡面儲存的值這裡是把n中儲存的地址對應的數賦值為0
執行結果如下,a的值被更改為0
很多時候函數是不需要引數的,沒有引數是不會影響函數執行的,一般列印選單的話是不用設定引數的,這裡隨便給大家展示一下:
void Member_Menu(); void Member_Menu() { printf("*******************n"); printf("使用者管理:>>n請輸入您想進行的操作:n1.會員新增n2.會員刪除n3.會員修改n"); }
執行時函數的功能就是列印選單。
函數內部是可以再呼叫其他函數的。如:
void fuc1() { printf("函數1"); } void fuc2() { printf("函數2"); } void fuc3() { fuc1(); fuc2(); } int main() { fuc3(); return 0; }
遞迴簡單來說是自己呼叫自己,這種呼叫十分巧妙,它可以用少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少了程式的程式碼量。
遞推實現的重點:
現在給大家展示一下遞迴的使用:
斐波那契數列:F(0)=1,F(1)=1,F(n) = F(n-1) + F(n-2) (n>=2)
遞迴版本:
int fib(int n) { if (n <= 2) return 1; else return fib(n - 1) + fib(n - 2); }
非遞迴版本:
int Fib() { int n,m=1,k,j,i=0; scanf_s("%d", &n); if (n == 0 || 1 == n) i = 1; if (n > 1) { for (k = 1, i = 1; k < n; k++) { j = i;//儲存i即n-1 i += m;//n=n-1 +n-2 m = j;//m==f(n-2)變成n-1,也就是下一個的n-2 } } printf("%d", i); }
簡單對比一下給大家看看二者的區別,不過這裡的遞迴只是以最低要求(完成任務)來寫的,實際上這樣寫道話質量是很低的,這點下一次我們會詳細說明的。
今天給大家帶來的是簡單的函數介紹,讓大家簡單瞭解函數宣告,兩種引數變數以及函數的呼叫方法。
到此這篇關於C語言深入講解函數的使用的文章就介紹到這了,更多相關C語言 函數內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45