三、函式名
四、引數
五、值傳遞、址傳遞和引用傳遞
六、遞迴函式
七、總結
八、作業
數學上的函式 z = f(x,y) 因變數 = 函式名(自變數,自變數)
計算機的函式 返回值(=)函式名(引數,引數/函式指標)
void f (
int x,int y)
;int f(int x,int y);
int* f(int x,int y);
int* f(int x,int
(*fun)
(int y,
int z));
//了解即可
函式:所有的命令都封裝在乙個塊內。每個塊都會執行特定的任務。
為什麼:使用函式讓程式更加模組化,從而提高程式**的可讀性,方便後期修改,完善。
例如:讀入一系列數字,再分類這些數字,在找出這些數字的平均值,最後列印柱狀圖。
int
main()
主函式: main()——該函式是程式啟動後,第乙個執行的函式,即程式的入口。 其他所有函式都是 main()函式的子函式,但乙個函式只能被定義一次,可以根據需要被多次的宣告和呼叫。
(1)返回值的型別可以是 void 或者任何物件型別。
(2)函式無法返回函式或陣列。然而,可以定義乙個函式的返回值為指標,並將該指標指向乙個函式或陣列。
exit(0);//退出程式
return 0;//退出函式
小駝峰形式:readlist(list,size);
或者ansi c風格:read_list(list,size);
函式定義時用的變數叫形參
傳遞給函式的中形參值或變數叫實參
/**
* 計算圓的周長
* @param r 半徑
* @return 圓周長
*/double
circle
(double r)
intmain()
注意:
1形參在未出現函式呼叫時,他們並不占用記憶體單元,只有在發生函式呼叫的時候形參才被分配記憶體,函式呼叫完成後,形參所佔的記憶體被釋放
2實參可以是變數,常量或者表示式
double c = circle(a); double c = circle(2.1111); double c = circle((2.1111 + a) / 2);
3形參與實參的資料型別一定要可相容
4.在c語言中,實參與形參的資料傳遞是「值傳遞」,即單向傳遞,只由實參傳遞給形參,而不能由形參傳遞給實參。值傳遞時,實參不變。
注:如果函式的引數是個陣列,或者字串的時候,那麼是可以通過形參修改實參的值,(引用傳遞)
簡單的例子。函式swap用來交換兩個數的值。
(1)值傳遞,雖然傳遞了引數,但是變數本身的值並沒有做交換。實際上引數m和n在傳入函式之前還複製了裡面的內容,並把內容交給乙個臨時的記憶體,然後在內部執行交換操作後,只是臨時記憶體m和n做了交換,可見值傳遞只是傳遞了實參中的值,在函式內部也無法修改外部的實際引數。
在swap函式執行語句的最前面,隱含地存在m=m; n=n;這兩條語句,這樣就便於理解了。當m,n把值賦給函式中m,n之後,對函式中的m,n不論再做什麼操作,都不會影響到m,n(主函式中的)本身。
#include
/** * 交換兩個值
* @param m 第乙個值
* @param n 第二個值
*/void
swap
(int m,
int n)
intmain()
(2)位址傳遞,與值傳遞的分析一樣,我們同樣可以設想,在swap函式裡,隱含地存在m=&m; n=&n;這兩條語句,這表示m的位址代入到了m,n的位址代入到了n。這樣一來,對*m, *n的操作就是m,n本身的操作。所以主函式中的m,n的值被對調了。
#include
/** * 交換兩個值
* @param m 指向第乙個值的指標
* @param n 指向第二個值的指標
*/void
swap
(int
* m,
int* n)
intmain()
(3)引用傳遞先看函式的宣告和呼叫的寫法,函式呼叫和值傳遞的寫法是一樣的,但是函式宣告是不一樣的。
宣告:swap (int &m, int &n)
函式呼叫:swap (m, n)
因為定義的x,y前面有&取位址符,調用函式swap時,m,n分別代替了m,n,即函式中的m,n分別引用了主函式中的m,n變數。因此,函式裡的操作,實際上是對實參m,n本身的操作,其值發生了對調。
#include
/** * 交換兩個值
* @param m 第乙個值的引用
* @param n 第二個值的引用
*/void
swap
(int
&m,int
&n)int
main()
函式可以呼叫自己,這就叫函式的遞迴:
注意:
1.遞迴函式必須有結束條件。
2.當函式在一直遞推,直到遇到結束條件後返回
所以遞迴要有兩個要素,結束條件與遞推關係
#include
/** * 計算斐波那契數列
* @param num 斐波那契數列的項數
* @return 斐波那契數列值
*/long
fibonacci
(long num )
else
}int
main()
遞迴的優缺點
遞迴給某些程式設計問題提供了最簡單,易懂的方法。
但是乙個有缺陷的遞迴會很快耗盡計算機的資源,遞迴的程式難以理解和維護,且當資料過多過大時,程式執行時間會很長。
函式作為工具類知識點,重點是要在平時開發程式設計中習慣性的運用函式程式設計,體現模組化的設計思想。
**注釋例如:
/**
* (函式功能):
* @param (引數含義)
* @return (返回值含義)
*/
description1input本來題目到上一題就結束了,不過周五的某個上午,nemaleswang接到了boos上級xl老(yuan)師(zhang)的**,他語重心常的對nemaleswang說這次的題目要出好啊,盡量幫他篩選出來藍橋杯能拿省三的同學,媽呀,省三不是會暴力就行了嘛,於是nemaleswang不屑於出這些簡單題,於是甩鍋給了小玩,小玩也很難受啊,於是他隨便找了兩道題就敷衍了最後的這兩道暴力題(都告訴你是暴力了你還要怎樣?)
第一題:小玩去餐館吃飯,這裡有兩種主食,一種是noodle,我們用n表示,分為1、2、3三種尺寸分別代表小份、中份、大份,**分別是3,6,8
另外一種是rice,我們用r表示,分為1、2、3三種尺寸分別代表小份、中份、大份,**分別是10,12,18
現在小玩點了n份吃的,問小玩一共吃了多少錢的食物
第一行乙個整數n,代表小玩點了多少份吃的
接下來n行,每行乙個字元s(要麼是n,要麼是r),代表麵食或者公尺飯,乙個整數(只能是1,2,3)代表這乙份吃的的尺寸(小玩可以無限買吃的,不要管重複不重複)
output
輸出小玩買這些吃的的**
sample input 1
2r 1
n 2sample output 1
16hint
對於100%的資料,n <= 50
description2 給你t組資料每組兩個數n和m,讓你求n的m次方有多少位數。input
多組資料,第一行乙個整數t(1<=t<=100),接下來t行每行兩個空格隔開的數n和m。(0
input
輸入格式: 第一行為2個數n,k(含義如上題) 第二行為n個數,表示這個序列
output
輸出格式: 如果m為質數則 第一行為』yes』(沒有引號) 第二行為這個數m 否則 第一行為』no』 第二行為這個數m
sample input 1
5 21 2 3 4 5
sample output 1
yes2
提示對於第k大的詳細解釋 :
如果乙個序列為1 2 2 2 3
第1大 為3
第2大 為2
第3大 為2
第4大 為2
第5大 為1
第k小與上例相反
另外需要注意的是
最小的質數是2, 如果小於2的話, 按不是質數處理
嵌入式培訓學校怎麼選?嵌入式培訓學什麼
嵌入式系統是當前熱門 具發展前景的it應用領域之一,很多數字包括手機 電子字典 可視 數字相機 數字攝像機 機頂盒 智慧型玩具醫療儀器和航空航天裝置等都是典型的嵌入式系統。目前嵌入式人才匱乏,一些權威部門統計,我國目前嵌入式軟體人才缺口每年為50萬人左右,嵌入式人才供給一直處於供不應求的狀態,所以很...
嵌入式學習培訓能學會嗎?嵌入式開發培訓都要學什麼?
嵌入式學習培訓能學會嗎?嵌入式開發培訓都要學什麼?掌握linux常用操作命令,與系統管理 理解嵌入式系統程序管理,檔案管理,linux核心 熟悉arm在不同硬體平台下的作業系統移植和裝置驅動檔案管理等相關知識,學習qt程式開發,進行嵌入式系統程式的除錯。學會嵌入式開發的分析問題 解決問題的思維方法,...
學習嵌入式培訓課程安排,嵌入式培訓靠譜嗎?
嵌入式系統是一種專用的計算機系統,作為裝置或裝置的一部分。國內普遍認同的嵌入式系統定義為 以應用為中心,以計算機技術為基礎,軟硬體可裁剪,適應應用系統對功能 可靠性 成本 體積 功耗等嚴格要求的專用計算機系統。舉些例子,手機 電子時鐘 智慧型報警裝置 自動監控器 計程車計費器等等都屬於嵌入式系統。現...