#include
struct Student
{
char name[10];
float courses[5];
};
float avg_student_score(Student stu)
{
int i;
float sum = 0;
for (i = 0; i < 5; ++i)
sum += stu.courses[i];
return sum/5;
}
float avg_course_score(Student stu[], int n, int k)
{
int i;
float sum = 0;
for (i = 0; i < n; ++i)
sum += stu[i].courses[k];
return sum/n;
}
float max_course_score(Student stu[], int n, int k)
{
int i;
float max = 0;
for (i = 0; i < n; ++i)
if (max < stu[i].courses[k])
max = stu[i].courses[k];
return max;
}
float min_course_score(Student stu[], int n, int k)
{
int i;
float min = 0;
for (i = 0; i < n; ++i)
if (min > stu[i].courses[k])
min = stu[i].courses[k];
return min;
}
bool isFailed(Student stu, int k)
{
if (stu.courses[k] < 60)
return false;
return true;
}
int main()
{
int i, j;
Student stu[20];
printf("请输入学生的姓名和成绩:\n");
for (i = 0; i < 20; ++i)
{
printf("%d. ", i + 1);
scanf("%s", stu[i].name);
for (j = 0; j < 20; ++j)
scanf("%f", &stu[i].courses[j]);
}
printf("1. 输出每个学生的平均成绩\n");
printf("2. 输出每门课程的平均成绩\n");
printf("3. 输出每门课程的最高分和最低分\n");
printf("4. 输出有不及格课程的学生姓名\n");
fflush(stdin);
switch (getchar())
{
case '1':
for (i = 0; i < 20; ++i)
printf("%s\t%.2f\n", stu[i].name, avg_student_score(stu[i]));
break;
case '2':
for (j = 0; j < 5; ++j)
printf("%d. %.2f ", j + 1, avg_course_score(stu, 20, j));
printf("\n");
break;
case '3':
for (j = 0; j < 5; ++j)
printf("%d. %.2f %.2f\n", j + 1, max_course_score(stu, 20, j));
break;
case '4':
for (i = 0; i < 20; ++i)
for (j = 0; j < 5; ++j)
{
if (isFailed(stu[i], j))
printf("%s ", stu[i].name);
break;
}
break;
}
return 0;
}
用结构体数组来做。
首先定义一个结构体:
struct student
{
char name[20];
float E ;
float C#;
float C++ ;
float C;
float java;
}stu[20];
然后利用循环对其赋值;
for(int i=0;i<20;i++)
{
scanf(“%s%f%f%f%f%f”,&stu[i].name[20],&stu[i].E,&stu[i].C#........);
}
然后利用循环求值:
例如求每个学生的总成绩:
先写个函数,
void perStuScore(strcut student s)
{
float sum=s.E+s.C#+s.C+++s.C+s.java;
printf("%f",sum);
}
for(int i=0;i<20;i++)
{
perStuScore(stu[i]);
}
OK剩下 的估计也没什么难度,再接再励相信你可以解决的
问题是什么都没有说
楼下,上。。。。。。。。。。。。。。。。。。。。。。。