c語(yǔ)言項(xiàng)目5函數(shù)_第1頁(yè)
c語(yǔ)言項(xiàng)目5函數(shù)_第2頁(yè)
c語(yǔ)言項(xiàng)目5函數(shù)_第3頁(yè)
c語(yǔ)言項(xiàng)目5函數(shù)_第4頁(yè)
c語(yǔ)言項(xiàng)目5函數(shù)_第5頁(yè)
已閱讀5頁(yè),還剩25頁(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、項(xiàng)目五項(xiàng)目五 根據(jù)條件進(jìn)行學(xué)生成績(jī)匯總根據(jù)條件進(jìn)行學(xué)生成績(jī)匯總項(xiàng)目要求項(xiàng)目要求一個(gè)班有一個(gè)班有40位學(xué)生(分成五個(gè)組,但每個(gè)組的人數(shù)不一樣)參加了期終考試位學(xué)生(分成五個(gè)組,但每個(gè)組的人數(shù)不一樣)參加了期終考試(考了三門課,分別是數(shù)學(xué)、語(yǔ)文、英語(yǔ)),老師想統(tǒng)計(jì)以下信息:(考了三門課,分別是數(shù)學(xué)、語(yǔ)文、英語(yǔ)),老師想統(tǒng)計(jì)以下信息:1、統(tǒng)計(jì)、統(tǒng)計(jì)小組一門課程的總分及平均分;小組一門課程的總分及平均分;2、統(tǒng)計(jì)小組若干門課程的總分及平均分;、統(tǒng)計(jì)小組若干門課程的總分及平均分;3、輸出排序后小組三門課成績(jī)單。輸出排序后小組三門課成績(jī)單。程序運(yùn)行結(jié)果程序運(yùn)行結(jié)果項(xiàng)目分析項(xiàng)目分析本項(xiàng)目要完成的功能相對(duì)比較

2、多,為了使程序的結(jié)構(gòu)清晰,我們可以將此項(xiàng)目進(jìn)行分解: A:統(tǒng)計(jì)小組一門課程的總分及平均分;B:統(tǒng)計(jì)小組若干門課程的總分及平均分;C: 輸出小組排序后三門課程的成績(jī)單;M總負(fù)責(zé),即制作菜單并根據(jù)需要調(diào)用相應(yīng)的函數(shù)。而C這個(gè)任務(wù)又比較多,所以將它分解為:d:輸入記錄;e:計(jì)算每個(gè)同學(xué)的總分及平均分,f:是排序;g:輸出排序后的記錄。這樣的編程方式結(jié)構(gòu)清晰,特別是對(duì)功能復(fù)雜的程序。我們將A,B,C,D、e、f、g稱為函數(shù),M稱為主函數(shù)。一個(gè)完整的C語(yǔ)言程序是由一個(gè)main()函數(shù)及若干個(gè)其他函數(shù)組成。在前面各項(xiàng)目中介紹的程序都只有一個(gè)主函數(shù)main(),但實(shí)用程序往往由多個(gè)函數(shù)組成。首先,要了解函數(shù)

3、的定義; 第二,要懂得函數(shù)的調(diào)用;第三,函數(shù)的其他知識(shí)。 任務(wù)任務(wù)1 統(tǒng)計(jì)小組一門課程的總分及平均分統(tǒng)計(jì)小組一門課程的總分及平均分一、問(wèn)題情景一、問(wèn)題情景一個(gè)班有40位學(xué)生(分成五個(gè)組,但每個(gè)組的人數(shù)不一樣)參加了期終考試(考了三門課,分別是數(shù)學(xué)、語(yǔ)文、英語(yǔ)),請(qǐng)你用菜單的方式:求小組一門課程的總分及平均分。即完成本項(xiàng)目中的第一個(gè)要求。分析:主函數(shù)的功能是設(shè)計(jì)一個(gè)菜單,由所選擇的菜單調(diào)用相應(yīng)的函數(shù),但為了界面清晰,所以程序的執(zhí)行過(guò)程中多次用一條線劃界。所以問(wèn)題就歸結(jié)為制作一條線的函數(shù)及求一門課程的總分及平均分。#include stdio.hvoid ppp()printf(-n); floa

4、t avg1(int n)int x,i;float s=0;ppp();printf(請(qǐng)輸入本小組的考試請(qǐng)輸入本小組的考試成績(jī)成績(jī)n);for(i=1;i=n;i+)scanf(%d,&x);s+=x;return s;main()int k,n,km;float sum,average;char ch;ppp();printf(t班級(jí)成績(jī)統(tǒng)計(jì)n);ppp();printf(1、統(tǒng)計(jì)小組一門課程的總分及平均分n,n);printf(2、統(tǒng)計(jì)小組若干門課程的總分及平均分n);printf(3、輸出小組排序后三門課程的成績(jī)單n);printf(請(qǐng)輸入13之間的一個(gè)數(shù):);scanf(%d

5、,&k);ppp();if (k=1)printf(請(qǐng)輸入統(tǒng)計(jì)的小組的人數(shù)n=);scanf(%d,&n);ppp();sum=avg1(n); average=sum/n;printf(本小組的總分=%.0ft平均分=%.1fn,sum,average); ppp(); 無(wú)參函數(shù)有參函數(shù)有參函數(shù)三、相關(guān)知識(shí)三、相關(guān)知識(shí)(一一) 無(wú)參函數(shù)無(wú)參函數(shù)1、無(wú)參函數(shù)的一般形式類型說(shuō)明符 函數(shù)名()聲明部分 語(yǔ)句無(wú)參函數(shù)的調(diào)用函數(shù)說(shuō)明語(yǔ)句函數(shù)名();函數(shù)類型 函數(shù)名()函數(shù)體;main()語(yǔ)句;函數(shù)名();函數(shù)名();語(yǔ)句;函數(shù)類型 函數(shù)名();main()語(yǔ)句;函數(shù)名()函數(shù)名();語(yǔ)

6、句;函數(shù)類型 函數(shù)名()函數(shù)體;函數(shù)說(shuō)明語(yǔ)句【例例5-1】輸出十行十列的星號(hào)(要求用函數(shù)調(diào)用方式解決)輸出十行十列的星號(hào)(要求用函數(shù)調(diào)用方式解決) 方法一方法一(主函數(shù)在前主函數(shù)在前)#include stdio.hvoid pp();main()int i;for(i=1;i=10;i+)pp();void pp()printf(*n);方法二(主函數(shù)在后)方法二(主函數(shù)在后)#include stdio.hvoid pp()printf(*n);main()int i;for(i=1;i=10;i+)pp();void 表示這個(gè)函數(shù)無(wú)返回值;表示這個(gè)函數(shù)無(wú)返回值;pp是函數(shù)名是函數(shù)名 【例

7、例5-2】用菜單的形式分別選擇百錢買百雞,九九表,水仙用菜單的形式分別選擇百錢買百雞,九九表,水仙花數(shù)花數(shù) 分析:百錢買百雞,九九表,水仙花數(shù)分別在項(xiàng)目三的例3-12、例3-11、例3-18中介紹過(guò)。本題就是將例3-12、例3-11、例3-18改為函數(shù),然后在主函數(shù)中調(diào)用即可。所以本程序中有三個(gè)無(wú)參函數(shù),即sxhs()、jjb()、bqmbj()分別是求水仙花數(shù)、求九九表、求百錢買百雞。#include stdio.hvoid sxhs();void jjb();void bqmbj();main()int i;printf(1.水仙花數(shù)n);printf(2.乘法九九表n);printf(3

8、.百錢買百雞n);printf(請(qǐng)選擇13的菜單:);scanf(%d,&i);if (i=1)sxhs(); /當(dāng)x=1,調(diào)用求水仙花數(shù)的函數(shù)if (i=2)jjb();if (i=3)bqmbj();/*水仙花數(shù)*/void sxhs()int i,a,b,c;printf(n下列數(shù)字為水仙花數(shù):n);for(i=100;i=999;i+)a=i/100;b=(i-a*100)/10;c=i-a*100-b*10;if (i=a*a*a+b*b*b+c*c*c) printf(%d n,i);/*乘法九九表*/void jjb()int i,j;printf(n乘法九九表n);fo

