有一个班同学,实现计算平均分和不及格同学等功能

//有一个班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;
}

  

posted @ 2019-04-15 09:16  理工—王栋轩  阅读(272)  评论(0编辑  收藏  举报