帶參數(shù)的函數(shù)_第1頁
帶參數(shù)的函數(shù)_第2頁
帶參數(shù)的函數(shù)_第3頁
帶參數(shù)的函數(shù)_第4頁
帶參數(shù)的函數(shù)_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、2022-3-17第第1頁頁石家莊經(jīng)濟學院信息工程學院石家莊經(jīng)濟學院信息工程學院 C語言課程組語言課程組函數(shù)復習&函數(shù)是程序中的一個相對獨立的單元或模塊,程序在需要時可以函數(shù)是程序中的一個相對獨立的單元或模塊,程序在需要時可以任意多次地調用函數(shù)來完成特定功能。任意多次地調用函數(shù)來完成特定功能。&使用函數(shù)帶來的好處:使用函數(shù)帶來的好處: 程序更清晰、易維護、分模塊方便設計與程序更清晰、易維護、分模塊方便設計與開發(fā)、提高代碼的重用性。開發(fā)、提高代碼的重用性。&語言提供了極為豐富的內置函數(shù),這些內置函數(shù)分門別類地放語言提供了極為豐富的內置函數(shù),這些內置函數(shù)分門別類地放在不同的

2、頭文件中,要使用這些內置函數(shù),只要在程序前包含相應的在不同的頭文件中,要使用這些內置函數(shù),只要在程序前包含相應的頭文件即可。頭文件即可。&自定義函數(shù)是用戶在程序中根據(jù)需要而編寫的函數(shù)。自定義函數(shù)是用戶在程序中根據(jù)需要而編寫的函數(shù)。&函數(shù)的結構包括:返回值類型、函數(shù)名、參數(shù)列表、函數(shù)體。函數(shù)的結構包括:返回值類型、函數(shù)名、參數(shù)列表、函數(shù)體。&函數(shù)原型說明,為向編譯器指出該函數(shù)使用什么樣的格式和語法。函數(shù)原型說明,為向編譯器指出該函數(shù)使用什么樣的格式和語法。&函數(shù)調用時程序控制流將轉向被調函數(shù),被調函數(shù)執(zhí)行結束時,函數(shù)調用時程序控制流將轉向被調函數(shù),被調函數(shù)執(zhí)行結束

