import java.util.Scanner;
/*
录入10个学生的数学语文英语的三科成绩
计算每科的平均成绩计算出每个人的总成绩
并找出每科成绩的最高分与最低分
*/
public class Betty {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int[][] scores = new int[3][3];//定义一个二维数组,用来存储每个学生的三科成绩
/*
* 录入10个学生的数学 语文 英语三科成绩
* */
for(int i=0;i<scores.length;i++) {
System.out.println("请输入第"+(i+1)+"个同学的成绩:");
for(int j=0;j<scores[i].length;j++) {
scores[i][j] = scan.nextInt();
}
}
/*
* 算出每科总成绩 和平均值 并找出每科成绩最大值和最小值
* 规律:
* 第一科总成绩
* 第一个人第一科成绩 第二个人第一科成绩 第三个人第一科成绩
* scores[0][0] + scores[1][0] + scores[2][0]
* 由此可见 使用for循环遍历学生和成绩时,暂时不变的应该在外层循环,所以科目成绩应该在外层循环
* 而学生应该在内层循环
* */
int[] classSum = new int[scores[0].length];//定义数组classSum用于存储每科成绩的总和。
double[] classAvg = new double[scores[0].length];//定义数组classSum用于存储每科成绩的平均值。
int[] classMax = new int[scores[0].length];//定义数组classMax用于存储每科成绩最大值。
int[] classMin = new int[scores[0].length];//定义数组classMin用于存储每科成绩最小值。
for(int i=0;i<scores[0].length;i++) {
int sum = 0;//定义sum目的在于求每科成绩之和,每科成绩循环完成都要进行归零。
int max = scores[0][i];//假设第一个人每科成绩最大,将第一个同学与其他同学成绩进行比较,不能是scores[j][0],因为不能每科不一样的成绩都用第一科来比较,科目不同。
int min = scores[0][i];//假设第一个人每科成绩最小,将第一个人和其他同学成绩比较。
for(int j=0;j<scores.length;j++) {
sum+=scores[j][i];
if(max<scores[j][i]) {
max = scores[j][i];
}
if(min>scores[j][i]) {
min = scores[j][i];
}
}
classMax[i] = max;//内层循环结束后第i科成绩最大值才会确定,所以在内层循环结束之后将最大值存入数组classMax中。不可放在内层for循环中。
classMin[i] = min;//将最小值存入数组classMin中。
classSum[i] = sum;//将每科计算好的总和存入数组classSum中
classAvg[i] = sum/scores[i].length;//将平均值存入数组classAvg中
}
/*
* 计算出每个人的总成绩
* 由于是求每个人的总成绩,规律如下:
* 第一个同学第一科成绩 + 第一个同学第二课程 + 第一个同学第三课成绩
* scores[0][0] scores[0][1] scores[0][2]
* 总结:
* 可以看出 求每个人的总成绩时,学生是暂时不变的,每科成绩都是变化的。所以学生应该在外层循环,而科目应该在内层循环。
*/
int[] perSum = new int[scores.length];//定义数组perSum,用于存储每个学生的总成绩。
double[] perAvg = new double[scores.length];//定义数组perAvg,用于存储每个学生平均值。
int[] perMax = new int[scores.length];//定义数组perMax,用于存储每个学生的三科中最大的成绩。
int[] perMin = new int[scores.length];//定义数组perMin,用于存储每个学生的三科中最小的成绩。
for(int i=0;i<scores.length;i++) {
int sum = 0;//内层循环每遍历结束一个学生 sum要归零
int max = scores[i][0];//假设一个最大值为scores[i][0],第i个同学的第一科成绩,与第i个同学的第二科成绩比较.....同学是暂时不变的,因为是同一个人的三科成绩作比较。
int min = scores[i][0];
for(int j=0;j<scores[i].length;j++) {
sum+=scores[i][j];
if(max<scores[i][j]) {
max = scores[i][j];
}
if(min>scores[i][j]) {
min = scores[i][j];
}
}
perMax[i] = max;//内层循环结束后,比较出最大值存入perMax中。
perMin[i] = min;//外层循环结束后,比较出最小值存入perMin中。
perSum[i] = sum;//内层for循环结束,每个学生的总成绩才加好,所以在内层循环结束之后,将sum存入到数组perSum中。
perAvg[i] = sum/scores.length;//计算每个学生的平均值,将值存入数组perAvg中
}
System.out.println("--------------------------学生成绩状况-------------------------");
System.out.println("学生序号"+"\t语文成绩"+"\t数学成绩"+"\t英语成绩"+"\tperSum"+"\tperAvg"+"\tMax"+"\tMin");
for(int i=0;i<scores.length;i++) {
System.out.print((i+1)+"\t");
for(int j=0;j<scores[i].length;j++) {
System.out.print(scores[i][j]+"\t");
}
System.out.print(perSum[i]+"\t");
System.out.print(perAvg[i]+"\t");
System.out.print(perMax[i]+"\t");
System.out.print(perMin[i]+"\t");
System.out.println();
}
System.out.println("\n-----------------------------------------------------------");
}
}
录入10个学生的数学语文英语的三科成绩 计算每科的平均成绩计算出每个人的总成绩 并找出每科成绩的最高分与最低分
猜你喜欢
转载自blog.csdn.net/Betty_betty_betty/article/details/81254929
今日推荐
周排行