黑馬程式設計師 用函式實現模組化程式設計(二)

2022-08-10 08:18:13 字數 2901 閱讀 1012

用函式實現模組化程式設計(二)

***一、函式的巢狀呼叫***

c語言的函式定義是互相平行、獨立的。即函式不能巢狀定義,但可以巢狀呼叫函式。即呼叫乙個函式的過程中,又可以呼叫另乙個函式

執行過程,如圖:

例子:輸入4個整數,找出其中最大的數。用函式的巢狀呼叫來處理。

解題思路:

main中呼叫max1函式,找4個數中最大者

max1中再呼叫max2,找兩個數中的大者

/* 輸入4個整數,找出其中最大的數。用函式的巢狀呼叫來處理。 */

#include "stdio.h"

void main()

int max1(int a,int b,int c,int d)/*定義max1函式*/

int max2(int a,int b)/*定義max2函式*/

***二、函式的遞迴呼叫***

概念:在呼叫乙個函式的過程中又出現直接或間接地呼叫該函式本身,稱為函式的遞迴呼叫。

例如:int f(int x)

int y,z;

z=f(y);              

return (2*z);

在呼叫f函式過程中,又呼叫f函式

練習1有5個學生坐在一起,問第5個學生多少歲?他說比第4個學生大2歲,問第4個學生歲數,他說比第3個學生大2歲,問第3個學生,又說比第2個學生大2歲,問第2個學生,說比第1個學生大2歲,最後問第1個學生,他說是10歲,請問第5個學生多大

解題思路:要求第5個年齡,就必須先知道第4個年齡

要求第4個年齡必須先知道第3個年齡

以此類推age(5)=age(4)+2

age(4)=age(3)+2

……..       age(n)=age(n-1)+2

1 #include 2

3void

main()45

1213

int age(int n)/*

求年齡的遞迴函式

*/14

15

執行結果:18

當主函式的位置在age函式以後,主函式不用再對age函式進行宣告

age函式共被呼叫5次,其中四次是在age函式中呼叫,也就是遞迴呼叫4次,另一次是在主函式中使用的。

練習2:用遞迴方法求n!。

解題思路:遞迴的思路跟遞推是相反的,是直接從目標出發解決,要求n!必須知道n-1,才能求出n!=(n-1)!*n。所以遞迴公式為:

n!=1         (n=1或n=0)

n!=n*(n-1)!   (n>1)

/*用遞迴方法求n!*/

1 #include 2

3int

main()

45

2021

int fac(int n)/*

定義fac函式

*/22

23

/*再求n!的時候一定要記得int數值範圍,防止溢位*/***三、內部函式與外部函式***1在定義內部函式時,在函式名和函式型別的前面加static,即:static 型別名 函式名(形參表)

2)外部函式概念:如果在定義函式時,在函式首部的最左端加關鍵字extern,則此函式是外部函式,可供其他檔案呼叫。

如函式首部可以為extern int fun (int a, int b)

如果在定義函式時省略extern,則預設為外部函式

***四、進製之間的轉換***

十進位制轉換為——>二進位制:如6的二進位制,演算法

結果就為:0110,注意:結果要從下往上寫。

二進位制轉化為——>十進位制:如0110的十進位制等於:22*1+21*0+20*0=6。

簡而言之:十進位制轉二進,除2取餘數;二進位制轉換為十進位制,乘以2的冪數。

10進製數轉換成8進製的方法,和轉換為2進製的方法類似,唯一變化:除數由2變成8。

10進製數轉換成16進製制的方法,和轉換為2進製的方法類似,唯一變化:除數由2變成16。

第7章 用函式實現模組化程式設計

第7章 用函式實現模組化程式設計 例題7.1 想輸出以下結果,用函式呼叫實現。例題7.2 輸入兩個整數,要求輸出其中較大值。例題7.3 將7.2稍作改動,將max函式中定義得變數z改為float型。例題7.4 輸入兩個實數,用乙個函式求出他們之和。例題7.1 想輸出以下結果,用函式呼叫實現 incl...

第7章 用函式實現模組化程式設計

例7.1 想輸出以下的結果,用函式呼叫實現。例7.2 輸入兩個整數,要求輸出其中值較大者。要求用函式來找到大數。例7.3 將例7.2稍作改動,將在max函式中定義的變數z改為float型。函式返回值的型別與指定的函式型別不同,分析其處理方法。例7.4 輸入兩個實數,用乙個函式求出他們之和。例7.1 ...

第七章 用函式實現模組化程式設計

第七章 用函式實現模組化程式設計 7.1 呼叫函式輸出一下結果。7.2 輸入兩個整數,要求輸出其中較大者,用函式早最大者。7.3 對7.2進行修改,將在max函式中定義的變數z改為float型。函式返回值得型別禹之鼎的型別不同。7.4 輸入兩個實數,用函式求和。7.1 呼叫函式輸出一下結果。7.2 ...