3、時,控制流返回主調函數(shù)??刂屏鞣祷刂髡{函數(shù)。&return return 語句用于向調用函數(shù)返回值。語句用于向調用函數(shù)返回值。2022-3-17第第2頁頁石家莊經(jīng)濟學院信息工程學院石家莊經(jīng)濟學院信息工程學院 C語言課程組語言課程組本節(jié)內容&理解變量的作用域理解變量的作用域&理解變量的存儲類型理解變量的存儲類型&理解兩種參數(shù)傳遞的方式:傳值、引用理解兩種參數(shù)傳遞的方式:傳值、引用&熟悉帶參函數(shù)的調用熟悉帶參函數(shù)的調用&熟練使用數(shù)組作為函數(shù)參數(shù)熟練使用數(shù)組作為函數(shù)參數(shù)2022-3-17第第3頁頁石家莊經(jīng)濟學院信息工程學院石家莊經(jīng)濟學院信息工程學院 C

4、語言課程組語言課程組變量的作用域-1程序中變量有不同的使用范圍,稱為變量的作用域。變量的作用域決定變量的可訪問性。void displayDiscount() float discount_amt; . . . . . . . . .局部變量:不能在函數(shù)外使用float discount_amt;void main() . . . . . .void displayDiscount() . . . . . .全局變量:可以在整個程序中使用2022-3-17第第4頁頁石家莊經(jīng)濟學院信息工程學院石家莊經(jīng)濟學院信息工程學院 C語言課程組語言課程組變量的作用域-2#include void addNu

5、mbers() int num1,num2,sum; printf(n 請輸入兩個數(shù):); scanf(%d %d,&num1,&num2); sum=num1+num2; printf( 子函數(shù)中 sum 的值是 %d n,sum);void main() int sum=0; addNumbers(); printf(n 主函數(shù)中 sum 的值是 %d n ,sum);內存內存sumnum2045num1請輸入兩個數(shù):56 45子函數(shù)中sum的值是101主函數(shù)中sum的值是 056sum1012022-3-17第第5頁頁石家莊經(jīng)濟學院信息工程學院石家莊經(jīng)濟學院信息工程學院

6、C語言課程組語言課程組變量的作用域-3#include int sum=0;void addNumbers()int num1,num2;printf(n 請輸入兩個數(shù):);scanf(%d %d,&num1,&num2);sum=num1+num2;printf( 子函數(shù)中 sum 的值是 %d n,sum);void main()addNumbers();printf(n 主函數(shù)中 sum 的值是 %d n ,sum);內存內存sumnum2045num1請輸入兩個數(shù):56 45子函數(shù)中sum的值是101主函數(shù)中sum的值是101561012022-3-17第第6頁頁石家莊

7、經(jīng)濟學院信息工程學院石家莊經(jīng)濟學院信息工程學院 C語言課程組語言課程組存儲類型-1&變量的存儲方式可分為變量的存儲方式可分為“靜態(tài)存儲靜態(tài)存儲”和和“動態(tài)存儲動態(tài)存儲”兩兩種。種。&靜態(tài)存儲變量是一直存在的,而動態(tài)存儲變量則時而存靜態(tài)存儲變量是一直存在的,而動態(tài)存儲變量則時而存在時而消失。在時而消失。&這種由于變量存儲方式不同而產(chǎn)生的特性稱為變量的生這種由于變量存儲方式不同而產(chǎn)生的特性稱為變量的生存期。存期。&生存期表示了變量存在的時間。生存期表示了變量存在的時間。2022-3-17第第7頁頁石家莊經(jīng)濟學院信息工程學院石家莊經(jīng)濟學院信息工程學院 C語言課程組語言

8、課程組存儲類型-2存儲類型存儲類型說明說明auto自動變量局部變量在缺省存儲類型的情況下歸為自動變量。register寄存器變量存放在CPU的寄存器中。對于循環(huán)次數(shù)較多的循環(huán)控制變量及循環(huán)體內反復使用的變量均可定義為寄存器變量。 static靜態(tài)變量在程序執(zhí)行時存在,并且只要整個程序在運行,就可以繼續(xù)訪問該變量。extern外部變量作用域是整個程序,包含該程序的各個文件。生存期非常長,它在該程序運行結束后,才釋放內存。2022-3-17第第8頁頁石家莊經(jīng)濟學院信息工程學院石家莊經(jīng)濟學院信息工程學院 C語言課程組語言課程組靜態(tài)局部變量&靜態(tài)局部變量生存期為整個源程序。靜態(tài)局部變量生存期為

9、整個源程序。&靜態(tài)局部變量作用域與自動變量相同,即只能在定義該變靜態(tài)局部變量作用域與自動變量相同,即只能在定義該變量的函數(shù)內使用該變量。量的函數(shù)內使用該變量。&對基本類型的靜態(tài)局部變量若在說明時未賦以初值,則系對基本類型的靜態(tài)局部變量若在說明時未賦以初值,則系統(tǒng)自動賦予統(tǒng)自動賦予0值。值。&函數(shù)被調用時,其中的靜態(tài)局部變量的值將保留前次被調函數(shù)被調用時,其中的靜態(tài)局部變量的值將保留前次被調用的結果。用的結果。2022-3-17第第9頁頁石家莊經(jīng)濟學院信息工程學院石家莊經(jīng)濟學院信息工程學院 C語言課程組語言課程組靜態(tài)局部變量示例靜態(tài)局部變量示例void format()

10、static int m = 0; m+;if (m % 10 = 0)putchar(n); elseputchar( ); void main()int i;for(i=0;i50;i+)printf(%d,i);format();內存內存i0m011循環(huán)執(zhí)行50次49490 10 1 2 3 4 5 6 7 8 910 11 12 13 14 15 16 17 18 1920 21 22 23 24 25 26 27 28 2930 31 32 33 34 35 36 37 38 3940 41 42 43 44 45 46 47 48 4922022-3-17第第10頁頁石家莊經(jīng)濟學院

11、信息工程學院石家莊經(jīng)濟學院信息工程學院 C語言課程組語言課程組靜態(tài)全局變量) )靜態(tài)全局變量與普通全局變量在存儲方式上完全相同。靜態(tài)全局變量與普通全局變量在存儲方式上完全相同。 非靜態(tài)全局變量的作用域是整個源程序;靜態(tài)全非靜態(tài)全局變量的作用域是整個源程序;靜態(tài)全局變量的作用域只是定義它的文件。局變量的作用域只是定義它的文件。2022-3-17第第11頁頁石家莊經(jīng)濟學院信息工程學院石家莊經(jīng)濟學院信息工程學院 C語言課程組語言課程組函數(shù)形參與實參void main ( )void main ( ) . . . . . . . . . . . . display ( 10, 20.5 ); disp

