c語言程序設(shè)計課件h_第1頁
c語言程序設(shè)計課件h_第2頁
c語言程序設(shè)計課件h_第3頁
c語言程序設(shè)計課件h_第4頁
c語言程序設(shè)計課件h_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第7章 函數(shù)(3)第7章 函數(shù)7.1 函數(shù)概述7.2 函數(shù)的定義7.3 函數(shù)的參數(shù)和函數(shù)的返回值7.4 函數(shù)的調(diào)用7.5 函數(shù)的嵌套和遞歸調(diào)用7.6 數(shù)組作為函數(shù)的參數(shù)7.7 局部變量和全局變量7.8 變量的存儲類別7.9 內(nèi)部函數(shù)和外部函數(shù)7.10 程序設(shè)計舉例主要內(nèi)容:7.9 內(nèi)部函數(shù)和外部函數(shù) 一個C程序可包含多個函數(shù),這些函數(shù)又可分布在多個程序文件中。 函數(shù)的定義是獨立的,而函數(shù)之間存在著調(diào)用關(guān)系。 函數(shù)可被它所在程序中的其他函數(shù)所調(diào)用,可以指定不能被其它程序文件中的函數(shù)調(diào)用。 根據(jù)函數(shù)能否被其他源文件中的函數(shù)調(diào)用,可將函數(shù)分為兩類:內(nèi)部函數(shù)和外部函數(shù)。7.9.1 內(nèi)部函數(shù) 內(nèi)部函數(shù)是

2、只能被本程序文件中的函數(shù)調(diào)用的函數(shù),其它程序文件的函數(shù)不能調(diào)用該函數(shù),內(nèi)部函數(shù)也稱為靜態(tài)函數(shù)。內(nèi)部函數(shù)的定義格式如下: static 數(shù)據(jù)類型函數(shù)名(形式參數(shù)表列) 說明部分; 語句部分; 7.9.2 外部函數(shù) 外部函數(shù)是可以被程序中的其他程序文件所調(diào)用的函數(shù)。定義格式如下: extern 數(shù)據(jù)類型函數(shù)名(形式參數(shù)表列) 說明部分; 語句部分; 外部函數(shù)是C語言默認的函數(shù)類型,若省略extern,系統(tǒng)默認為外部函數(shù),可以被其它程序文件中的函數(shù)所調(diào)用。 例7.16分析下列程序的運行結(jié)果。/*file1.c*/#include #include int main( ) extern char ge

