#include<stdio.h>
#define N 40
float average(int score[],int n);/*ave()函數(shù)原型*/
void readscore(int score[],int n);/*readscore函數(shù)原型*/
int main()
{ float score[N],aver;
int n;
scanf("%d",&n);
readscore(score,n);/*數(shù)組名作為函數(shù)實參調(diào)用函數(shù)readscore()*/
aver=average(score,n);/*數(shù)組名作為函數(shù)實參調(diào)用average()*/
printf("Average score is %f",aver);
return 0;
}
/*函數(shù)功能:計算n個學(xué)生的平均分*/
float average(int score[],int n) /*average()函數(shù)的定義*/
{ int i;
float sum=0;
for(i=0;i<n;i++)
{sum+=score[i];
}
/*return sum/n;這里為了防止發(fā)生除0錯誤,做如下修改*/
return n>0?sum/n:-1;
}
/*函數(shù)功能:計算n個學(xué)生的某門課程的成績*/
void readscore(int score[],int n)
{ int i;
for(i=0;i<n;i++)
{ scanf("%d",&score[i]);
printf("%d ",score[i]);
}
printf("\n");
}
任務(wù)描述
本關(guān)任務(wù):從鍵盤輸入某班學(xué)生 C 語言課的成績(已知該班人數(shù)為 40 人),要求分別定義三個子函數(shù)分別進(jìn)行數(shù)組輸入、輸出和求平均分。
相關(guān)知識
如果希望定義一個函數(shù),能對一個數(shù)組整體進(jìn)行操作,我們應(yīng)該注意以下 3 點:
- 定義函數(shù)時,形參是一維數(shù)組,那么主調(diào)函數(shù)也應(yīng)該定義一個一維數(shù)組,不能只在一方定義,主調(diào)函數(shù)的數(shù)組稱為實參數(shù)組。
- 實參數(shù)組與形參數(shù)組類型必須一致。
- 在 C 編譯器中,用一維數(shù)組名作為函數(shù)形參時,在函數(shù)體內(nèi)數(shù)組名自動退化為指針。C 編譯器對形參數(shù)組的大小不作檢查。
下面的幾種書寫形式是等效的:
void inputarr (int array[ ], int n)
{
…
}
void inputarr (int array[5], int n)
{
…
}
void inputarr (int array[10], int n)
{
…
}
void inputarr (int *array, int n)
{
…
}
當(dāng)形參被聲明為一維數(shù)組時,形參列表中數(shù)組的方括號內(nèi)數(shù)組長度可以為空,即使不為空,也不起作用,上述四種書寫形式,系統(tǒng)都將array
解釋為指針變量。調(diào)用此函數(shù)時,不能將一個變量的地址傳遞給array
,必須將一個實參數(shù)組的地址傳遞給array
,要求形參和實參數(shù)組類型一致,其實就是要求地址類型一致。
定義輸入數(shù)組元素的函數(shù) inputarr ()
,函數(shù)沒有返回值,返回值類型為void
:
void inputarr (int array[ ])
{
int i;
for (i=0; i < 40; i++)
{
scanf("%d", & array[i]);
}
}
但是這個 inputarr ()
函數(shù),只能對長度為40
的數(shù)組進(jìn)行輸入操作,怎樣才能用同一個函數(shù)對不同長度的數(shù)組都可以進(jìn)行輸入操作呢?
定義子函數(shù)時,在形參列表中增加一個整型變量n
,用來接收主調(diào)函數(shù)中實參數(shù)組的實際長度。改進(jìn)函數(shù) inputarr ()
定義如下:
void inputarr (int array[ ], int n)
{
int i;
for (i=0; i<n; i++)
{
scanf("%d", & array[i]);
}
}
調(diào)用這個子函數(shù)時,就是在向函數(shù)傳遞一維數(shù)組的時候,實參是數(shù)組名,后面不要方括號,數(shù)組名代表了數(shù)組的首地址,用數(shù)組名作函數(shù)參數(shù),只傳遞一個地址,由于首地址相同,故實參數(shù)組與形參數(shù)組占用同一段內(nèi)存,在該函數(shù)內(nèi),不僅可以讀這個數(shù)組的元素,還可以修改它們的值。
請模仿 inputarr ()
函數(shù)編寫以下兩個函數(shù)的定義。
float average (int array[ ] , int n);
void outputarr (int array[ ] , int n);
編程要求
根據(jù)提示,在右側(cè)編輯器 Begin-End 區(qū)間補充代碼,從后臺獲取某班學(xué)生 C 語言課的成績(已知每班人數(shù)最多不超過 40 人,具體人數(shù)由后臺提供),計算該班的平均分,要求分別定義子函數(shù)進(jìn)行輸入、輸出分?jǐn)?shù)和求平均分。
測試說明
平臺會對你編寫的代碼進(jìn)行測試。
測試輸入:
10
41 83 72 32 49 77 86 30 57 92
輸入說明: 第一行為班級人數(shù); 第二行為每個人的成績。文章來源:http://www.zghlxwxcb.cn/news/detail-463633.html
預(yù)期輸出:文章來源地址http://www.zghlxwxcb.cn/news/detail-463633.html
41 83 72 32 49 77 86 30 57 92
Average score is 61.900002
到了這里,關(guān)于C語言:編寫函數(shù)進(jìn)行一維數(shù)組輸入輸出和求平均值的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!