12、lay ( 10, 20.5 ); display ( int num, float fraction )display ( int num, float fraction ) . . . . . . . . . . . . 實際參數(shù)函數(shù)調用形式參數(shù)2022-3-17第第12頁頁石家莊經(jīng)濟學院信息工程學院石家莊經(jīng)濟學院信息工程學院 C語言課程組語言課程組傳值調用void main() int a = 0; /初始化a值為0 func(a); /調用函數(shù)func printf(%d,a); /輸出a的結果/定義函數(shù)funcvoid func(int a) a = 10; /讓參數(shù)a等于100傳值

13、調用將會輸出什么2022-3-17第第13頁頁石家莊經(jīng)濟學院信息工程學院石家莊經(jīng)濟學院信息工程學院 C語言課程組語言課程組#include void increment(int,int);void main()int num1,num2;printf(n 請輸入兩個數(shù): );scanf( %d %d,&num1,&num2);printf(n 遞增前的值是 %d 和 %dn, num1, num2);increment(num1,num2);printf(n 遞增后的值是 %d 和 %dn, num1, num2);void increment(int val1,int val

14、2)val1+;val2+;printf(n 子函數(shù)中值 %d 和 %dn, val1, val2);傳值調用示例請輸入兩個數(shù) : 34 56遞增前的值是 34 和 56_遞增后的值是 34 和 56num1num2var13456var2子函數(shù)中的值是 35 和 5735345657num1num234563456FF23FF05調用后修改為調用后修改為3535val2FFEAFF45將變量num1的值賦給形參val1將變量num2的值賦給形參val2val1調用后修改為調用后修改為5757調用函數(shù)被調用函數(shù)2022-3-17第第14頁頁石家莊經(jīng)濟學院信息工程學院石家莊經(jīng)濟學院信息工程學院

15、C語言課程組語言課程組void main() int a = 0; /初始化a值為0 func(&a); /調用函數(shù)F printf(%d,a); /輸出a的結果/定義函數(shù)Fvoid func(int *a) *a = 10; /讓參數(shù)a等于10引用調用FFE0引用調用a=FFE0將會輸出什么2022-3-17第第15頁頁石家莊經(jīng)濟學院信息工程學院石家莊經(jīng)濟學院信息工程學院 C語言課程組語言課程組#include void increment(int*, int*);void main()int num1,num2;printf(n 請輸入兩個數(shù): );scanf( %d %d,&am

16、p;num1,&num2);printf(n 遞增前的值是 %d 和 %dn,num1,num2);increment(&num1,&num2);printf(n 遞增后的值是 %d 和 %dn, num1, num2);void increment(int *ptr1, int *ptr2)(*ptr1)+;(*ptr2)+;printf(n 子函數(shù)中值 %d 和 %dn, *ptr1, *ptr2);引用調用示例請輸入兩個數(shù) : 45 67遞增前的值是 45 和 67_遞增后的值是 46 和 68num1num2var14567var2子函數(shù)中的值是 46 和 68

