《java》学生成绩统计从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实现下列功能:
.学生成绩统计
从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实现下列功能:
(1)统计不及格人数并打印不及格学生名单;
(2)统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单;
(3)统计各分数段的学生人数及所占的百分比。
第2学期第2次实验
二维数组和函数综合编程练习
1.成绩排名次
某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最多不超过30人参加考试。考试后要求:
(1)计算每个学生的总分和平均分;
(2)按总分成绩由高到低排出成绩的名次;
(3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分;
(4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数。
【思考题】 请读者思考如下问题。
① 如果增加一个要求:要求按照学生的学号由小到大对学号、成绩等信息进行排序,那么程序如何修改呢?
② 如果要求程序运行后先打印出一个菜单,提示用户选择:成绩录入、成绩排序、成绩查找,在选择某项功能后执行相应的操作,那么程序如何修改呢?
import java.util.Scanner;
public class task {
double score[][]=new double[30][3];
double stuNum;
int sno[]=new int[30];
int rank[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29};
double sum[]=new double[30];
double aver[]=new double[30];
//设置学号和各科成绩
public void setSonAndScore()
{
System.out.println("Enter No. and score as: MT EN PH");
Scanner input=new Scanner(System.in);
for(int i=0;i<stuNum;i++)
{
sno[i]=input.nextInt();
for(int j=0;j<3;j++)
{
score[i][j]=input.nextDouble();
}
}
}
//设置学生人数
public void setStuNum()
{
System.out.println("Please enter the total number of the students(n<=30):");
Scanner input=new Scanner(System.in);
this.stuNum=input.nextDouble();
}
//计算总分
public void setSum()
{
for(int i=0;i<stuNum;i++)
{
this.sum[i]=score[i][1]+score[i][2]+score[i][0];
}
}
//计算平均分
public void setAver()
{
for(int i=0;i<stuNum;i++)
{
this.aver[i]= sum[i]/3.0;
}
}
//计算排名
public void ranking()
{
double forRank[]=new double[30];
forRank= sum;
for(int i=0;i<stuNum-1;i++)
{
for(int j=0;j<=stuNum-i-1;j++)
{
if(forRank[j]<forRank[j+1])
{
double temp=forRank[j];
forRank[j]=forRank[j+1];
forRank[j+1]=temp;
int temp2;
temp2=rank[j];
rank[j]=rank[j+1];
rank[j+1]=temp2;
}
}
}
}
//查询
public void query()
{
int pos;
System.out.println("Please enter searching number:");
Scanner input=new Scanner(System.in);
int tSno=input.nextInt();
System.out.println("position NO MT EN PH SUM AVER");
System.out.println("----------------------------------------------");
for(pos=0;pos<stuNum;++pos)
{
if(sno[pos]==tSno)
break;
}
for (int k=0;k<stuNum;k++)
{
if (rank[k]==pos)
{
System.out.print(++k);
System.out.print(" ");
System.out.print(sno[rank[k]]);
System.out.print(" ");
for(int j=0;j<3;j++)
{
System.out.print(score[rank[k]][j]);
System.out.print(" ");
}
System.out.print(sum[rank[k]]+" "+ aver[rank[k]]);
System.out.println("");
}
}
}
//打印排名
public void print()
{
System.out.println("NO MT EN PH SUM AVER");
System.out.println("-------------------------------------------");
for(int i=0;i<stuNum;i++)
{
System.out.print(sno[rank[i]]);
System.out.print(" ");
for(int j=0;j<3;j++)
{
System.out.print(score[rank[i]][j]);
System.out.print(" ");
}
System.out.print(sum[rank[i]]+" "+ aver[rank[i]]);
System.out.println("");
}
}
public static void main(String args[])
{
task t=new task();
t.setStuNum();
t.setSonAndScore();
t.setSum();
t.setAver();
System.out.println("Before sort");
t.print();
System.out.println("After sort:");
t.ranking();
t.print();
t.query();
}
}