15.有一个班4个学生,5门课程。1.求第一门课程的平均分;2.找出有两门以上课程不及格的学生,输出他们的学号和全部课程成绩及平均成绩;3.找出平均成绩在90分以上或全部成绩在85分以上的学生。分别编3个函数实现以上3个要求。
//15.有一个班4个学生,5门课程。1.求第一门课程的平均分;2.找出有两门以上课程不及格的学生,输出
//他们的学号和全部课程成绩及平均成绩;3.找出平均成绩在90分以上或全部成绩在85分以上的学生。分别
//编3个函数实现以上3个要求。
#include <stdio.h>
double average_class1(int arr[][5])
{
int i = 0;
double sum = 0;
for (i = 0; i < 4; i++)
{
sum += arr[i][0];//因为是求第一门课程的平均分,所以直接列就是0,只要行加1就行!
}
return (sum / 4);//这里是直接除以4就可以了,但是如果int是整型的话,那么就要乘以1.0哦!
}
void find_fail_student(long int arr[], int arr1[][5], char arr2[][50])
{
int i = 0;
int j = 0;
double sum = 0;
int k=1;
for (i = 0; i < 4; i++)
{
int num = 0;//这里的num也要清零,因为另一个学生要重新开始计算!
sum = 0;//注意,这里的sum要清零,因为sum一次只能计算一个学生的成绩总和!
for (j = 0; j < 5; j++)
{
sum += arr1[i][j];//这里是遍历了第一个学生的5门课程!
if (arr1[i][j] < 60)
{
num++;//num的数值代表了他有几科成绩不及格
}
}
if (num > 2)
{
printf("未达标的第%d个学生的学号是%d,姓名是%s\n",k, arr[i], arr2[i]);
printf("这个学生5门课程的平均成绩是%lf\n", sum / 5);
printf("这个学生的各课程的成绩分别是:\n");
k++;
int a = 0;
for (a = 0; a < 5; a++)
{
printf("%d ", arr1[i][a]);
}
printf("\n");//这里换行是为了美观!
}
}
}
void find_great_student(long int arr[], char arr1[][50], int arr2[][5])
{
int i = 0;
int j = 0;
double sum = 0;
int k = 1;
for (i = 0; i < 4; i++)
{
int num = 0;
sum = 0;//这里的清零,目的和上面的一样!
for (j = 0; j < 5; j++)
{
if (arr2[i][j] > 85)
{
num++;
}
sum += arr2[i][j];
}
if (num == 5 || (sum / 5) > 90)//这是根据题目要求来实现的!
{
printf("\n第%d个优秀学生的学号是:%d,姓名是%s\n",k, arr[i],arr1[i]);
k++;//这里使用k++是为了计算出第二个优秀学生,甚至更多的优秀学生!
}
}
}
int main()
{
double average_class1(int arr[][5]);//这是一个求第一门课程的平均分函数
void find_fail_student(long int arr[], int arr1[][5], char arr2[][50]);//这是一个求未达标的学生的函数
void find_great_student(long int arr[], char arr1[][50], int arr2[][5]);//这是求优秀学生的函数
long int arr1[4] = {};//存储学号的数组
char arr2[4][50] = {};//存储姓名的数组
//之所以将姓名放在一个二维数组里面就是因为,我如果放在一维数组里面的话,他又是存放的字符数组,所以这样就不对了!
//所以我干脆将其放在一个二维数组里面,把名字放在每一行即可!
int arr3[4][5] = {};//存储成绩的数组
int i = 0;
int j = 0;
for (i = 0; i < 4; i++)
{
printf("请输入第%d个学生的学号:", i + 1);
scanf_s("%d", &arr1[i]);
(void)getchar();//在使用了scanf之后,会使用一个enter键,这时候要使用getchar把它吃掉!
printf("请输入这个学生的姓名:");
gets_s(arr2[i]);//运用gets来接受字符串!
printf("请输入这个学生的5门课程的成绩:");
for (j = 0; j < 5; j++)
{
scanf_s("%d", &arr3[i][j]);
(void)getchar();//这里使用getchar也是同样的道理!
}
//(void)getchar();
}
printf("第一门课程的平均分是%lf\n", average_class1(arr3));
find_fail_student(arr1, arr3, arr2);
find_great_student(arr1, arr2, arr3);//这里对函数的调用就不必多说了!
return 0;
}
最后祝大家天天开心,没事看看这个代码(给新手看看),欢迎大佬来改进我的代码,并给我一点指点!