3、t_ch(); /*外部函數(shù)聲明*/ printf(“%c”,get_ch(); return 0; /*file2.c*/char get_ch() char ch; ch=getchar(); if (a=ch & ch=z) ch=ch-32; return(ch); 該程序由兩個程序文件file1.c和file2.c組成,file2.c中定義的函數(shù)get_ch是外部函數(shù)。file1.c中定義了main函數(shù),并對file2.c中定義的函數(shù)進行了聲明。 運行該程序: 若輸入:a 輸出為:A 注意:若要調(diào)用其它程序文件中定義的函數(shù),必須先對其進行聲明,其聲明格式為: extern 外部函數(shù)原

4、型; 對于存儲類型為static類型的函數(shù),只能被其所在的程序文件中的函數(shù)調(diào)用,其它程序文件不能使用它。若在其它程序文件中聲明或調(diào)用已定義為static存儲類型的函數(shù)就會發(fā)生錯誤。 使用內(nèi)部函數(shù),可以限定函數(shù)的作用域,即使在不同的程序文件中使用同名的內(nèi)部函數(shù),也不會相互干擾。內(nèi)部函數(shù)的這個特點便于不同的用戶分別編寫不同的函數(shù),而不用考慮重名問題。如何運行一個多文件的程序用#include命令將各文件包含到文件1中,即在文件1的開頭加上: include “file2.c” include “file3.c” 例7.17 編寫一個幫助小學生練習兩位整數(shù)加法或減法的程序。由計算機隨機自動出題顯示在

5、屏幕上,小學生從鍵盤輸入答案,計算機根據(jù)輸入的答案顯示“回答正確”或“回答錯誤”??勺杂蛇x擇練習加法或練習減法或結(jié)束練習。練習題的數(shù)量不加限制。# include int numb() /*隨機產(chǎn)生正整數(shù) 函數(shù)(兩位數(shù))*/ int n; mark1: n=rand(); /*rand()值是0到32767 之間的隨機整數(shù)*/ if (n=100 | n10) goto mark1; return n; 7.10 程序設(shè)計舉例void add() /*練習加法函數(shù)*/int a,b,c,x=1; while(x=1) a=numb(); b=numb(); printf(%d+%d=,a,b)

6、; scanf(%d,&c); if (a+b=c) printf(回答正確!n); else printf(回答錯誤!n); printf(“若想停止練習加法請輸入0, 否則請輸入1。n); scanf(%d,&x); void sub() /*練習減法函數(shù)*/int a,b,c,x=1; while(x=1) mark2:a=numb(); b=numb(); if (ab) goto mark2; printf(%d-%d=,a,b); scanf(%d,&c); if (a-b=c) printf(回答正確!n); else printf(回答錯誤!n); printf(若想停止練習減

7、法請輸入0, 否則請輸入1。n); scanf(%d,&x); return;main()int d; srand(time(NULL); /*設(shè)置隨機數(shù)種子為當前時間*/ while (1) printf(-小學生兩位數(shù)加、減法練習軟件-n); printf(-1、練習兩位數(shù)加法-n); printf(-2、練習兩位數(shù)減法-n); printf(-3、結(jié)束練習- -n); printf(-請輸入1或2或3-:); scanf(%d,&d); if (d=1) add(); else if (d=2) sub(); else if (d=3) printf(-本次練習結(jié)束了,再見!- n);

8、break; else printf(-輸入錯誤!請重新輸入!- n); return 0; 例7.18 某個班級有若干名學生,請編寫完成下面任務(wù)的程序:(1)輸入每個學生的姓名、某一門課程的平時成績、期中成績和期末成績。(2)計算并輸出總評成績(總評成績=平時成績*0.1+期中成績*0.3+期末成績*0.6)。(3)根據(jù)總評成績對學生分類統(tǒng)計,即統(tǒng)計總評成績90的人數(shù)、總評成績80且90的人數(shù)、總評成績70且80的人數(shù)、總評成績60且70的人數(shù)、總評成績60的人數(shù)。(4)根據(jù)輸入的學生姓名,查找并打印該學生的各項成績。#include #define SIZE 100 /*不妨設(shè)班級學生數(shù)少

9、于100*/void inputdata( ); /*函數(shù)聲明*/void calculdata( ); /*函數(shù)聲明*/void statisdata( ); /*函數(shù)聲明*/void querydata ( ); /*函數(shù)聲明*/float scoreSIZE4; /* score存儲每個學生平時、期中、期末和總評成績*/char nameSIZE15; /* name存儲每個學生姓名*/int sum; /* sum存儲實際學生人數(shù)*/int main() int choo; printf(“請輸入實際學生人數(shù):”); scanf(“%d”, &sum); while(1) printf

10、(“請選擇下面的某一項任務(wù):”); printf(“n(1)輸入每個學生的姓名、平時成績、期中成績、期末成績?!?; printf(“n(2)計算并輸出每個學生的總評成績?!?; printf(“n(3)根據(jù)總評成績對學生分類統(tǒng)計,輸出各分數(shù)段的學生數(shù)。”); printf(“n(4)根據(jù)輸入的學生姓名,查找并打印該學生的各項成績?!?; printf(“n(5)結(jié)束程序運行?!?; printf(“n請輸入你的選擇(1或2或3或4或5):”); scanf(“%d”, &choo); if (choo=5)break; switch(choo) case 1 : inputdata( );

11、break; /*調(diào)用輸入學生姓名成績函數(shù)*/ case 2 : calculdata( ); break; /*調(diào)用計算總評成績函數(shù)*/ case 3 : statisdata( ); break; /*調(diào)用統(tǒng)計各分數(shù)段人數(shù)函數(shù)*/ case 4 : querydata( ); break; /*調(diào)用根據(jù)姓名查找函數(shù)*/ printf(“n程序運行結(jié)束,再見?!?; return 0; void inputdata( ) /*輸入學生姓名成績函數(shù)*/ int i;for(i=0;isum;i+) printf(“n請輸入學生的姓名:”); gets(namei); printf(“請順序輸入

12、學生平時、期中、期末成績 (例如98,85,96):”); scanf(“%f,%f,%f”, &scorei0, &scorei1,&scorei2); return; void calculdata( ) /*計算總評成績函數(shù)*/ int i; for(i=0;isum;i+) scorei3= 0.1*scorei0+ 0.3*scorei1 + 0.6*scorei2; printf(“n每個學生總評成績?nèi)缦?n”); for(i=0;isum;i+) printf(“%s:%fn”,namei,scorei3); return; void statisdata( ) /*統(tǒng)計各分數(shù)段

13、人數(shù)函數(shù)*/ int i,d, grade5=0; /* grade存儲分類統(tǒng)計結(jié)果(各分數(shù)段人數(shù))*/ for (i=0;isum;i+) d=(int)(scorei3/10); switch(d) case 10 : case 9 : grade4=grade4+1;break; case 8 : grade3=grade3+1;break; case 7 : grade2=grade2+1;break; case 6 : grade1=grade1+1;break; default : grade0=grade0+1; printf(“n總評成績90的人數(shù)是:%d”, grade4 )

14、; printf(“n總評成績80且90的人數(shù)是:%d”, grade3 ); printf(“n總評成績70且80的人數(shù)是:%d”, grade2 ); printf(“n總評成績60且70的人數(shù)是:%d”, grade1 ); printf(“n總評成績60的人數(shù)是:%d”, grade0 ); return; void querydata( ) /*根據(jù)姓名查找函數(shù)*/ char lookname20; int i; printf(“n請輸入姓名:”); gets(lookname); for(i=0;isum;i+) /*根據(jù)輸入的姓名,查找并打印該學生各項成績*/ if (strcmp(namei,lookname)=

溫馨提示

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

評論

0/150

提交評論