17、46FF23FF0568FF23FF05num1num24567FF23FF05FF23FF05ptr2FF45FF51調用前為45調用后為46將變量num1的地址賦給形參,即指針ptr1指向變量num1ptr1調用前為67調用后為68將變量num2的地址賦給形參,即指針ptr2指向變量num22022-3-17第第16頁頁石家莊經(jīng)濟學院信息工程學院石家莊經(jīng)濟學院信息工程學院 C語言課程組語言課程組數(shù)組作為函數(shù)參數(shù)&在用數(shù)組作實參時,以傳址方式調用函數(shù),也在用數(shù)組作實參時,以傳址方式調用函數(shù),也就是說把實參數(shù)組的首地址賦給形參。就是說把實參數(shù)組的首地址賦給形參。&實際上形參數(shù)組

18、和實參數(shù)組為同一數(shù)組,共同實際上形參數(shù)組和實參數(shù)組為同一數(shù)組,共同擁有一段內存空間。擁有一段內存空間。2022-3-17第第17頁頁石家莊經(jīng)濟學院信息工程學院石家莊經(jīng)濟學院信息工程學院 C語言課程組語言課程組數(shù)組作為參數(shù)示例1問題描述:問題描述:通過函數(shù)實現(xiàn)通過函數(shù)實現(xiàn)5 5個學員成績的排序。個學員成績的排序。 #include #define N 5void sort(float);void main() float gradeN; int i; printf(n 輸入 %d 個學員的成績:n,N); for(i=0;iN;i+)scanf(%f,&gradei); sort(gra

19、de); printf(n 排序后的成績?yōu)椋簄); for(i=0;iN;i+) printf(%5.2f ,gradei); printf(n);傳遞數(shù)組時不使用 “&”void sort(float aN) int i,j; float temp; for(i=0;iN;i+) for(j=0;j aj+1) temp = aj+1;aj+1 = aj;aj = temp; 2022-3-17第第18頁頁石家莊經(jīng)濟學院信息工程學院石家莊經(jīng)濟學院信息工程學院 C語言課程組語言課程組問題描述:通過函數(shù)實現(xiàn)求5個數(shù)中的最大值。 #include int find_larg(int *);

20、void main() int arr15; int i, larg_num; printf(n 請輸入 5 個不同的值,存儲在一個數(shù)組中 n); for (i = 0; i = 4; i+) scanf(%d, &arr1i); larg_num = find_larg(arr1); printf(n 最大的數(shù)是:%dn , larg_num);數(shù)組作為參數(shù)示例2int find_larg(int *ptr) int high = *ptr,i; ptr+; for (i = 1; i =4; i+) if (high *ptr) high = *ptr; ptr+; return

21、high;2022-3-17第第19頁頁石家莊經(jīng)濟學院信息工程學院石家莊經(jīng)濟學院信息工程學院 C語言課程組語言課程組數(shù)組作為參數(shù)示例3通過函數(shù)調用,求一組數(shù)中的最大值。#include int max(int x,int n);void main() int num5,ma,i; printf(請輸入請輸入5個數(shù)個數(shù):n); for(i=0;i5;i+) scanf(%d,&numi); ma=max(num,5); printf(n最大值為:最大值為:%d,ma);int max(int x ,int n) int d,i; d=x0; for(i=1;id) d=xi; retur

22、n d;函數(shù)有兩個參數(shù),數(shù)組x和整數(shù)長度n 函數(shù)調用是用函數(shù)名num 2022-3-17第第20頁頁石家莊經(jīng)濟學院信息工程學院石家莊經(jīng)濟學院信息工程學院 C語言課程組語言課程組用指向一維數(shù)組的指針表示數(shù)組元素#include void main() static int a5=2,4,6,8,10; int n,*p; for(n=0;n5;n+) printf(%dt,an); /*數(shù)組下標法數(shù)組下標法*/ printf(n); for(n=0;n5;n+) printf(%dt,*(a+n); /*指針法之指針法之*(a+n)法法*/ printf(n); for(p=a;pa+5;p+)

