




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、C C語言程序設計語言程序設計清華大學出版社清華大學出版社信息技術工程系信息技術工程系 李智睿李智睿C C語言程序設計語言程序設計清華大學出版社清華大學出版社信息技術工程系信息技術工程系 李智睿李智睿C C語言程序設計語言程序設計清華大學出版社清華大學出版社第7章函數信息技術工程系信息技術工程系 李智睿李智睿本章任務本章任務 本章的任務將在第6章任務的基礎上,進一步擴充程序的功能,并采用模塊化程序設計思想,通過不同的函數來實現菜單選擇、學生成績數據的錄入、成績查詢、成績統計、統計數據顯示等多項功能。 任務分解:=程序模塊的劃分。=模塊化程序設計的實現函數的定義和調用。=數組作函數參數。C C語
2、言程序設計語言程序設計清華大學出版社清華大學出版社第7章函數信息技術工程系信息技術工程系 李智睿李智睿7.1 7.1 函數概述函數概述 程序設計時,如果遇到一個復雜的問題,那么最好的方法就是將原始問題分解成若干個易于求解的小問題,每一個小問題都用一個相對獨立的程序模塊來處理,最后,再把所有的模塊象搭積木一樣拼合在一起,形成一個完整的程序。這種程序設計中分而治之的策略,被稱為模塊化程序設計方法模塊化程序設計方法,這是結構化程序設計中的一條重要原則。 幾乎所有的高級程序設計語言都提供了自己的實現程序模塊化的方法(如子程序、過程和函數等)。C C語言中,由于函數是程語言中,由于函數是程序的基本組成單
3、位,所以,可以很方便地利用函數實現程序的模序的基本組成單位,所以,可以很方便地利用函數實現程序的模塊化,這也是塊化,這也是C C語言的重要特色之一。語言的重要特色之一。 C C語言程序設計語言程序設計清華大學出版社清華大學出版社第7章函數信息技術工程系信息技術工程系 李智睿李智睿7.1 7.1 函數概述函數概述 主函數(實現菜單選擇功能)加法函數減法函數乘法函數除法函數 例如,例如,要設計一個算術練習程序,要求這個程序能隨機給出加、減、乘、除4種算術練習題,并能判斷答題者的答案是否正確。根據程序的功能,可以把整個程序分成五大模塊:算術練習程序的模塊結構圖算術練習程序的模塊結構圖 C C語言程序
4、設計語言程序設計清華大學出版社清華大學出版社第7章函數信息技術工程系信息技術工程系 李智睿李智睿7.1 7.1 函數概述函數概述 C函數是一種獨立性很強的程序模塊,所有的函數都處于平等地位,不存在從屬關系。一個C程序的各個函數可以放在一個程序文件內,也可以分散放在幾個不同的程序文件中。通過函數調用可以實現不同函數之間的邏輯聯系。一個C程序總是從main函數開始執(zhí)行,由main函數調用其他函數,而其他函數之間又可以相互調用。C C函數的特點:函數的特點: C C語言程序設計語言程序設計清華大學出版社清華大學出版社第7章函數信息技術工程系信息技術工程系 李智睿李智睿7.1 7.1 函數概述函數概述
5、 C C函數之間的調用:函數之間的調用: main() fun1(); fun2(); fun1() fun1_1(); fun1_2(); fun2() fun2_1(); fun2_2(); fun1_1() fun1_2() fun2_1() fun2_2() C C語言程序設計語言程序設計清華大學出版社清華大學出版社第7章函數信息技術工程系信息技術工程系 李智睿李智睿7.1 7.1 函數概述函數概述 1.從函數定義的角度分類從函數定義的角度分類(1)庫函數。)庫函數。庫函數是系統提供的已經定義好的函數,Turbo C提供了300多個庫函數,編程時可直接調用庫函數來完成各種各樣的任務,用
6、戶在程序中調用庫函數時無須作類型說明。(2)用戶自定義函數。)用戶自定義函數。除了庫函數之外,用戶還可以根據自己的需要定義用以解決具體問題的函數,然后通過函數調用來實現所需的功能。例例7.1 一個簡單的用戶自定義函數。一個簡單的用戶自定義函數。main() pstar();pstar() printf(*);運行結果:運行結果:* C C語言程序設計語言程序設計清華大學出版社清華大學出版社第7章函數信息技術工程系信息技術工程系 李智睿李智睿7.1 7.1 函數概述函數概述 2.從有無參數的角度分類從有無參數的角度分類(1)無參函數。)無參函數。無參函數是指不帶任何參數的函數。在調用一個無參函數
7、時,主調函數與被調函數之間不進行參數傳遞。如,前面例7.1中的pstar函數就是一個無參函數。(2)有參函數。)有參函數。有參函數是指在函數定義和函數調用時帶有參數的函數。函數定義時的參數稱為形式參數(簡稱形參),函數調用時的參數稱為實際參數(簡稱實參)。在調用一個有參函數時,主調函數將實際參數的值傳遞給形式參數,供被調函數使用。 C C語言程序設計語言程序設計清華大學出版社清華大學出版社第7章函數信息技術工程系信息技術工程系 李智睿李智睿7.1 7.1 函數概述函數概述 3.從有無返回值的角度分類從有無返回值的角度分類(1)有返回值函數。)有返回值函數。有返回值函數在被調用執(zhí)行完后會向主調函
8、數返回一個執(zhí)行結果,這個結果就稱為函數的返回值。如數學函數就屬于有返回值函數。在定義一個有返回值函數時,應該對其返回值作類型說明。(2)無返回值函數。)無返回值函數。無返回值函數用于完成某項特定的處理任務,執(zhí)行完后不向主調函數返回一個函數值。如,前面例7.1中的pstar函數就是一個無返回值函數。通常,定義一個無返回值函數時,可說明其返回值類型為空類型,即void類型。C C語言程序設計語言程序設計清華大學出版社清華大學出版社第7章函數信息技術工程系信息技術工程系 李智睿李智睿7.1 7.1 函數概述函數概述 4.從函數作用域的角度分類從函數作用域的角度分類(1)內部函數。)內部函數。內部函數
9、是指只能被本程序文件中的其他函數調用的函數。(2)外部函數。)外部函數。外部函數是指除了能被本程序文件中的其他函數調用之外,還可以被其他文件中的函數調用的函數。C C語言程序設計語言程序設計清華大學出版社清華大學出版社第7章函數信息技術工程系信息技術工程系 李智睿李智睿7.1 7.1 函數概述函數概述 本章最后要完成的任務是編寫一個學生成績統計程序,其功能包括:本章最后要完成的任務是編寫一個學生成績統計程序,其功能包括:菜單選擇、學生成績數據的錄入、成績查詢、成績統計、成績排名。菜單選擇、學生成績數據的錄入、成績查詢、成績統計、成績排名。根據程序的功能,可按下圖所示劃分程序的模塊結構。根據程序
10、的功能,可按下圖所示劃分程序的模塊結構。主函數main()實現菜單顯示和選擇功能data_input()成績數據錄入data_search()成績查詢data_process()成績統計data_sort()成績排名 學生成績統計程序的模塊結構學生成績統計程序的模塊結構 C C語言程序設計語言程序設計清華大學出版社清華大學出版社第7章函數信息技術工程系信息技術工程系 李智睿李智睿7.2 7.2 函數的定義函數的定義 定義函數的一般形式:定義函數的一般形式: C C語言程序設計語言程序設計清華大學出版社清華大學出版社第7章函數信息技術工程系信息技術工程系 李智睿李智睿7.2 7.2 函數的定義函
11、數的定義 1.1.函數的類型函數的類型定義函數時,函數名前的類型標識符說明了函數的類型,這也是該函數的返回值的數據類型。 2.2.函數名函數名函數名的命名遵循標識符規(guī)則,為了提高程序的易讀性,定義函數時,最好給函數取一個見名知意的名字,也就是說,一個好的函數名能夠反映該函數的功能。 3.3.形式參數表形式參數表定義函數時,函數名后面圓括號中的變量名稱為形式參數,簡稱“形參”。如果形式參數不止一個,那么每個形式參數之間則以逗號分隔。 4.4.形式參數的說明形式參數的說明如果函數有形式參數,則必須說明形式參數的類型。下面兩種說明形式參數類型的寫法都是正確的: sum(x , y) sum(int
12、x , int y) int x , y ; C C語言程序設計語言程序設計清華大學出版社清華大學出版社第7章函數信息技術工程系信息技術工程系 李智睿李智睿7.2 7.2 函數的定義函數的定義 5.5.函數體函數體函數體是用一對花括號括起來的語句序列,函數的功能就是由這些語句共同完成。所有在函數體中使用到的形式參數之外的變量,都可以在函數體的開始部分進行變量的類型說明。 6.6.空函數空函數定義函數時,函數類型、形式參數以及函數體均可以省略。所以,最簡單的函數定義是: 函數名( ) 7.7.自定義函數在程序中的位置自定義函數在程序中的位置一個C程序由主函數和若干個自定義函數組成,各個函數在程序
13、中的定義是相互獨立的,不能在一個函數的函數體內部定義另一個函數。自定義函數可以放在主函數之前,也可以放在主函數之后,但無論自定義函數放在程序中的什么位置,程序的執(zhí)行總是從主函數開始的。 C C語言程序設計語言程序設計清華大學出版社清華大學出版社第7章函數信息技術工程系信息技術工程系 李智睿李智睿習題習題=P187 3.(1)(2)(3) C C語言程序設計語言程序設計清華大學出版社清華大學出版社第7章函數信息技術工程系信息技術工程系 李智睿李智睿7.3 7.3 函數參數及返回值函數參數及返回值 參數的作用:參數的作用:函數的參數用于建立函數之間的數據聯系。當一個函數調用另一個函數時,實際參數的
14、值會傳遞給形式參數,以實現主調函數與被調函數之間的數據通信。同時,函數參數的運用還可提高一個函數的靈活性和通用性。 例例7.3 編寫一個函數,打印一條由星號構成的橫線。編寫一個函數,打印一條由星號構成的橫線。main() pstar() ; /* 第一次調用pstar函數 */ printf( 歡迎使用本程序!n) ; pstar() ; /* 第二次調用pstar函數 */pstar() /* 定義pstar函數 */ printf(*n) ;運行結果:運行結果:* 歡迎使用本程序!*C C語言程序設計語言程序設計清華大學出版社清華大學出版社第7章函數信息技術工程系信息技術工程系 李智睿李智
15、睿7.3 7.3 函數參數及返回值函數參數及返回值 參數的傳遞。參數的傳遞。main() int a=3; change(a);change(int x) x=x+10; printf(x=%dn,x);運行原理:當change()被調用,變量a把3傳給了x,從而程序轉到change()去運行C C語言程序設計語言程序設計清華大學出版社清華大學出版社第7章函數信息技術工程系信息技術工程系 李智睿李智睿7.3 7.3 函數參數及返回值函數參數及返回值 形式參數和實際參數:形式參數和實際參數: 形式參數(簡稱“形參”)是指定義函數時,跟在函數名后的小括號內的變量名。實際參數(簡稱“實參”)則是指調
16、用函數時,跟在函數名后的小括號內的表達式。實際參數與形式參數的關系如下:實際參數與形式參數的關系如下:(1)實參的數量應該與形參相同。如果一個函數在定義時沒有形參,則調用該函數時就不應有實參。(2)實參的類型必須與形參一致。(3)定義函數時的形參只能是變量名,而調用函數時的實參則可以是變量名,也可以是常量或表達式。(4)當簡單變量作函數參數時,參數的傳遞是“值傳遞”,這是一種單向傳遞,即數據只能由實參傳給形參,而不能由形參傳回給實參。 C C語言程序設計語言程序設計清華大學出版社清華大學出版社第7章函數信息技術工程系信息技術工程系 李智睿李智睿7.3 7.3 函數參數及返回值函數參數及返回值
17、例例7.5 參數的傳遞。參數的傳遞。main() int a=3; change(a); printf(a=%d,a);change(int x) x=x+10; /* 改變形參x的值 */ printf(x=%dn,x);運行結果:運行結果:a=3 x=13a=3 雖然在change函數中形參x的值發(fā)生了改變,但主函數中實參a的值卻沒有發(fā)生變化。形參變量和實參變量分別占用不同的存貯單元,所以,無論形參的值如何變化,都不會影響到實參的值。單向值傳遞。 C C語言程序設計語言程序設計清華大學出版社清華大學出版社第7章函數信息技術工程系信息技術工程系 李智睿李智睿7.3 7.3 函數參數及返回值函
18、數參數及返回值 有的函數在被調用執(zhí)行完后會向主調函數返回一個執(zhí)行結果,這個結果就稱為函數的返回值函數的返回值。函數的返回值用return語句實現。 return語句的一般形式如下:語句的一般形式如下: return (表達式) ; 或 return 表達式 ; 或 return ;C C語言程序設計語言程序設計清華大學出版社清華大學出版社第7章函數信息技術工程系信息技術工程系 李智睿李智睿7.3 7.3 函數參數及返回值函數參數及返回值 main() int a=3; printf(此函數的返回值為此函數的返回值為%dn,change(a);change(int x) x=x+10; retu
19、rn; /*返回函數的計算結果,作為函數的返回值返回函數的計算結果,作為函數的返回值*/C C語言程序設計語言程序設計清華大學出版社清華大學出版社第7章函數信息技術工程系信息技術工程系 李智睿李智睿7.4 7.4 函數的調用函數的調用 一般形式為:一般形式為: 函數名函數名( (實參表實參表) ;) ;說明:說明: 這種調用方式通常用于調用一個不帶回返回值的函數。 如果調用的函數無形式參數,則實參表可以沒有,但函數名后面的小括號不能省去。 C C語言程序設計語言程序設計清華大學出版社清華大學出版社第7章函數信息技術工程系信息技術工程系 李智睿李智睿7.4 7.4 函數的調用函數的調用 例例7.
20、6 編寫一個函數,求三個數之和。編寫一個函數,求三個數之和。main() int a,b,c ; printf(a=) ; scanf(%d,&a) ; printf(b=) ; scanf(%d,&b) ; printf(c=) ; scanf(%d,&c) ; sum(a,b,c) ; /* 函數的語句調用 */sum(int n1,int n2,int n3)int s;s=n1+n2+n3;printf(%d+%d+%d=%d,n1,n2,n3,s);運行結果:運行結果:a=13 b=86 c=67 最大值為:86C C語言程序設計語言程序設計清華大學出版社清華
21、大學出版社第7章函數信息技術工程系信息技術工程系 李智睿李智睿7.4 7.4 函數的調用函數的調用 一般形式為:一般形式為: 變量名變量名= =函數表達式函數表達式 說明:說明: 這種調用方式用于調用帶有返回值的函數,函數的返回值將參加表達式的運算。 C C語言程序設計語言程序設計清華大學出版社清華大學出版社第7章函數信息技術工程系信息技術工程系 李智睿李智睿7.4 7.4 函數的調用函數的調用 例例7.8 調用函數求調用函數求n! 。main() int n ; long t ; long f() ; /* 聲明被調函數f()的類型為long型 */ printf(輸入一個整數:n) ; s
22、canf(%d , &n) ; t=f(n) ; printf(%d!=%ld , n , t) ;long f(num)int num ; long x ; int i ; x=1 ; for (i=1 ; i0) y=x*power(x , n-1) ; else y=1 ; return y ;運行結果:運行結果:輸入兩個整數:3 , 4 3 4 = 81 power()函數在執(zhí)行的過程中,通過power(x , n-1)直接調用了它自己。 C C語言程序設計語言程序設計清華大學出版社清華大學出版社第7章函數信息技術工程系信息技術工程系 李智睿李智睿解決本章任務解決本章任務例例7
23、.21 編寫一個簡單的學生成績統計程序,要求該程序具有如下功能:編寫一個簡單的學生成績統計程序,要求該程序具有如下功能: (1)菜單顯示及選擇功能。每一菜單項執(zhí)行完成后,均可返回到主菜單,直到選擇菜單中的“退出”項為止。 (2)數據錄入功能。能夠錄入學生的姓名及三門課程的成績。 (3)成績查詢功能。輸入一個學生的姓名后,即可顯示出該學生各門課程的成績。 (4)數據處理功能。可計算并顯示每個學生的總成績及平均成績。 (5)成績排名功能。可按總成績從高到低的順序輸出每個學生的名次、姓名、總成績和平均成績。 程序分析:程序分析: 在前面的“解決任務1”及“解決任務2”中,已經為該程序劃分了模塊結構并
24、完成了程序框架的編寫。下面的程序中,將在main函數中實現菜單顯示及選擇功能,而數據錄入、成績查詢、數據處理及成績排名等功能則分別用4個函數來實現。 C C語言程序設計語言程序設計清華大學出版社清華大學出版社第7章函數信息技術工程系信息技術工程系 李智睿李智睿解決本章任務解決本章任務源程序:# define N 4# include string.hint sumN;main() int choice; char nameN9; int markN3; void data_input(),data_search(),data_process,data_sort(); while(1) clrs
25、cr(); printf(*n); printf( 1.成績數據錄入n); printf( 2.學生成績查詢n); printf( 3.數據統計n); printf( 4.顯示成績名次n); printf( 5.退出n); printf(*n); printf(請選擇(15):); scanf(%d,&choice); switch(choice) case 1: data_input(name,mark); break; case 2: data_search(name,mark); break; case 3: data_process(name,mark); break; cas
26、e 4: data_sort(name,sum); break; case 5: exit(0); C C語言程序設計語言程序設計清華大學出版社清華大學出版社第7章函數信息技術工程系信息技術工程系 李智睿李智睿解決本章任務解決本章任務源程序(續(xù)一):void data_input(char nameN9,int markN3) /*- 數據輸入 - */ int i,j; clrscr(); printf(輸入每個學生的姓名及每門課程的成績,以回車結束n); printf(%10s%10s%10s%10sn,學生姓名,高等數學,大學英語,C語言); for (i=0;iN;i+) gotoxy
27、(4,3+i); gets(namei); /* 輸入學生姓名 */ for (j=0;j3;j+) gotoxy(8+(j+1)*10,3+i); /* 將光標定位到坐標(8+(j+1)*10,3+i) 處 */ scanf(%d,&markij); /* 輸入各科成績 */ C C語言程序設計語言程序設計清華大學出版社清華大學出版社第7章函數信息技術工程系信息技術工程系 李智睿李智睿解決本章任務解決本章任務源程序(續(xù)二):void data_search(char nameN9,int markN3) /* - 成績查詢 - */ int i,j; char student_nam
28、e9; clrscr(); printf(請輸入要查詢的學生姓名:); gets(student_name); for(i=0;iN;i+) if (strcmp(namei,student_name)= =0) printf(%10s%10s%10s%10sn,學生姓名,高等數學,大學英語,C語言); printf(%10s%10d%10d%10dn,namei,marki0,marki1,marki2); break; if (i= =N) printf(沒有該學生的信息!n); printf(按任意鍵返回菜單.); getch();C C語言程序設計語言程序設計清華大學出版社清華大學出版社第7章函數信息技術工程系信息技術工程系 李智睿李智睿
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025標準裝修設計合同范本
- 《物業(yè)管理安全培訓》課件
- 2025年版中外合資經營企業(yè)合同范本
- 2025年數控刃磨床項目合作計劃書
- 2025年抗寄生蟲病藥項目合作計劃書
- 2025年食品蒸發(fā)濃縮機械合作協議書
- 2025年鉗型表項目合作計劃書
- 防潮地面施工方案
- 產地直采核桃協議3篇
- 借款協議補簽模板3篇
- 深信服超融合HCI技術白皮書-20230213
- 2025年陜西省土地工程建設集團有限責任公司招聘筆試參考題庫附帶答案詳解
- 2024廣西公務員【申論A卷、C卷+2023申論A卷】共3套真題及答案
- 《多樣的中國民間美術》課件 2024-2025學年人美版(2024)初中美術七年級下冊
- 人教版 七年級 下冊 語文 第四單元《青春之光》課件
- 2024物業(yè)管理數字化升級服務合同
- 灌漿作業(yè)安全操作規(guī)程(3篇)
- 藥品追回管理制度內容
- 二戰(zhàn)時期的中國抗日戰(zhàn)爭
- 35kv變電站設備安裝工程施工設計方案
- 煤炭清潔高效利用對策
評論
0/150
提交評論