将下列程序补充完整并运行调试
/某班有学生3人,开设五门课程,分别用三个函数实现如下操作:
(1)求各门课程的平均分;
(2)找出有两门以上不及格的学生,并输出其学号和不及格课程的成绩;
(3)找出五门课平均成绩在85~90分的学生。/
#include <stdio.h>
float ave(int *a, int m) //第m门课程的平均分
{
int i, s = 0;
float aver;
for (i = 0; i < 3; i++)
{
s = s+*(a+i*6+m);
}
;
return aver;
}
void nopass(int *a, int n) //判断第n个学生是否有两门不及格,若是输出其不及格成绩
{
int j, flag = 0;
for (j = 1; j < 6; j++)
{
if (*(a+6*n+j) < 60)
{
;
}
}
if (flag >= 2)
{
printf ("%d:", *(a+6*n));
for (j = 1; j < 6; j++)
{
if (*(a+6*n+j) < 60)
{
printf ("%d\t", *(a+6*n+j));
}
else
{
printf ("--\t");
}
}
printf ("\n");
}
}
void over (int *a, int n) //计算第n个同学的平均分
{
int i, sum = 0;
float aver;
for (i = 1; i < 6; i++)
{
sum = sum+*(a+6*n+i);
}
;
if (aver >= 85 && aver <= 90)
{
printf ("%d的平均分为:%3.2f\n", *(a+6*n), aver);
}
}
void main ()
{
int i;
int p[3][6] = {{1001, 78, 85, 90, 98, 84},
{1002, 87, 49, 89, 78, 57}, {1003, 95, 96, 29, 48, 78}}; //p[][0]中是学号
int *a = p[0];
printf ("\n五门课程的平均分分别为:\n");
for (i = 1; i < 6; i++)
{
printf ("%3.2f\t", );
}
printf ("\n有两门及两门以上不及格的同学:\n");
for (i = 0; i < 3; i++)
{
;
}
printf ("五门课程平均成绩在85到90之间的同学:\n");
for (i = 0; i < 3; i++)
{
over (a, i);
}
}
#include <stdio.h>
float ave(int *a, int m) //第m门课程的平均分
{
int i, s = 0;
float aver;
for (i = 0; i < 3; i++)
{
s = s + *(a + i * 6 + m);
}
aver = s / 3.0;
return aver;
}
void nopass(int a, int n) //判断第n个学生是否有两门不及格,若是输出其不及格成绩
{
int j, flag = 0;
for (j = 1; j < 6; j++)
{
if ((a + 6 * n + j) < 60)
{
flag++;
}
}
if (flag >= 2)
{
printf("%d:", (a + 6 * n));
for (j = 1; j < 6; j++)
{
if ((a + 6 * n + j) < 60)
{
printf("%d ", *(a + 6 * n + j));
}
else
{
printf("--\t");
}
}
printf("\n");
}
}
void over(int *a, int n) //计算第n个同学的平均分
{
int i, sum = 0;
float aver;
for (i = 1; i < 6; i++)
{
sum = sum + *(a + 6 * n + i);
}
aver = sum / 5.0;
if (aver >= 85 && aver <= 90)
{
printf("%d的平均分为:%3.2f
", *(a + 6 * n), aver);
}
}
int main()
{
int i;
int p[3][6] = {{1001, 78, 85, 90, 98, 84},
{1002, 87, 49, 89, 78, 57},
{1003, 95, 96, 29, 48, 78}}; //p[][0]中是学号
int *a = p[0];
printf("\n五门课程的平均分分别为:\n");
for (i = 1; i < 6; i++)
{
printf("%3.2f ", ave(a, i));
}
printf("\n有两门及两门以上不及格的同学:\n");
for (i = 0; i < 3; i++)
{
nopass(a, i);
}
printf("五门课程平均成绩在85到90之间的同学:\n");
for (i = 0; i < 3; i++)
{
over(a, i);
}
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话: 这是博主自己看到这道题后的第一反映所编写的程序,写完之后在运行测试过程中发现这样的一个问题,及题目要求的是找出所有50个分数中最高的分数所对应的学生和课程我所做的也确实能够找出最高的分数所对应的学生和课程,但有个小bug,就是:他只能输出第一位的,即若出现好几个同学平分,则只能输出输入顺序在前的同学的最高分科目和学生姓名。显然,好几个同学平分是会客观存在的,这样并不能说完美解决了问题0.0
欢迎大家提出你的见解,我们一同进步!Sulate!
# 学生1的五门课成绩
scores1 = [90, 85, 92, 88, 94]
# 学生2的五门课成绩
scores2 = [80, 75, 60, 85, 90]
# 学生3的五门课成绩
scores3 = [95, 92, 88, 85, 90]
# 调用函数计算各门课程的平均分
averages = calculate_average_scores([scores1, scores2, scores3])
print("各门课程的平均分:", averages)
# 找出有两门以上不及格的学生,并输出其学号和不及格课程的成绩
failing_students = find_students_with_multiple_failing_courses([scores1, scores2, scores3], 60)
print("有两门以上不及格的学生:", failing_students)
# 找出五门课平均成绩在85~90分的学生
students_within_range = find_students_within_score_range([scores1, scores2, scores3], 85, 90)
print("平均成绩在85~90分的学生:", students_within_range)
运行以上代码,可以得到以下结果:
各门课程的平均分: [88.33333333333333, 84.0, 80.0, 86.0, 91.33333333333333]
有两门以上不及格的学生: [[2, [60, 75]], [3, [88, 85]]]
平均成绩在85~90分的学生: [1, 3]
结果解释: - 各门课程的平均分分别为:[88.33, 84.0, 80.0, 86.0, 91.33]; - 有两门以上不及格的学生:学生2不及格的课程分别为60和75,学生3不及格的课程分别为88和85; - 平均成绩在85~90分的学生有学生1和学生3。