发布网友 发布时间:2022-04-27 08:29
共1个回答
热心网友 时间:2022-06-29 05:59
程序如下:
/*
有多个学生,学习多门的课程,设计函数,实现如下功能:
1.学生信息的输入、输出。
2.求每个学生的平均成绩。
3.求每门课的平均成绩、成绩的最大值、最小值等,并保存在数组中。
4.检查这些学生有无考试不及格的课程。若某一学生有一门或一门以上课程不及格,就输出该学生的信息。
5.查找平均成绩在90分以上的学生,输出该学生的信息。
6.按学生平均分从高到低排序,并输出。
实验要求:
1.输入、输出时有必要的提示信息。
2.输出格式要界面直观、清晰大方、格式规范。
3.上面的实验内容中至少选择前四个功能模块,要求一个以上模块用指针。
4.最好使用菜单形式选择各功能模块,每个功能为一个函数。
5.同学可根据个人情况增加成绩处理的一些功能。
*/
#include<stdio.h>
#define M 200
#define N 10
struct student
{
long int num;
char name[20];
float course[N];
}students[M];
void main()
{
int m,n;
int i,j,k;
float avg_students[M];
float avg_course[N];
float max_min[N][2];
float temp=0.0;
float max=0.0,min=0.0;
printf("输入m,n的值:");
scanf("%d%d",&m,&n);
for(i=0;i<m;i++)avg_students[i]=0.0;
for(j=0;j<n;j++)avg_course[j]=0.0;
for(i=0;i<n;i++)
for(j=0;j<2;j++)
max_min[i][j]=0.0;
printf("\n输入学生的信息:\n");//1.学生信息的输入
for(i=0;i<m;i++)
{
printf("输入第%d个学生的学号:",i+1);
scanf("%ld",&students[i].num);
printf("输入第%d个学生的姓名:",i+1);
scanf("%s",students[i].name);
printf("输入第%d个学生的%d门课程成绩:",i+1,n);
for(j=0;j<n;j++)
{
scanf("%f",&students[i].course[j]);
avg_students[i]+=students[i].course[j];
avg_course[j]+=students[i].course[j];
}
avg_students[i]=avg_students[i]/n;//计算每个学生的平均成绩
}
for(j=0;j<m;j++)avg_course[j]=avg_course[j]/m;//3、计算m个学生每门课程的平均分
printf("\n输出学生的信息:\n");//1.学生信息的输出
for(i=0;i<m;i++)
{
printf("第%d个学生的学号:%ld\n",i+1,students[i].num);
printf("第%d个学生的姓名:%s\n",i+1,students[i].name);
printf("第%d个学生的%d门课程成绩:\n",i+1,n);
for(j=0;j<n;j++)
printf("%.2f ",students[i].course[j]);
printf("\n");
}
printf("\n每个学生的平均成绩:\n");//2、输出每个学生的平均成绩
for(i=0;i<m;i++)
printf("%.2f\n",avg_students[i]);
printf("\n");
printf("\n每门课程的平均分为:\n");//输出每门课程的平均分
for(j=0;j<n;j++)
printf("%.2f\n",avg_course[j]);
printf("\n");
for(j=0;j<n;j++)//3、求每科成绩的最高分和最低分
{
for(i=0,max=min=students[i].course[j];i<m;i++)
{
if(students[i].course[j]>max)max=students[i].course[j];
if(students[i].course[j]<min)min=students[i].course[j];
}
max_min[j][0]=max;
max_min[j][1]=min;
}
printf("\n每科成绩的最高分和最低分:\n");
for(i=0;i<n;i++)//3、求每科成绩的最高分和最低分
{
printf("第%d门课程的最高分:%.2f,最低分:%.2f\n",i+1,max_min[i][0],max_min[i][1]);
}
//4.检查这些学生有无考试不及格的课程。若某一学生有一门或一门以上课程不及格,就输出该学生的信息。
printf("输出不及格学生的信息:\n");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(students[i].course[j]<60)
{
printf("学号:%ld\n",students[i].num);
printf("姓名:%s\n",students[i].name);
for(k=0;k<n;k++)
printf("%.2f ",students[i].course[k]);
printf("\n\n");
break;
}
}
}
//5.查找平均成绩在90分以上的学生,输出该学生的信息。
printf("\n平均成绩在90分以上的学生信息:\n");
for(i=0;i<m;i++)
{
if(avg_students[i]>=90)
{
printf("学号:%ld\n",students[i].num);
printf("学号:%s\n",students[i].name);
for(k=0;k<n;k++)
printf("%.2f ",students[i].course[k]);
printf("\n\n");
}
}
//6.按学生平均分从高到低排序,并输出
for(i=0;i<m-1;i++)//选择排序
{
k=i;
for(j=i+1;j<m;j++)
if(avg_students[k]<avg_students[j])k=j;
temp=avg_students[i];
avg_students[i]=avg_students[k];
avg_students[k]=temp;
}
printf("学生平均成绩从高到低为:\n");
for(i=0;i<m;i++)
{
printf("%.2f\n",avg_students[i]);
}
}
运行结果如下:
输入m,n的值:3 3
输入学生的信息:
输入第1个学生的学号:100
输入第1个学生的姓名:tian
输入第1个学生的3门课程成绩:85 96 82
输入第2个学生的学号:101
输入第2个学生的姓名:tang
输入第2个学生的3门课程成绩:54 86 92
输入第3个学生的学号:102
输入第3个学生的姓名:sang
输入第3个学生的3门课程成绩:85 74 63
输出学生的信息:
第1个学生的学号:100
第1个学生的姓名:tian
第1个学生的3门课程成绩:
85.00 96.00 82.00
第2个学生的学号:101
第2个学生的姓名:tang
第2个学生的3门课程成绩:
54.00 86.00 92.00
第3个学生的学号:102
第3个学生的姓名:sang
第3个学生的3门课程成绩:
85.00 74.00 63.00
每个学生的平均成绩:
87.67
77.33
74.00
每门课程的平均分为:
74.67
85.33
79.00
每科成绩的最高分和最低分:
第1门课程的最高分:85.00,最低分:54.00
第2门课程的最高分:96.00,最低分:74.00
第3门课程的最高分:92.00,最低分:63.00
输出不及格学生的信息:
学号:101
姓名:tang
54.00 86.00 92.00
平均成绩在90分以上的学生信息:
学生平均成绩从高到低为:
87.67
77.33
74.00
Press any key to continue