学生成绩统计、排序的实现
问题描述:在学生成绩管理中,经常会遇到求平均成绩,统计不及格学生成绩,统计优秀学生人数,以及按成绩对学生进行排名等。现假设有某个班级的若干名学生,每个学生都考试完成了4门课程,试对所有学生的成绩完成以下工作:
(1)求每门课程的平均成绩。
(2)输出所有有不及格课程的学生的学号、姓名、全部课程的成绩、平均成绩。
(3)输出所有平均分在90分以上(含90分)的学生学号、姓名。
(4)对4门课程中的任何一门,可随意抽取1门按学生成绩进行排序
学生成绩统计、排序的实现
问题描述:在学生成绩管理中,经常会遇到求平均成绩,统计不及格学生成绩,统计优秀学生人数,以及按成绩对学生进行排名等。现假设有某个班级的若干名学生,每个学生都考试完成了4门课程,试对所有学生的成绩完成以下工作:
(1)求每门课程的平均成绩。
(2)输出所有有不及格课程的学生的学号、姓名、全部课程的成绩、平均成绩。
(3)输出所有平均分在90分以上(含90分)的学生学号、姓名。
(4)对4门课程中的任何一门,可随意抽取1门按学生成绩进行排序
#include
<stdio.h>
#include
<stdlib.h>
//
hold the number of students
#define
N 5
#define
DATA struct data
DATA{
long studentNumber;
char name[80];
double course[4];
double total;
double average;
int pass;
int superior;
};
int
main( void )
{
DATA data[N], temp;
int i, j, max, mark = 0, mark_90 = 0;
// get data
for ( i = 0; i < N; i++ )
{
printf("Enter the data of student
%-2d:\n",i+1);
printf("Enter student number:
"); scanf("%ld",&data[i].studentNumber);
printf("Enter name: ");
fflush(stdin); gets(data[i].name);
data[i].total = 0;
data[i].pass = 1;
data[i].superior = 0;
for ( j = 0; j < 4; j++ )
{
printf("Enter score of course
%d: ", j+1);
scanf("%lf",&data[i].course[j]);
if ( data[i].course[j] < 60 )
{
mark = 1;
data[i].pass = 0;
}
data[i].total += data[i].course[j];
}
data[i].average = data[i].total / 4;
if ( data[i].average >= 90 )
{
mark_90 = 1;
data[i].superior = 1;
}
putchar('\n');
}
// print the student who failed
if ( mark == 0 ) printf("\nNo student
failed!\n");
else
{
printf("\nFailed:\n");
puts("studentNumber studentName
course1 course2 course3 course4 average");
puts("=================================================================");
for ( i = 0; i < N; i++ )
{
if ( data[i].pass == 1 ) continue;
printf("%-14ld",data[i].studentNumber);
printf("%-12s",data[i].name);
for ( j = 0; j < 4; j ++ )
{
printf("%-8g",data[i].course[j]);
}
printf("%-7g",data[i].average);
}
}
// print the superior student
if ( mark_90 == 0 )
printf("\n\nNo student's average
is more than 90 ( including 90 )\n");
else
{
printf("\n\nAverage more than 90
(including 90 ):\n");
puts("studentNumber
studentName");
puts("=========================");
for ( i = 0; i < N; i++ )
{
if ( data[i].superior == 0 )
continue;
printf("%-14ld",data[i].studentNumber);
printf("%-11s",data[i].name);
}
}
// choose the course to sort
printf("\nchoose the course to
sort:\n");
for ( i = 0; i < 4; i++ )
printf("\t%d - course %d\n",i,i+1);
scanf("%d",&mark);
if ( mark < 0 || mark > 3 )
printf("\n\nNo such a course!\n");
else
{
for ( i = 0; i < N; i++ )
{
for ( max = j = i; j < N; j++ )
{
if ( data[max].course[mark]
< data[j].course[mark] ) max = j;
}
if ( max != i )
{
temp = data[i];
data[i] = data[max];
data[max] = temp;
}
}
printf("\n\nAfter
sorting:\n");
puts("studentNumber studentName
course1 course2 course3 course4 average");
puts("=================================================================");
for ( i = 0; i < N; i++ )
{
printf("%-14ld",data[i].studentNumber);
printf("%-12s",data[i].name);
for ( j = 0; j < 4; j ++ )
{
printf("%-8g",data[i].course[j]);
}
printf("%-7g\n",data[i].average);
}
}
system("pause");
return 0;
}
#include<iostream.h> #include<string.h> #define N 2//N为全班人数 class Student { public: Student(){return;} char Name[10]; char id[10]; float s1,s2,s3,s4; float Ave(); friend class Class; }; class Class { Student stu[N];//N为全班人数 public: void Input();//学生信息输入 float AveS1();//求S1的平均成绩 float AveS2();//求S2的平均成绩 float AveS3();//求S3的平均成绩 float AveS4();//求S4的平均成绩 void SearchSmall();//查找优秀学生 void SearchExc();//查找不及格学生 void Search90();//查找平均分在90分以上的学生 void Search();//检索 };
float Student::Ave() { return (s1+s2+s3+s4)/4; } void Class::Input() { cout<<"请输入学生的信息:"<<endl; for(int i=0;i<N;i++) { cout<<"请输入学生的名字:"<<endl; cin>>stu[i].Name; cout<<"请输入学生的编号:"<<endl; cin>>stu[i].id; cout<<"请输入学生的S1成绩: "<<endl; cin>>stu[i].s1; cout<<"请输入学生的S2成绩:"<<endl; cin>>stu[i].s2; cout<<"请输入学生的S3成绩;"<<endl; cin>>stu[i].s3; cout<<"请输入学生的S4成绩;"<<endl; cin>>stu[i].s4; } } float Class::AveS1() { float sum(0); for(int i=0;i<N;i++) sum+=stu[i].s1; return sum/N; } float Class::AveS2() { float sum(0); for(int i=0;i<N;i++) sum+=stu[i].s2; return sum/N; } float Class::AveS3() { float sum(0); for(int i=0;i<N;i++) sum+=stu[i].s3; return sum/N; } float Class::AveS4() { float sum(0); for(int i=0;i<N;i++) sum+=stu[i].s4; return sum/N; } void Class::SearchSmall() { float max(0); int n; for(int i=0;i<N;i++) { if(stu[i].Ave()>max) { max=stu[i].Ave(); n=i; } } cout<<"平均成绩最好的学生是"<<stu[n].id<<"号学生:"<<stu[n].Name<<endl; cout<<endl;
} void Class::SearchExc() { bool b; cout<<"输出不及格的学生:"<<endl; for(int i=0;i<N;i++) { if(stu[i].Ave()<60) cout<<stu[i].Name<<endl; else b=1; } if(b) cout<<"没有不及格的学生!"<<endl; cout<<endl; } void Class::Search() { bool b; Student s; cout<<"请输入要检索的学生的编号:"; cin>>s.id; for(int i=0;i<N;i++) if(!strcmp(s.id,stu[i].id)) { cout<<"你检索的学生的信息如下:"<<endl; cout<<"学号:"<<stu[i].id<<endl; cout<<"姓名:"<<stu[i].Name<<endl; cout<<"S1成绩:"<<stu[i].s1<<endl; cout<<"s2成绩:"<<stu[i].s2<<endl; cout<<"s3成绩:"<<stu[i].s3<<endl; cout<<"s4成绩:"<<stu[i].s4<<endl; } else b=1; if(b) cout<<"没有你要检索的学生!"<<endl; cout<<endl; } void Class::Search90() { cout<<"输出平均成绩高于90分以上的学生:"<<endl; bool b; for(int i=0;i<N;i++) { if(stu[i].Ave()>=90) cout<<stu[i].id<<"号学生 "<<stu[i].Name<<endl; else b=1; } if(b) cout<<"没有平均成绩在90分以上的学生!"<<endl; cout<<endl; } int main() { Class Cla; Cla.Input(); Cla.AveS1(); Cla.AveS2(); Cla.AveS3(); Cla.AveS4(); Cla.SearchSmall(); Cla.SearchExc(); Cla.Search90(); Cla.Search(); return 0; }