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

下載本文檔

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

文檔簡(jiǎn)介

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 變量的存儲(chǔ)類(lèi)別7.9 內(nèi)部函數(shù)和外部函數(shù)7.10 程序設(shè)計(jì)舉例主要內(nèi)容:7.9 內(nèi)部函數(shù)和外部函數(shù) 一個(gè)C程序可包含多個(gè)函數(shù),這些函數(shù)又可分布在多個(gè)程序文件中。 函數(shù)的定義是獨(dú)立的,而函數(shù)之間存在著調(diào)用關(guān)系。 函數(shù)可被它所在程序中的其他函數(shù)所調(diào)用,可以指定不能被其它程序文件中的函數(shù)調(diào)用。 根據(jù)函數(shù)能否被其他源文件中的函數(shù)調(diào)用,可將函數(shù)分為兩類(lèi):內(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ù)類(lèi)型函數(shù)名(形式參數(shù)表列) 說(shuō)明部分; 語(yǔ)句部分; 7.9.2 外部函數(shù) 外部函數(shù)是可以被程序中的其他程序文件所調(diào)用的函數(shù)。定義格式如下: extern 數(shù)據(jù)類(lèi)型函數(shù)名(形式參數(shù)表列) 說(shuō)明部分; 語(yǔ)句部分; 外部函數(shù)是C語(yǔ)言默認(rèn)的函數(shù)類(lèi)型,若省略extern,系統(tǒng)默認(rèn)為外部函數(shù),可以被其它程序文件中的函數(shù)所調(diào)用。 例7.16分析下列程序的運(yùn)行結(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); 該程序由兩個(gè)程序文件file1.c和file2.c組成,file2.c中定義的函數(shù)get_ch是外部函數(shù)。file1.c中定義了main函數(shù),并對(duì)file2.c中定義的函數(shù)進(jìn)行了聲明。 運(yùn)行該程序: 若輸入:a 輸出為:A 注意:若要調(diào)用其它程序文件中定義的函數(shù),必須先對(duì)其進(jìn)行聲明,其聲明格式為: extern 外部函數(shù)原

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

5、屏幕上,小學(xué)生從鍵盤(pán)輸入答案,計(jì)算機(jī)根據(jù)輸入的答案顯示“回答正確”或“回答錯(cuò)誤”??勺杂蛇x擇練習(xí)加法或練習(xí)減法或結(jié)束練習(xí)。練習(xí)題的數(shù)量不加限制。# include int numb() /*隨機(jī)產(chǎn)生正整數(shù) 函數(shù)(兩位數(shù))*/ int n; mark1: n=rand(); /*rand()值是0到32767 之間的隨機(jī)整數(shù)*/ if (n=100 | n10) goto mark1; return n; 7.10 程序設(shè)計(jì)舉例void add() /*練習(xí)加法函數(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(回答錯(cuò)誤!n); printf(“若想停止練習(xí)加法請(qǐng)輸入0, 否則請(qǐng)輸入1。n); scanf(%d,&x); void sub() /*練習(xí)減法函數(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(回答錯(cuò)誤!n); printf(若想停止練習(xí)減

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

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

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

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

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

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

13、人數(shù)函數(shù)*/ int i,d, grade5=0; /* grade存儲(chǔ)分類(lèi)統(tǒng)計(jì)結(jié)果(各分?jǐn)?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總評(píng)成績(jī)90的人數(shù)是:%d”, grade4 )

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論