C語(yǔ)言程序設(shè)計(jì) 教案 7-4數(shù)組名作為函數(shù)參數(shù)_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì) 教案 7-4數(shù)組名作為函數(shù)參數(shù)_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì) 教案 7-4數(shù)組名作為函數(shù)參數(shù)_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì) 教案 7-4數(shù)組名作為函數(shù)參數(shù)_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì) 教案 7-4數(shù)組名作為函數(shù)參數(shù)_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

《C語(yǔ)言程序設(shè)計(jì)》教案課程名稱C語(yǔ)言程序設(shè)計(jì)任課教師總課時(shí)64教學(xué)課題輸出排序后小組三門課成績(jī)單授課班級(jí)授課日期課時(shí)2教學(xué)目標(biāo)知識(shí)目標(biāo):1.掌握數(shù)組元素作為函數(shù)參數(shù)的用法2.掌握數(shù)組名作為函數(shù)參數(shù)的用法能力目標(biāo):能夠使用函數(shù)輸出排序后小組三門課成績(jī)單素質(zhì)目標(biāo):團(tuán)隊(duì)合作能力、團(tuán)隊(duì)互助,自我學(xué)習(xí)的習(xí)慣、愛好和能力重點(diǎn)難點(diǎn)數(shù)組元素和數(shù)組名作為函數(shù)參數(shù)的用法教學(xué)方法演示、講解、啟發(fā)教學(xué)資源教材《C語(yǔ)言程序設(shè)計(jì)》設(shè)備準(zhǔn)備VC++6.0,極域電子教室軟件,分發(fā)工作任務(wù)單教學(xué)環(huán)節(jié)(教學(xué)過程)教學(xué)內(nèi)容教師活動(dòng)學(xué)生活動(dòng)教學(xué)目標(biāo)課時(shí)1發(fā)布任務(wù)進(jìn)行任務(wù)的問題描述和分析傾聽、思考讓學(xué)生理解任務(wù)要求和思路10分鐘2理論講解講授函數(shù)調(diào)用傾聽、思考預(yù)備需要的理論知識(shí)15分鐘3舉例通過一個(gè)案例進(jìn)一步講解函數(shù)的調(diào)用傾聽、思考通過實(shí)際應(yīng)用幫助學(xué)生理解理論知識(shí)20分鐘4應(yīng)用布置兩個(gè)相關(guān)題目思考、解答通過做相關(guān)練習(xí)題幫助學(xué)生更好的理解相關(guān)知識(shí)45分鐘教學(xué)內(nèi)容(詳細(xì)):一.?dāng)?shù)組元素作為函數(shù)參數(shù)數(shù)組元素可以用作函數(shù)實(shí)參,但不能用作形參。因?yàn)樾螀⑹窃诤瘮?shù)被調(diào)用時(shí)臨時(shí)分配存儲(chǔ)單元的,不可能為一個(gè)數(shù)組元素單獨(dú)分配存儲(chǔ)單元(數(shù)組是一個(gè)整體,在內(nèi)存中占連續(xù)的一段存儲(chǔ)單元)。在用數(shù)組元素作為函數(shù)實(shí)參時(shí),把實(shí)參的值傳給形參,是“值傳遞”方式。數(shù)據(jù)傳遞的方向是從實(shí)參傳到形參,單向傳遞。問題分析【例7-8】輸入十個(gè)數(shù),要求輸出其中值最大的元素和該數(shù)是第幾個(gè)數(shù)。問題分析程序代碼可以定義一個(gè)數(shù)組a,長(zhǎng)度為10,用來存放10個(gè)數(shù)。設(shè)計(jì)一個(gè)函數(shù)max,用來求兩個(gè)數(shù)中的大者。在主函數(shù)中定義一個(gè)變量m,m的初值為a[0],每次調(diào)用max函數(shù)后的返回值存放在m中。用“打擂臺(tái)”算法,依次將數(shù)組元素a[1]-a[9]與m比較,最后得到的m值就是10個(gè)數(shù)中的最大者。程序代碼#include<stdio.h>intmain(){ intmax(intx,inty); //函數(shù)聲明 inta[10],m,n,i; printf("enter10integerenumber:"); for(i=0;i<10;i++) //輸入10個(gè)數(shù)給a[0]~a[10] scanf("%d",&a[i]); printf("\n"); for(i=1,m=a[0],n=0;i<10;i++){ if(max(m,a[i])>m){ //若max函數(shù)返回的值大于m m=max(m,a[i]); //max函數(shù)返回的值取代m原值 n=i; //把此數(shù)組元素的序號(hào)記下來,放在n中 } } printf("Thelargestnumberis%d\nitisthe%dthnumber.\n",m,n+1); return0;}intmax(intx,inty){ //定義max函數(shù) return(x>y?x:y); //返回x和y中的大者}程序執(zhí)行的結(jié)果為:說明說明從鍵盤輸入10個(gè)數(shù)給a[0]-a[9]。變量m用來存放當(dāng)前已比較過的各數(shù)中的最大者。開始時(shí)設(shè)m的值為a[0],然后將m與a[1]比,如果a[1]大于m,就以a[1]的值(此時(shí)也就是max(m,a[1])的值)取代m的原值。下一次以m的新值與a[2]比較,max(m,a[2])的值是a[0],a[1],a[2]中最大者,其余類推。經(jīng)過9輪循環(huán)的比較,m最后的值就是10個(gè)數(shù)的最大數(shù)。請(qǐng)注意分析怎樣得到最大數(shù)是10個(gè)數(shù)中第幾個(gè)數(shù)。當(dāng)每次出現(xiàn)以max(m,a[i)的值取代m的原值時(shí),就把i的值保存在變量n中。n最后的值就是最大數(shù)的序號(hào)(注意序號(hào)從0開始),如果要輸出“最大數(shù)是10個(gè)數(shù)中第幾個(gè)數(shù)”,應(yīng)為n+1。例如n=6時(shí)表示數(shù)組元素a[6]是最大數(shù),由于序號(hào)從0開始,因此它是10數(shù)中第7個(gè)數(shù),故應(yīng)輸出的是n+1。二.?dāng)?shù)組名作為函數(shù)參數(shù)除了可以用數(shù)組作為函數(shù)參數(shù)外,還可以用數(shù)組名作為函數(shù)參數(shù)(包括實(shí)參和形參)。需要注意的是,用數(shù)組元素作為實(shí)參時(shí),向形參變量傳遞的是數(shù)組元素的值,而用數(shù)組名作函數(shù)實(shí)參時(shí),向形參(數(shù)組名或指針變量)傳遞的是數(shù)組首元素的地址。問題分析【例7-9】有一個(gè)一維數(shù)組score,內(nèi)放10個(gè)學(xué)生成績(jī),求平均成績(jī)。問題分析算法設(shè)計(jì)用一個(gè)函數(shù)average來求平均成績(jī),不用數(shù)組元素作為函數(shù)實(shí)參,而是用數(shù)組名作為函數(shù)實(shí)參,形參也用數(shù)組名,在average函數(shù)中引用各數(shù)組元素,求平均成績(jī)并返回main函數(shù)。算法設(shè)計(jì)使用for循環(huán),循環(huán)輸入10個(gè)學(xué)生成績(jī)了。調(diào)用average函數(shù)計(jì)算平均成績(jī)。輸出平均成績(jī)。函數(shù)中算法是:設(shè)計(jì)一個(gè)數(shù)組接收10個(gè)學(xué)生的成績(jī),定義1個(gè)變量Sum保存10個(gè)學(xué)生的總分,定義1個(gè)局部變量aver存儲(chǔ)平均值,并賦初值為0。構(gòu)造一個(gè)循環(huán)將每個(gè)學(xué)生的成績(jī)累計(jì)求和存入Sum中。將Sum/10的值存入aver。返回aver的值程序代碼程序代碼#include<stdio.h>voidmain(){floataverage(floatarray[10]); //函數(shù)聲明floatscore[10],aver; //在主函數(shù)中定義“實(shí)參”inti;printf("請(qǐng)輸入10學(xué)生的成績(jī):\n");for(i=0;i<10;i++){scanf("%f",&score[i]);}printf("\n");aver=average(score);printf("平均成績(jī)?yōu)椋?5.2f\n",aver);}floataverage(floatarray[10]) //定義函數(shù),并在函數(shù)內(nèi)定義“形參”{inti;floataver,sum=array[0];for(i=1;i<10;i++){sum=sum+array[i];}aver=sum/10;return(aver);}程序執(zhí)行的結(jié)果為:說明說明(1)用數(shù)組名作函數(shù)參數(shù),應(yīng)該在主調(diào)函數(shù)和被調(diào)用函數(shù)分別定義數(shù)組,例中array是形參數(shù)組名score是實(shí)參數(shù)組名,分別在其所在函數(shù)中定義,不能只在一方定義。(2)實(shí)參數(shù)組與形參數(shù)組類型應(yīng)一致(今都為float型),如不一致,結(jié)果將出錯(cuò)。(3)在定義average函數(shù)時(shí),聲明形參數(shù)組的大小為10,但在實(shí)際上,指定其大小是不起任何作用的,因?yàn)镃語(yǔ)言編譯系統(tǒng)并不檢查形參數(shù)組大小,只是將實(shí)參數(shù)組的首元素的地址傳給形參數(shù)組名。形參數(shù)組名獲得了實(shí)參數(shù)組的首元素的地址,前已說明,數(shù)組名代表數(shù)組的首元素的地址,因此,可以認(rèn)為,形參數(shù)組首元素(array[0])和實(shí)參數(shù)組首元素(score[O])具有同一地址,它們共占同一存儲(chǔ)單元,score[n]和array[n]指的是同一單元。score[n]和array[na具有相同的值。(4)形參數(shù)組可以不指定大小,在定義數(shù)組時(shí)在數(shù)組名后面跟一個(gè)空的方括號(hào),如:floataverage(floatarray[]),定義average函數(shù),形參數(shù)組不指定大小。三.輸出排序后小組三門課成績(jī)單參考代碼如下:(假設(shè)本小組只有5個(gè)同學(xué)):#include"stdio.h"#include"string.h"#defineN5/*輸出線條函數(shù)*/ppp(){printf("--------------------------------------------------\n");}/*輸入函數(shù)A*/voidinput(intscore[N][3],charname[N][10]){inti,j;for(i=0;i<N;i++){printf("第%d個(gè)同學(xué)的姓名及三門課的成績(jī):",i+1);scanf("%s",name[i]);for(j=0;j<3;j++)scanf("%d",&score[i][j]);}}/*計(jì)算每個(gè)同學(xué)的總分與平均分B*/voidsumavg(intscore[N][3],floatsum[],floatavg[]){inti,j;for(i=0;i<N;i++){for(j=0;j<3;j++)sum[i]=sum[i]+score[i][j];avg[i]=sum[i]/3.0;}}/*排序函數(shù)C*/voidpx(intscore[][3],floatsum[],floatavg[],charname[][10]){inti,j;floatt;charnn[10];for(i=0;i<N-1;i++)for(j=0;j<N-1-i;j++)if(sum[j]<sum[j+1]){t=sum[j];sum[j]=sum[j+1];sum[j+1]=t;t=avg[j];avg[j]=avg[j+1];avg[j+1]=t;//這個(gè)同學(xué)的所有數(shù)據(jù)都要交換t=score[j][0];score[j][0]=score[j+1][0];score[j+1][0]=t;t=score[j][1];score[j][1]=score[j+1][1];score[j+1][1]=t;t=score[j][2];score[j][2]=score[j+1][2];score[j+1][2]=t;strcpy(nn,name[j]);strcpy(name[j],name[j+1]);strcpy(name[j+1],nn);}}/*輸出函數(shù)D*/voidprint(intscore[][3],floatsumr[],floatavgr[],charname[][10]){inti,j;ppp();printf("輸出排序后五個(gè)同學(xué)三門課的成績(jī):\n");ppp();printf("序號(hào)\t姓名\t課1\t課2\t課3\t總分\t平均分\n");for(i=0;i<N;i++){printf("%d:\t",i+1);printf("%s\t",name[i]);for(j=0;j<3;j++)printf("%d\t",score[i][j]);printf("%.0f\t%.1f\t",sumr[i],avgr[i]);printf("\n");}ppp();}/*主函數(shù)*/main(){inti,j;intscore[N][3],t;charname[N][10],nn[10];floatsumr[N]={0},avgr[N];//每個(gè)同學(xué)的總分及平均分input(score,name);//調(diào)用輸入記錄函數(shù)sumavg(score,sumr,avgr);

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論