有一个班同学,实现计算平均分和不及格同学等功能
//有一个班4个学生,5门课程。①求第一门课程的平均分;②找出两门以上课程不及格的同学,输入他们的姓名和全部课程成绩及平均成绩;③找出平均成绩在90分以上或全部课程成绩85分以上的同学。分别编3个函数实现以上3个要求。
#define N 5 // N表示5门课程
#include<stdio.h>
int main()
{
float sub_average(int *p,char (*p1)[5],int n);//计算每门课的平均成绩
int sub_name(int *p1,char (*p2)[5]);//找出求2门以上不及格同学和成绩
int average_name(int *p3,char (*p2)[5]);//找出求平均分90以上或全部课程成绩85分以上的同学
int score[][N]={{51,52,73,45,53},{50,51,80,90,100},{86,87,88,89,90},{100,100,100,100,60}};
char sub[][5]={"语文","数学","英语","政治","历史"};
char name[][5]={"张三","李四","王五","任六"};
char (*p1_sub)[5],(*p2_name)[5]; //p_sub1指向课程名字 p2_name指向同学名字
int *p_score;//p指向成绩
char (*p3_name)[5];//p3指向同学名字
int n,i;
p1_sub=sub;
p2_name=name;
p_score=score[0];
p3_name=name;
n=sizeof(score)/4/5;//4;n等于数组的行数,也就是有几个学生
for(i=0;i<N;i++)
{
sub_average(p_score+i,p1_sub++,n);
}
sub_name(p_score,p3_name);
average_name(p_score,p3_name);
}
int average_name(int *p1,char (*p2)[5])
{
int j,i=0,flag_1=0,flag_2=0,sum=0;//flage_1为1 代表平均成绩在90以上,flag_2为1代表全部课程在85以上
float average=0;
printf("平均成绩在90以上或者全部课程在85以上的同学有:\n");
for(i=0;i<4;i++,p1=p1+5)
{
flag_1=0,flag_2=0,sum=0;
for(j=0;j<5;j++)
{
sum=sum+*(p1+j);
}
average=sum*1.0/5;
if(average>90.00) flag_1=1;
for(j=0;j<5;j++)
{
if(*(p1+j)<85) break;
flag_2=1;
}
if((flag_1+flag_2)>=1)
printf("%s\n",p2+i);
}
return 0;
}
int sub_name(int *p1,char (*p2)[5])
{
int i,j=0,k;
int flag=0;
for(i=0;i<5;i++,p1=p1+5,p2++)
{
flag=0;
for(j=0;j<5;j++)
{
if(*(p1+j)<60) flag++;
if(flag==2) break;
}
if(flag>=2)
{
printf("%s",p2);
for(k=0;k<5;k++,p1)
{
printf("%d ",*(p1+k));
}
printf("\n");
}
}
return 0;
}
float sub_average(int *p,char (*p1)[5],int n)
{
int sum=0,i=0;
for(;i<n;i++)
{
sum=sum+*p;
p=p+N;
}
printf("%s:",p1);
printf("%.2f\n",sum*1.0/N);
return 0;
}
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
更多精彩

