主題要求函數參數使用數組和指針,數組參數可以兩種方式傳遞。
代碼如下:
# include & ltstdio.h & gt
#定義MJ 5//最大課程數
#定義MT 30//最大學生人數
#定義FM 100//滿分
#定義PS 60// Pass。
int init(int ss[],int sid[],int * p _ slen);//通過初始化數組。總分返回成功,不成功返回0。
int contFStudents(int ss[],int sid[],int slen);//統計失敗人數並打印名單,返回人數。
int contAAvg(int ss[],int sid[],int slen,float avg);//avg表示平均分,比如未知傳輸返回的人數-1。
int contMax(int ss[],int slen,int * sid);//統計最高分和學號
int main()
{
int ss[MT],sid[MT],sum
int slen = 0;//實際入學的學生人數
int fn,an;
sum=init(ss,sid,& ampslen);
fn=contFStudents(ss、sid、slen);
an=contAAvg(ss,sid,slen,(sum * 1.0)/slen);
Printf("故障率% .0f% \ n ",(fn * 1.0)/SLEN * 100);
Printf("平均分大於等於% .0f%% \ n ",(an * 1.0)/SLEN * 100);
contMax(ss,slen,sid);
返回0;
}
int init(int ss[],int sid[],int *p_slen)
{
int i=0,n,sum = 0;
如果(!p_slen)返回0;
* p _ slen = 0;
Printf("本班所有學生在某門課的成績(人數不超過% d): \ n ",mt);
for(I = 0;我& ltMT;i++)sid[I]= 1000+I;//學號沒有特殊要求,用數字代替就可以了。
I = 0;
while(* p _ slen & lt;=MT)
{
Printf("請輸入學號%d的年級:",SID [i]),scanf ("%d ",&;n);
如果(n & gtFM)
{
Printf("%d輸入無效,且不能大於%d\n "的最大分值,n,FM);
繼續;
}
如果(n & lt0)破;
ss[i++]= n;
sum+= n;
}
* p _ slen = I;
返回總和;
}
int contFStudents(int ss[],int sid[],int slen)
{
int i,CNT = 0;
for(I = 0;我& ltsleni++)
if(ss[I]& lt;PS)cnt++,printf("學號%d,分數:%d,不及格!\n ",sid[i],ss[I]);
Printf("失敗人數* * *:% d人\n ",CNT);
返回cnt
}
int contAAvg(int ss[],int sid[],int slen,float avg)
{
int i,cnt=0,sum = 0;
if(avg==-1)
{
for(I = 0;我& ltsleni++)sum+= ss[I];
avg =(sum * 1.0)/slen;
}
For(i=0,printf("平均分(%f)及以上的學生為:\n ",avg);我& ltsleni++)
if(ss[I]& gt;=avg)cnt++,printf("學號%d,分數:%d\n ",sid[i],ss[I]);
Printf("平均分及以上* * *:% d人\n ",CNT);
返回cnt
}
int contMax(int ss[],int slen,int *sid)
{
int i,max = ss[0];
如果(!sid)返回0;
for(I = 0;我& ltsleni++)
if(ss[I]& gt;max)max = ss[I];
For(i=0,printf("最高分(%d)的同學有:\n ",max);我& ltsleni++)
if(ss[i]==max) printf("%d\n ",sid[I]);
返回1;
}