有一个班4个学生,5门课程,分别编写3个函数完成以下3个要求,用指向二维数组的指针做函数参数:
1)求第1门课程的平均分;
2)找出有两门及以上课程不及格的学生,输出他们的序号和全部课程成绩及平均成绩;
3)找出平均成绩在90分以上或全部课程成绩在85分及以上的学生。
注:所有成绩输出均采用格式“%5.1f”
运行参考示例:
输入1:
65.5 67 75 82 78.5
71 50.5 63 52 48
92.5 98 82 88 95
85 87 90 86.5 88
输出1:
Average of course 1: 78.5
More than 2 failed courses:
No 2: 71.0 50.5 63.0 52.0 48.0 average: 56.9
Average score >=90 or all courses >=85:
No 3: 92.5 98.0 82.0 88.0 95.0 average: 91.1
No 4: 85.0 87.0 90.0 86.5 88.0 average: 87.3
输入2:
65.5 67 75 82 78.5
71 35.5 63 52 68
92 98 82 88.5 95
95 87 86 86.5 88
输出2:
Average of course 1: 80.9
More than 2 failed courses:
No 2: 71.0 35.5 63.0 52.0 68.0 average: 57.9
Average score >=90 or all courses >=85:
No 3: 92.0 98.0 82.0 88.5 95.0 average: 91.1
No 4: 95.0 87.0 86.0 86.5 88.0 average: 88.5
运行代码如下:
#include<stdio.h>
int main()
{
void ave(float (*p)[5],int n);
void findf(float a[4][5],int n);
void find(float a[4][5],int n);
int i,j;
float a[4][5],aver=0;
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)
{
scanf("%f",*(a+i)+j);
}
}
ave(a,4);
findf(a,4);
find(a,4);
return 0;
}
void ave(float (*p)[5],int n)
{
float sum=0;
int i;
for (i=0;i<n;i++,p++)
{
sum+=(*p)[0];
}
printf("Average of course 1:%5.1f\n",sum/4.0);
}
void findf(float a[4][5],int n)
{
int i,j;
float sum;
int count=0;
for(i=0;i<n;i++)
{
count=0;
sum=0;
for(j=0;j<5;j++)
{
if(*(*(a+i)+j)<60)
{
count++;
}
}
if(count<2)
continue;
printf("More than 2 failed courses:\n");
printf("No 2:");
for(j=0;j<5;j++)
{
sum+=*(*(a+i)+j);
printf("%5.1f",*(*(a+i)+j));
}
printf(" average:%5.1f\n", sum / 5.0);
}
}
void find(float a[4][5],int n)
{
int count=0;
int i,j;
float sum=0;
printf("Average score >=90 or all courses >=85:\n");
for(i=0;i<n;i++)
{
count=0;
sum=0;
for(j=0;j<5;j++)
{
if(*(*(a+i)+j)>=85)
count++;
sum+=*(*(a+i)+j);
}
if(count==5||sum/5.0>=90.0)
{
printf("No %d:",i+1);
for(j=0;j<5;j++)
{
printf("%5.1f",*(*(a+i)+j));
}
printf(" average:%5.1f\n",sum/5.0);
}
}
}