9、r(i=1;i=9;i+)for(j=1;j=i;j+) printf(%-5d,i*j);printf(n);/*百錢買百雞*/void bqmbj()int x,y,z;printf(公雞數(shù) 母雞數(shù) 小雞數(shù)n);for(x=1;x=50;x+) for(y=1;y=33;y+) z=100-x-y; if(2*x+3*y+0.5*z=100)printf(%4d %4d %4dn,x,y,z);(二二) 空函數(shù)空函數(shù)類型說(shuō)明符 函數(shù)名()“小括弧”中是空的,“花括弧”中也是空的。此函數(shù)的沒(méi)有任何功能,只是占一個(gè)位置而已。這樣做的好處是將來(lái)擴(kuò)充新的功能方便。(三)有參函數(shù)(三)有參函數(shù)1、有

10、參函數(shù)的一般形式類型說(shuō)明符 函數(shù)名(形參類型 形參名,形參類型 形參名,形參類型 形參名)聲明部分 語(yǔ)句return 語(yǔ)句“小括弧”中的形參,可以有一個(gè),也可以有多個(gè)。函數(shù)體中的最后一個(gè)語(yǔ)句,通常是return語(yǔ)句,其作用是帶回一個(gè)返回值。若沒(méi)有返回值,則可以省略return語(yǔ)句。2、有參函數(shù)的調(diào)用與無(wú)參函數(shù)類似,只不過(guò)需要有形參。即:函數(shù)名(實(shí)參列表);具體有以下二種:函數(shù)類型 函數(shù)名(形參列表)函數(shù)體;main()語(yǔ)句;函數(shù)名(實(shí)參列表);函數(shù)名(實(shí)參列表);語(yǔ)句;函數(shù)類型 函數(shù)名(形參列表);main()語(yǔ)句;函數(shù)名(實(shí)參列表);函數(shù)名(實(shí)參列表);語(yǔ)句;函數(shù)類型 函數(shù)名(形參列表)函數(shù)