23、 printf(%dt,*p); /*指針法之指針法之*p法法*/ printf(n); p=a; for(n=0;n5;n+) printf(%dt,pn); /*指針下標法指針下標法*/2022-3-17第第21頁頁石家莊經(jīng)濟學院信息工程學院石家莊經(jīng)濟學院信息工程學院 C語言課程組語言課程組結構體作為函數(shù)參數(shù)&可以將結構體作為參數(shù)傳遞給函數(shù),也可以定義可以將結構體作為參數(shù)傳遞給函數(shù),也可以定義返回結構值的函數(shù)。返回結構值的函數(shù)。&結構體作為函數(shù)參數(shù)有三種不同方法:結構體作為函數(shù)參數(shù)有三種不同方法:(1)將結構體成員的值傳遞給函數(shù)處理。)將結構體成員的值傳遞給函數(shù)處理。(2)

24、將整個結構體作為參數(shù)值傳遞給函數(shù)。)將整個結構體作為參數(shù)值傳遞給函數(shù)。(3)將結構體指針變量做函數(shù)的參數(shù)。)將結構體指針變量做函數(shù)的參數(shù)。把結構作為整體來處理,但作用方式和效果不同。2022-3-17第第22頁頁石家莊經(jīng)濟學院信息工程學院石家莊經(jīng)濟學院信息工程學院 C語言課程組語言課程組結構體成員作為函數(shù)參數(shù)struct film char name25; /電影名 char director25; /導演 int duration; /片長;void display (char *, char *, int *);void main() struct film f1; printf(nt 請

25、輸入電影的詳細信息); printf(nn 請輸入影片名:); gets(); fflush(stdin); printf(n 請輸入導演姓名: ); gets(f1.director); fflush(stdin); printf(n 請輸入電影片長(分鐘): ); scanf(%d,&f1.duration); display(,f1.director,&f1.duration);void display(char *n, char *d, int *m)printf(nt 電影的詳細信息n);printf(n 片名: %s,n);printf(

26、n 導演: %s,d);printf(n 片長: %dn,*m);前兩個參數(shù)為字符串,所以不使用“&”2022-3-17第第23頁頁石家莊經(jīng)濟學院信息工程學院石家莊經(jīng)濟學院信息工程學院 C語言課程組語言課程組問題描述: 求已知兩個復數(shù)的和。分析: 兩個復數(shù)a+ib和c+id的和為: x+iy 其中:x=a+c y=b+d#includestruct complex double re;/實部 double im;/虛部;struct complex add(struct complex,struct complex);void main() struct complex x=6.5,8

27、.9,y=7.1,9.4; struct complex z; z=add(x,y); printf(和為:%5.2lf+i%5.2lfn,z.re,z.im);整個結構體作為參數(shù) struct complex add(struct complex a,struct complex b)struct complex c;c.re=a.re+b.re;c.im=a.im+b.im;return c;傳遞結構時不使用 “&”,所以實際上是傳值調用,即,將結構變量的每個成員值逐個傳送。2022-3-17第第24頁頁石家莊經(jīng)濟學院信息工程學院石家莊經(jīng)濟學院信息工程學院 C語言課程組語言課程組已知5個學生的姓名、性別、成績,使用結構體數(shù)組存儲。編寫函數(shù),求總分、平均分和不及格的學生人數(shù)。#define N 5;struct student int num; char *name; char sex; float score;stuN=1,李芳,F,45,2,于紅,F,62.5,3,何萬山,M,92.5,4,程亞麗,M,87,5,王明,M,58;void ave(struct student *ps);void main() struct student *ps; ps=stu; ave(ps);結構體指針作為參數(shù) void ave(struct st

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論