有一个班级6个学生5门课,编写函数实现下列功能:
(1)函数average()求第n个指定课目的平均分;
(2)使用函数void findfail()找出有2门以上(含2门)课程不及格的学生,在主程序输出其学号和全部课程成绩及平均成绩;
(3)函数void findgood()找出平均成绩在90分以上或全部课程成绩在85分以上的学生, 在主程序输出其学号和全部课程成绩及平均成绩。
在主函数中输入数据并输出结果。
要求:尽量使用指针。
#include "stdafx.h"
void average(int *p_stu0)//第n个指定科目的平均分
{
int i,sum=0;
for(i=0;i<6;i++)
{
sum+=*p_stu0;
p_stu0++;
}
printf("%4.1f\n",sum/6.0);
}
void findfail(int(*p_stu1)[6],int *p_fail)
{
int h,i;
for(i=0;i<6;i++)//lie....yigexuesheng chengji
{
int j=0;
for(h=1;h<6;h++)//hang....yimenke chengji
{
if(*(*(p_stu1+h)+i)<60)
j++;
if(j==2)
{
*(p_fail+i)=1;
break;
}
}
}
}
void findgood(int(*p_stu2)[6],int* p_good,double* p0)//p0传递均值
{
int h,i,sum[6]={};
for(h=0;h<6;h++)//6个学生
{
int j=0;
for(i=1;i<6;i++)//五门课
{
if(*(*(p_stu2+i)+h)>85)
j++;
sum[h]+=*(*(p_stu2+i)+h);
}
if(j==5)
*(p_good+h)=1;
}
for(h=0;h<6;h++)
{
*(p0+h)=sum[h]/5.0;
if(*(p0+h)>85 && *(p_good+h)!=1)
*(p_good+h)=1;
}
}
void main()
{
int i,j,k;
int stu[6][6]={};//行:学号、依次的科目成绩;列,学生;
printf("请输入信息\n");
for(i=0;i<6;i++)
{
for(j=0;j<6;j++)
scanf("%d",&stu[j][i]);//先对列赋值,每个学生的数据是完整的;
printf("\n");
}
printf("指定科目的均分,请输入n:");
int n;
scanf("%d",&n);
average(&stu[n][0]);
printf("有2门以上(含2门)课程不及格的学生:\n");
int fail[6]={};
findfail(stu,fail);
for(i=0;i<6;i++)
{
if(fail[i]==1)
{
int sum=0;
printf("%03d ",stu[0][i]);
for(k=1;k<6;k++)
{
printf("%02d ",stu[k][i]);
sum+=stu[k][i];
}
printf("%4.1f\n",sum/5.0);
}
}
printf("平均成绩在90分以上或全部课程成绩在85分以上的学生:\n");
double ave_g[6]={};
int good[6]={};
findgood(stu,good,ave_g);
for(i=0;i<6;i++)
{
if(good[i]==1)
{
printf("%03d ",stu[0][i]);
for(k=1;k<6;k++)
printf("%02d ",stu[k][i]);
printf("%4.1f\n",ave_g[i]);
}
}
}