有一个班4个学生,5门课程。 1、求第一门课程的平均分; 2、找出有两门课程以上不及格的学生,输出他们的学号和全部课程成绩及平均成绩; 3、找出平均成绩在90分以上或全部课程成绩在85分以上的学生。

/*有一个班4个学生,5门课程。
1、求第一门课程的平均分;
2、找出有两门课程以上不及格的学生,输出他们的学号和全部课程成绩及平均成绩;
3、找出平均成绩在90分以上或全部课程成绩在85分以上的学生。
分别编3个函数实现以上3个要求*/

#include <stdio.h>

int main()
{
	int fun1(float (*p)[6]);
	int fun2(float (*p)[6]);
	int fun3(float (*p)[6]);
	float a[4][6];
	int i,j;
	float (*p)[6];
	p = a;
	
	printf("请输入学号和成绩:\n");
	for(i = 0;i < 4;i++)
	{
		for(j = 0;j < 6;j++)
		{
			scanf("%f",&a[i][j]);
		}
	}
	
	fun1(p);
	fun2(p);
	fun3(p);
 } 
 
//求第一门成绩的平均分 
int fun1(float (*p)[6])
{
	float sum = 0.0;
	int i;
	
	for(i = 0;i < 4;i++)
	{
		sum += *(*(p + i) + 1);
	}
	
	printf("平均分是:%f\n",sum/4);
}

//找出有两门课程以上不及格的学生,输出他们的学号和全部课程成绩及平均成绩
int fun2(float (*p)[6])
{
	int i,j,n,flag = 0;
	float sum;
	
	for(i = 0;i< 4;i++)
	{
		n = 0;
		sum = 0.0;
		for(j = 1;j < 6;j++)
		{
			if(*(*(p + i) + j) < 60)
			{
				n ++;
			}
			sum += *(*(p + i) + j); 
		}
		if(n >= 2)
		{
			printf("学号为%f的学生有超过两门成绩不合格\n",*(*(p + i) + 0));
			
			printf("成绩有:\n");
			for(j = 1;j < 6;j++)
			{
				printf("%f ",*(*(p + i) + j));
			}
			
			printf("\n平均成绩是:%f\n",sum/5);
			flag = 1;
		}
	}
	
	if(flag == 0)
	{
		printf("未找到!\n"); 
	}
}

//找出平均成绩在90分以上或全部课程成绩在85分以上的学生
int fun3(float (*p)[6])
{
	int i,j,n;
	float sum;
	
	for(i = 0;i < 4;i++)
	{
		sum = 0.0;
		n = 0;
		for(j = 1;j < 6;j++)
		{
			if(*(*(p + i) + j) >= 85)
			{
				n++;
			}
			sum += *(*(p + i) + j);
		}
		if(sum / 5 >= 90 || n == 5)
		{
			printf("符合条件3的学生有%f\n",*(*(p + i) + 0));
		}
	}
}

谭浩强C程序设计(第四版)p292第15题
这个题写成结构体输出结果更直观

/*有一个班4个学生,5门课程。
1、求第一门课程的平均分;
2、找出有两门课程以上不及格的学生,输出他们的学号和全部课程成绩及平均成绩;
3、找出平均成绩在90分以上或全部课程成绩在85分以上的学生。
分别编3个函数实现以上3个要求*/

#include <stdio.h>

typedef struct Student{
	char c[8];//学号
	float a[5];//成绩 
}Student;

int main()
{
	int fun1(Student *p);
	int fun2(Student *p);
	int fun3(Student *p);
	int i,j;
	Student stu[4];
	Student *p;
	p = stu;
	
	printf("请输入学号和成绩:\n");
	for(i = 0;i < 4;i++)
	{
		scanf("%s",stu[i].c);
		for(j = 0;j < 5;j++)
		{
			scanf("%f",&stu[i].a[j]);
		}
	}
	
	fun1(p);
	fun2(p);
	fun3(p);
}

//求第一门成绩的平均分
int fun1(Student *p)
{
	float sum = 0.0;
	int i;
	
	for(i = 0;i < 4;i++)
	{
		sum += p[i].a[0]; 
	}
	
	printf("第一门成绩的平均分是:%f\n",sum/4);
} 

//找出有两门课程以上不及格的学生,输出他们的学号和全部课程成绩及平均成绩
int fun2(Student *p)
{
	int i,j,n,flag = 0;
	float sum;
	
	for(i = 0;i< 4;i++)
	{
		n = 0;
		sum = 0.0;
		for(j = 0;j < 5;j++)
		{
			if(p[i].a[j] < 60)
			{
				n ++;
			}
			sum += p[i].a[j]; 
		}
		if(n >= 2)
		{
			printf("学号为%s的学生有超过两门成绩不合格\n",p[i].c);
			
			printf("成绩有:\n");
			for(j = 0;j < 5;j++)
			{
				printf("%f ",p[i].a[j]);
			}
			
			printf("\n平均成绩是:%f\n",sum/5);
			flag = 1;
		}
	}
	
	if(flag == 0)
	{
		printf("未找到!\n"); 
	}
}

//找出平均成绩在90分以上或全部课程成绩在85分以上的学生
int fun3(Student *p)
{
	int i,j,n;
	float sum;
	
	for(i = 0;i < 4;i++)
	{
		sum = 0.0;
		n = 0;
		for(j = 0;j < 5;j++)
		{
			if(p[i].a[j] >= 85)
			{
				n++;
			}
			sum += p[i].a[j];
		}
		if(sum / 5 >= 90 || n == 5)
		{
			printf("符合条件3的学生学号是:%s\n",p[i].c);
		}
	}
}

这样学号和成绩就是不同的数据类型了

发布了87 篇原创文章 · 获赞 9 · 访问量 8571

猜你喜欢

转载自blog.csdn.net/qq_40834200/article/details/105506949