11、體;【例例5-3】求求Cmn=m!/(n!(m-n)!)分析:如果有一個(gè)函數(shù)jc(k),其功能是求k!,即jc(5)就是5!,jc(8)就是8!,jc(10)就是10!,顯然對(duì)m!/(n!(m-n)!)來(lái)說(shuō),就是jc(m)/(jc(n)*jc(m-n)即可。 #include stdio.hint jc(int k); /*函數(shù)說(shuō)明語(yǔ)句*/main() int m,n,c;printf(請(qǐng)輸入m,n的值:);scanf(%d%d,&m,&n);c=jc(m)/(jc(n)*jc(m-n);printf(Cmn的值為%dn,c);/*階乘的函數(shù)*/int jc(int k)int

12、 i;int t=1;for(i=1;i=k;i+)t=t*i;return t;#include stdio.h/*階乘的函數(shù)*/int jc(int k)int i;int t=1;for(i=1;i=k;i+)t=t*i;return t;/*主函數(shù)*/main()int m,n,c;printf(請(qǐng)輸入m,n的值:);scanf(%d%d,&m,&n);c=jc(m)/(jc(n)*jc(m-n);printf(Cmn的值為%dn,c);C語(yǔ)言規(guī)定,實(shí)參變量對(duì)形參變量的數(shù)據(jù)傳遞是“值傳遞”,即單向傳遞。 【例例5-4】調(diào)用函數(shù)時(shí)的數(shù)據(jù)傳遞。輸入二個(gè)數(shù)調(diào)用函數(shù)時(shí)的數(shù)據(jù)傳遞

13、。輸入二個(gè)數(shù)x,y,求二個(gè),求二個(gè)數(shù)中的大數(shù)。數(shù)中的大數(shù)。 #include stdio.hint max(int x,int y) int t,max;if(xy)t=x;x=y;y=t;max=x;printf(在函數(shù)中的在函數(shù)中的x,y的值為的值為x=%d,y=%dn,x,y);return max;main()int x,y,mm;printf(請(qǐng)輸入請(qǐng)輸入x,y的值的值:);scanf(%d,%d,&x,&y);printf(調(diào)用函數(shù)前調(diào)用函數(shù)前x,y的值為的值為x=%d,y=%dn,x,y);mm=max(x,y);printf(mm的值為的值為%dn,mm);pr

14、intf(調(diào)用函數(shù)后調(diào)用函數(shù)后x,y的值為的值為x=%d,y=%dn,x,y); 盡管在主函數(shù)和max()函數(shù)中都定義了名為x,y的變量,但它們是屬于不同的實(shí)體,它們僅僅是名稱相同而已,就好比有二個(gè)人都叫“李小芳”,但一個(gè)是計(jì)算機(jī)班的“李小芳”,但另一個(gè)是國(guó)貿(mào)班的“李小芳”。 【例例5-5】請(qǐng)仿照例請(qǐng)仿照例5-2編寫(xiě)一個(gè)用菜單的形式分別選擇編寫(xiě)一個(gè)用菜單的形式分別選擇1-100的奇數(shù)和,韓信點(diǎn)兵問(wèn)題。(韓信點(diǎn)兵問(wèn)題在例的奇數(shù)和,韓信點(diǎn)兵問(wèn)題。(韓信點(diǎn)兵問(wèn)題在例3-20)#include stdio.hvoid hxdb() /韓信點(diǎn)兵韓信點(diǎn)兵long i;for(i=1;i+)if(i%3=2

15、&i%5=2&i%7=4&i%13=6&i%17=2&i%19=10)break;printf(韓信統(tǒng)領(lǐng)的兵數(shù)有:韓信統(tǒng)領(lǐng)的兵數(shù)有:%ldn,i);void sum() /1-100的奇數(shù)和的奇數(shù)和int i,s=0;for(i=1;i=100;i=i+2)s=s+i;printf(1-100奇數(shù)的和為奇數(shù)的和為%dn,s);分析:1-100的奇數(shù)和,韓信點(diǎn)兵分別在項(xiàng)目三的實(shí)踐訓(xùn)練、例3-24中介紹過(guò)。本題就是將它改為函數(shù),然后在主函數(shù)中調(diào)用即可。所以本程序中有二個(gè)無(wú)參函數(shù),即hxdb ( )、sum( )分別是韓信點(diǎn)兵、1-100的奇數(shù)和。main()

16、int i;printf(1.韓信點(diǎn)兵n);printf(2.1-100的奇數(shù)和n);printf(請(qǐng)選擇12的菜單:);scanf(%d,&i);if (i=1)hxdb(); /當(dāng)x=1,調(diào)用韓信點(diǎn)兵函數(shù)if (i=2)sum(); 【例例5-6】編寫(xiě)一個(gè)函數(shù):編寫(xiě)一個(gè)函數(shù):x!,在主函數(shù)中調(diào)用它。!,在主函數(shù)中調(diào)用它。#include stdio.hint jc(int x) int i,t=1;for(i=1;i=1;i-)if(x%i=0 & y%i=0)return i;main()int n,m;printf(請(qǐng)輸入n、m的值);scanf(%d%d,&n

17、,&m);printf(%d與%d的最大公約數(shù)=%dn,n,m,gy(n,m);【例例5-8】編寫(xiě)一個(gè)函數(shù):輸出一排星號(hào),在主函數(shù)中調(diào)用它,編寫(xiě)一個(gè)函數(shù):輸出一排星號(hào),在主函數(shù)中調(diào)用它,使之輸出如下圖形。使之輸出如下圖形。#include stdio.hvoid xh(int n) int i;for(i=1;i=n;i+)printf(*);main()int m,i;printf(請(qǐng)輸入m的值);scanf(%d,&m);for(i=1;i=m;i+)xh(i);printf(n);* * * * * *任務(wù)任務(wù)2 統(tǒng)計(jì)小組若干門課程的總分及平均分統(tǒng)計(jì)小組若干門課程的總分及

18、平均分一、問(wèn)題情景一、問(wèn)題情景一個(gè)班有40位學(xué)生(分成五個(gè)組,但每個(gè)組的人數(shù)不一樣)參加了期終考試(考了三門課,分別是數(shù)學(xué)、語(yǔ)文、英語(yǔ)),請(qǐng)你用菜單的方式:求小組若干門課程的總分及平均分。即完成本項(xiàng)目中的第二個(gè)要求。分析:由圖可分析出主函數(shù)的功能是設(shè)計(jì)一個(gè)菜單,由所選擇的菜單調(diào)用相應(yīng)的函數(shù),但為了界面清晰,所以在程序的執(zhí)行過(guò)程中出現(xiàn):求小組的若干門成績(jī)的平均分及總分的函數(shù)又調(diào)用了一條線的函數(shù)ppp()。二、具體實(shí)現(xiàn)二、具體實(shí)現(xiàn)#include stdio.h/*輸出線條函數(shù)*/ppp()printf(-n);/*某個(gè)小組若干門課程的平均分與總分函數(shù)*/void avgevery(int n,i

19、nt km)int x,i,j;float s,avg;for(j=1;j=km;j+)s=0;printf(請(qǐng)輸入本小組第%d門考試成績(jī)n,j);ppp();for(i=1;i=n;i+)scanf(%d,&x);s+=x;avg=s/n;printf(第%d課程的總分=%.0ft平均分=%.1fn,j,s,avg);ppp();/*主函數(shù)*/main()int k,n,km;float sum,average;char ch;ppp();printf(t班級(jí)成績(jī)統(tǒng)計(jì)n);ppp();printf(1、統(tǒng)計(jì)小組一門課程的總分及平均分n,n);printf(2、統(tǒng)計(jì)小組若干門課程的總分

20、及平均分n);printf(3、輸出小組排序后三門課程的成績(jī)單n);printf(請(qǐng)輸入13之間的一個(gè)數(shù):);scanf(%d,&k);ppp();if(k=2)printf(請(qǐng)輸入統(tǒng)計(jì)的小組的人數(shù)n=);scanf(%d,&n);ppp();printf(請(qǐng)輸入要統(tǒng)計(jì)的課程門數(shù)km=);scanf(%d,&km);ppp();avgevery(n,km);三、相關(guān)知識(shí)三、相關(guān)知識(shí) 嵌套調(diào)用的定義:即在調(diào)用一個(gè)函數(shù)的過(guò)程中,可以再調(diào)用一個(gè)函數(shù)。 main()函數(shù)調(diào)用a1函數(shù)a1函數(shù)調(diào)用a2函數(shù)a2函數(shù)結(jié)束執(zhí)行main函數(shù)中調(diào)用a1函數(shù)時(shí),即轉(zhuǎn)去執(zhí)行a1函數(shù);在a1函數(shù)中

