用函式實現模組化程式設計(二)
***一、函式的巢狀呼叫***
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執行結果:183void
main()45
1213
int age(int n)/*
求年齡的遞迴函式
*/14
15
當主函式的位置在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/*再求n!的時候一定要記得int數值範圍,防止溢位*/***三、內部函式與外部函式***1在定義內部函式時,在函式名和函式型別的前面加static,即:static 型別名 函式名(形參表)3int
main()
45
2021
int fac(int n)/*
定義fac函式
*/22
23
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 ...