/*
(1)一个班有四个学生,五门课程,求第一门课程平均分
(2)找出两门以上课程成绩不及格的学生,输出他们的学号和全部课程成绩以及平均成绩
(3)找出平均成绩90分以上或全部课程85分以上的同学*/
#include <stdio.h>
#define N 4 //N表学生
#define M 5 //M代表课程
int main()
{
float avage(int *p);
void score(int *p);
void prefer(int *p);
int a[N][M]={0};
int i,*p;
float avg;
p=a[0];
printf("请输入学生成绩:\n");
for(i=0;i<N;i++) //按行来进行输入学生的成绩
{
scanf("%d,%d,%d,%d,%d",&a[i][0],&a[i][1],&a[i][2],&a[i][3],&a[i][4]);
}
avg=avage(p);
printf("4位学生成绩第一门课程平均分输出为%5.2f:\n",avg);
printf("\n");
score(p);
printf("\n");
prefer(p);
printf("\n");
return 0;
}
float avage(int *p)
{
int i;
float avg,sum;
avg=0.0;
sum=0.0;
for(i=0;i<N;i++)
{
sum+=*((p+i*5)+0); //*(P+i*m)+j是数组a[i][j]相对于a[0][0]的位置 m为数组的列数
}
avg=sum/N;
return avg;
}
//找出两门以上课程成绩不及格的学生,输出他们的学号和全部课程成绩以及平均成绩
void score(int *p)
{
int i,j,flag;
float sum;
flag=0;
sum=0;
for(i=0;i<N;i++) //遍历成绩,找成绩不合格的学生
{
sum=0; //每遍历一个学生,就让其分数总和变成0;
flag=0; //每遍历一个学生,就让其不合格的课程数为0;
for(j=0;j<M;j++)
{
if(*((p+i*5)+j) <60 )
{
flag++;
}
}
if(flag<=2) continue ;
printf("有两门以上不及格的学生的学号为:%d \n",i+1);
printf("其成绩为:\n");
for(j=0;j<M;j++)
{
sum+=*((p+i*5)+j);
printf("%d ",*((p+i*5)+j));
}
printf("平均分为:%5.2f\n",sum/M);
printf("\n");
}
}
//找出平均成绩90分以上或全部课程85分以上的同学
void prefer(int *p)
{
int i,j,count;
float sum;
for(i=0;i<N;i++) //遍历成绩,找成绩不合格的学生
{
sum=0.0;
count=0;
for(j=0;j<M;j++)
{
sum+=*((p+i*5)+j);
if(*((p+i*5)+j)>=85)
{
count ++;
}
}
if(count==5)
{
printf("第%d位的学生的全部课程成绩大于85分\n",i+1);
}
if(sum/M>90) //平均分大于90的
{
printf("第%d位的学生",i+1);
printf("平均分为:%5.2f\n",sum/M);
}
}
}
学生,共勉,有错求指出,谢谢✍