21、調(diào)用a2函數(shù)時(shí),又去執(zhí)行a2函數(shù);a2函數(shù)執(zhí)行完畢返回a1函數(shù)斷點(diǎn)繼續(xù)執(zhí)行;a1函數(shù)執(zhí)行完畢返回main函數(shù)的斷點(diǎn)繼續(xù)執(zhí)行,直至程序執(zhí)行結(jié)束。例題例題【例5-9】函數(shù)的嵌套調(diào)用。求Cmn=m!/(n!(m-n)!)。要求用函數(shù)的嵌套方式完成。分析:假設(shè)有3人參加, C負(fù)責(zé)計(jì)算jc(k), B向C要jc(k),然后計(jì)算Cmn;A負(fù)責(zé)輸入m,n二個(gè)數(shù),然后直接問(wèn)B要Cmn的結(jié)果。#include stdio.h/*c的程序?yàn)?/int jc(int k)int i;int t=1;for(i=1;i=k;i+)t=t*i;return t;/*而B(niǎo)的程序?yàn)椋?/int cmn(int m,int

22、n)int z;z= jc(m)/(jc(n)*jc(m-n);return z;/*A的程序?yàn)椋?/main()int m,n,c;printf(請(qǐng)輸入m,n的值:);scanf(%d%d,&m,&n);c=cmn(m,n);printf(Cmn的值為%dn,c);這個(gè)程序就是A要調(diào)用B,而B(niǎo)要調(diào)用C,所以就稱為函數(shù)的嵌套。 main()int k,n,km;float sum,average;char ch;ppp();printf(t班級(jí)成績(jī)統(tǒng)計(jì)n);ppp();printf(1、統(tǒng)計(jì)小組一門課程的總分及平均分n,n);printf(2、統(tǒng)計(jì)小組若干門課程的總分及平均分n

23、);printf(3、輸出小組排序后三門課程的成績(jī)單n);printf(請(qǐng)輸入13之間的一個(gè)數(shù):);scanf(%d,&k);ppp();if(k=2)printf(請(qǐng)輸入統(tǒng)計(jì)的小組的人數(shù)n=);scanf(%d,&n);ppp();printf(請(qǐng)輸入要統(tǒng)計(jì)的課程門數(shù)km=);scanf(%d,&km);ppp();avgevery(n,km);現(xiàn)在回頭分析本任務(wù)中的具體實(shí)現(xiàn):主函數(shù)調(diào)用avgevery()函數(shù),而avgevery()函數(shù)又調(diào)用ppp()函數(shù),即屬于函數(shù)的嵌套。/*輸出線條函數(shù)*/ppp()printf(-n);/*某個(gè)小組若干門課程的平均分與總分函數(shù)

24、*/void avgevery(int n,int km)int x,i,j;float s,avg;for(j=1;j=km;j+)s=0;printf(請(qǐng)輸入本小組第%d門考試成績(jī)n,j);ppp();for(i=1;i1) #include stdio.hint age( int n )int c;if (n=1) c=10;else c=age(n-1)+2;return c;main()printf(第五個(gè)小朋友的年齡為%dn,age(5);運(yùn)行結(jié)果如下:第五個(gè)小朋友的年齡為11n=5age(4)+2返 回值11第一次調(diào)用n=4age(3)+2返 回值9第二次調(diào)用n=3age(2)+

25、2返 回值7第三次調(diào)用n=2age(1)+2返 回值5第四次調(diào)用第五次調(diào)用n=1遞 歸結(jié)束返 回值3【例例5-11】求求1+2+3+n的和。的和。分析:可寫(xiě)成 1 (n=1) sum(n)= sum(n-1)+n (n1) 程序如下:#include stdio.hint sum(int n)int y;if(n=1)y=1;else y=sum(n-1)+n;return y;main()int n;scanf(%d,&n);printf(%dn,sum(n);【例5-12】試編程利用海倫公式求三角形面積。有三人負(fù)責(zé)完成。B負(fù)責(zé)判斷能否構(gòu)成三角形;C負(fù)責(zé)計(jì)算三角形的面積,而A是總負(fù)責(zé)

26、,其職責(zé)是輸入三個(gè)數(shù),調(diào)用函數(shù)B看是否能構(gòu)成三角形,若能,則調(diào)用c。#include stdio.h#include math.h/*B所完成的函數(shù)*/int istriangle(int a,int b,int c) /判斷能否構(gòu)成三角形 int t;if(a+bc & a+cb & b+ca)t=1;elset=0;return t;/*C所完成的函數(shù)*/float area(int a,int b,int c) /計(jì)算三角形面積float s,l;l=(a+b+c)/2.0;s=sqrt(l*(l-a)*(l-b)*(l-c);return s;/*A所完成的函數(shù)*/ma

27、in()int a,b,c;printf(請(qǐng)輸入三角形a,b,c的值n);scanf(%d,%d,%d,&a,&b,&c);if (istriangle(a,b,c)=1)printf(三角形的面積為%.1fn,area(a,b,c);elseprintf(對(duì)不起,構(gòu)不成三角形n);【例5-13】用遞歸求n!。 #include long jc(int n)int i;long t;if (n=1)t=1;else t=jc(n-1)*n;return t;void main()int n;scanf(%d,&n);printf(%d!=%ldn,n,jc(n)

28、; 1 (n=1) n! = (n-1)!*n (n1) 分析:若n=6,則6!=5!*6,5!=4!*5,4!=3!*4,3!=2!*3,2!=1!*2,而1!=1;所以,可以寫(xiě)成注意書(shū)中p172頁(yè)上印刷有誤【例例5-14】1202年,意大利數(shù)學(xué)家斐波那契出版了他的年,意大利數(shù)學(xué)家斐波那契出版了他的算算盤全書(shū)盤全書(shū),在書(shū)中第一次提到了著名的,在書(shū)中第一次提到了著名的Fibonacci數(shù)列:數(shù)列:1,1,2,3,5,8,13,21.,定義如下:,定義如下: 1 (n=1) fibonacci(n) = 1 (n=2) fibonacci(n-1)+fibonacci(n-2) (n2) #in

29、clude long fab(int n)int i;long t;if (n=1 | n=2)t=1;else t=fab(n-1)+fab(n-2);return t;void main()int n,i;printf(請(qǐng)輸出要輸出的項(xiàng)數(shù):);scanf(%d,&n);printf(fabonacii數(shù)列如下:n);for(i=1;i=n;i+)printf(%-8d,fab(i);printf(n);請(qǐng)輸出fibonacci數(shù)列的前n項(xiàng),程序運(yùn)行結(jié)果如所示。 任務(wù)任務(wù)3 輸出排序后小組三門課成績(jī)單輸出排序后小組三門課成績(jī)單 一、問(wèn)題情景一、問(wèn)題情景 一個(gè)班有40位學(xué)生參加了期終考

30、試(考了三門課),請(qǐng)輸出學(xué)生排序后的成績(jī)單。分析:本項(xiàng)目要完成的功能相對(duì)比較多,為了使程序的結(jié)構(gòu)清晰,我們可以將些項(xiàng)目進(jìn)行分解: A:完成三門課成績(jī)的輸入;B:計(jì)算每個(gè)同學(xué)的總分與平均分;C:對(duì)三門課的成績(jī)進(jìn)行排序;D:輸出函數(shù) E:總負(fù)責(zé),調(diào)用A、B、C、D即可。二、具體實(shí)現(xiàn)二、具體實(shí)現(xiàn)(假設(shè)本小組只有5個(gè)同學(xué))#include stdio.h#include string.h#define N 5/*輸出線條函數(shù)*/ppp()printf(-n);/*輸入函數(shù)A*/void input(int scoreN3,char nameN10)int i,j;for (i=0;iN;i+)prin

31、tf(第%d個(gè)同學(xué)的姓名及三門課的成績(jī):,i+1);scanf(%s,namei);for(j=0;j3;j+)scanf(%d,&scoreij);/*計(jì)算每個(gè)同學(xué)的總分與平均分B*/void sumavg(int scoreN3,float sum,float avg)int i,j;for(i=0;iN;i+)for(j=0;j3;j+)sumi=sumi+scoreij;avgi=sumi/3.0;/*排序函數(shù)C*/void px(int score3,float sum,float avg,char name10)int i,j;float t;char nn10;for(i

32、=0;iN-1;i+)for(j=0;jN-1-i;j+)if(sumjsumj+1)t=sumj;sumj=sumj+1;sumj+1=t;t=avgj;avgj=avgj+1;avgj+1=t; /這個(gè)同學(xué)的所有數(shù)據(jù)都要交換t=scorej0;scorej0=scorej+10;scorej+10=t;t=scorej1;scorej1=scorej+11;scorej+11=t;t=scorej2;scorej2=scorej+12;scorej+12=t;strcpy(nn,namej);strcpy(namej,namej+1);strcpy(namej+1,nn);/*輸出函數(shù)D*

33、/void print(int score 3,float sumr ,float avgr ,char name 10)int i,j;ppp();printf(輸出排序后五個(gè)同學(xué)三門課的成績(jī):n);ppp();printf(序號(hào)t姓名t課1t課2t課3t總分t平均分n);for (i=0;iN;i+)printf(%d:t,i+1);printf(%st,namei);for(j=0;j3;j+)printf(%dt,scoreij);printf(%.0ft%.1ft,sumri,avgri);printf(n);ppp();/*主函數(shù)*/main()int i,j;int scoreN

34、3,t;char nameN10,nn10;float sumrN=0,avgrN; /每個(gè)同學(xué)的總分及平均分/*調(diào)用輸入記錄函數(shù)*/input(score,name);/*調(diào)用計(jì)算總分與平均分的函數(shù)*/sumavg(score ,sumr,avgr);/*調(diào)用排序函數(shù)*/px(score,sumr,avgr,name);/*調(diào)用輸出函數(shù)*/print(score,sumr,avgr,name);新的知識(shí)點(diǎn)是:數(shù)組作為函數(shù)名時(shí),是如何傳遞的。(三三)相關(guān)知識(shí)相關(guān)知識(shí)使用數(shù)組名作為函數(shù)參數(shù)時(shí),實(shí)參與形參都應(yīng)使用數(shù)組名(或指針變量,見(jiàn)項(xiàng)目六)。當(dāng)數(shù)組名作為函數(shù)實(shí)參時(shí),不是把數(shù)組的值傳遞給形參,而是

35、把實(shí)參數(shù)組的起始地址傳遞給形參數(shù)組,實(shí)參和形參的地址是相同的,即當(dāng)形參的值發(fā)生變化時(shí),實(shí)參的值也發(fā)生了變化?!纠?-15】有二個(gè)學(xué)生A,B合力完成下面一個(gè)問(wèn)題:求20個(gè)學(xué)生的平均成績(jī)。他們的分工是這樣的: B完成20個(gè)數(shù)的平均值,不負(fù)責(zé)數(shù)據(jù)的輸入;A完成20個(gè)數(shù)的輸入,然后問(wèn)B要20個(gè)數(shù)的平均值后輸出。分析:B所做的是求平均值的average( )函數(shù):已經(jīng)有二十個(gè)數(shù)了,放在數(shù)組a20中,現(xiàn)在只要將這20個(gè)數(shù)相加后除以20,然后將結(jié)果交給A就行了。 A所做的是主函數(shù)main():輸入20個(gè)數(shù),并將其放在數(shù)組中,調(diào)用B所做的函數(shù),將輸入的20個(gè)數(shù)傳遞給B,然后接過(guò)B的結(jié)果,并將其輸出。#incl

36、ude stdio.h/*B所完成的程序*/float average(int b20) /b20表示從A中拿到的20個(gè)數(shù) int i,s;float avg;s=0;for (i=0;i20;i+)s=s+bi; /將20個(gè)數(shù)相加 avg=s/20.0;return avg; /結(jié)果交給對(duì)方/*A所完成的程序*/main()int i,a20; /定義20個(gè)數(shù),將存放20個(gè)數(shù)據(jù)float avg;printf(請(qǐng)輸入20個(gè)同學(xué)的成績(jī)n);for (i=0;i20;i+)scanf(%d,&ai); /輸入20個(gè)數(shù)據(jù)avg=average(a); /*調(diào)用average()函數(shù),將數(shù)組

37、a的值傳給average 并接過(guò)average的結(jié)果,將其放在avg中*/printf(這些同學(xué)的平均分為%.1fn,avg);注意注意(4)形參數(shù)組也可不指定大小,或者在被調(diào)函數(shù)中另設(shè)一個(gè)參數(shù),來(lái)傳遞數(shù)組的大小。如上面的程序可改為:(1)數(shù)組名作為函數(shù)參數(shù),應(yīng)該在主調(diào)函數(shù)和被調(diào)函數(shù)中分別定義數(shù)組,如上面程序中的b是形參數(shù)組,a是實(shí)參數(shù)組,分別在其所在的函數(shù)中定義。(2)實(shí)參數(shù)組與形參數(shù)組類型應(yīng)當(dāng)相同,如果不同,將會(huì)出錯(cuò),如上面程序中的形參數(shù)組b是整型,實(shí)參數(shù)組a也是整型。(3) 實(shí)參數(shù)組與形參數(shù)組大小可以不同也可以相同,C編譯器對(duì)形參數(shù)組大小不做檢查,只是將實(shí)參數(shù)組的首地址傳遞給形參數(shù)組。如

38、上面程序中的float average(int b20)改為float average(int b10),并不影響程序的正常運(yùn)行,最后的結(jié)果也是相同的,我們甚至可以寫(xiě)成float average(int b ),即只要b是數(shù)組即可。(5)形參數(shù)組與實(shí)參數(shù)組是占用同一個(gè)地址,所以是地址傳遞,即當(dāng)形參的值發(fā)生變化時(shí),實(shí)參的值也會(huì)跟著變化。#include stdio.hfloat average(int b ,int n) int i,s;float avg;s=0;for (i=0;in;i+)s=s+bi; /將20個(gè)數(shù)相加 avg=(float)s/n;return avg; /結(jié)果交給對(duì)方

39、【例5-16】輸入十個(gè)同學(xué)的成績(jī),要求用函數(shù)進(jìn)行排序(降序)。即有二個(gè)學(xué)生A,B合力完成下面一個(gè)問(wèn)題:將10個(gè)學(xué)生的成績(jī)排序(降序)。他們的分工是這樣的:A是完成主函數(shù)的編寫(xiě):也就是完成10個(gè)數(shù)的輸入,調(diào)用B編寫(xiě)的函數(shù)sort( ),就得到排序完的10個(gè)數(shù),然后進(jìn)行輸出。B所編寫(xiě)的函數(shù)sort( )的功能是完成10個(gè)數(shù)的排序,不負(fù)責(zé)數(shù)據(jù)的輸入。#include stdio.hvoid sort(int b); main()int a10,i;printf(請(qǐng)輸入十個(gè)同學(xué)的成績(jī)n);for(i=0;i10;i+)scanf(%d,&ai);sort(a); /調(diào)用函數(shù)sort()printf(排序后的成績(jī)?yōu)?n);for(i=0;i10;i+)printf(%3d,ai);printf(n);void sort(int b) /*函數(shù)的功能就是選擇法進(jìn)行排序*/int i,j,t;for (i=0;i9;i+)for(j=i+1;j10;j+)if(bibj)t=bi;bi=bj;bj=t;【例5-17】將例5-16改成:在函數(shù)中進(jìn)行 n個(gè)學(xué)生成績(jī)從高到

溫馨提示

  • 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)論