文章目录

  • 任务7、统计一组学生成绩
    • (一)编程实现
      • 课堂练习
    • (二)讲解知识点
      • 1、一维数组定义
        • (1)语法格式
        • (2)数组定义示例
        • (3)数组定义的内存变化图
      • 2、不同类型数组元素默认初始值
      • 3、避免数组下标越界异常
      • 4、避免数组空指针异常
    • (三)拓展练习
      • 任务2、数组排序(升序和降序排列)
        • 1、选择排序法
          • (1)选择法排序含义
          • (2)选择法排序实现步骤
        • 2、冒泡法排序
          • (1)冒泡法排序含义
          • (2)冒泡法排序实现步骤
        • 补充:利用Arrays工具提供的sort()方法实现数组排序

任务7、统计一组学生成绩

  • 统计一组学生成绩的总分、平均分、最高分和最低分
  • 假如一组学生100个人,利用前面所学的知识,程序就需要声明10个变量score1,score2,score3,……,score100,来分别记住每位学生的成绩,计算平均分
  • average=score1,score2,score3,……,score100/100会显得特别麻烦,此时我们用一个数组来保存100个成绩,通过数组的索引或下标来访问每一个成绩,可以使用循环来处理。

(一)编程实现

  • 代码如下:
package p01.t05;import java.util.Scanner;/*** 功能;统计一组学生成绩* 作者:刘金花* 日期:2022 年04月14日*/
public class Task05 {public static void main(String[] args) {// 声明部分double[] scores = new double[10]; // 双精度一维数组,10个元素,scores[0], scores[1],..., scores[9]double sum, average, max, min;Scanner sc = new Scanner(System.in);// 输入部分for (int i = 0; i < scores.length; i++) {System.out.print("scores[" + i + "] = ");scores[i] = sc.nextDouble();}// 处理部分sum = 0;for (int i = 0; i < scores.length; i++) {sum = sum + scores[i];}average = sum / scores.length;max = Double.MIN_VALUE;for (int i = 0; i < scores.length; i++) {if (scores[i] > max) {max = scores[i];}}min = Double.MAX_VALUE;for (int i = 0; i < scores.length; i++) {if (scores[i] < min) {min = scores[i];}}// 输出部分System.out.println("sum = " + sum);System.out.println("average = " + average);System.out.println("max = " + max);System.out.println("min = " + min);}
}
  • 运行程序,查看结果:

  • 可以利用增强for循环来遍历数组

课堂练习

  • 任务1、确保输入成绩在[0, 100]范围内
  • 代码如下:
package p01.t05;import java.util.Scanner;/*** 功能;统计一组学生成绩* 作者:刘金花* 日期:2022 年04月14日*/
public class Task05 {public static void main(String[] args) {// 声明部分double[] scores = new double[10]; // 双精度一维数组,10个元素,scores[0],scores[1],..., scores[9]double sum, average,max,min;Scanner sc = new Scanner(System.in);// 输入部分for (int i = 0; i < scores.length; i++) {while (true) {System.out.print("scores[" + i + "] = ");scores[i] = sc.nextDouble();// 判断成绩是否合法 - [0,100]if (scores[i] >= 0 && scores[i] <= 100) {break; // 跳出while循环} else {// 提示用户输入成绩不合法System.out.println("温馨提示:成绩必须在[0,100]之间!");}}}// 处理部分sum = 0;for (int i = 0; i < scores.length; i++) {sum = sum + scores[i];}average = sum / scores.length;max = Double.MIN_VALUE;for (double score : scores) {if (max < score) {max = score;}}min = Double.MAX_VALUE;for (double score : scores) {if (min > score) {min = score;}}// 输出部分System.out.println("sum = " + sum);System.out.println("average = " + average);System.out.println("max = " + max);System.out.println("min = " + min);}
}
  • 运行代码,查看结果:
  • 任务2、确定最高分或最低分的位置

(二)讲解知识点

1、一维数组定义

(1)语法格式

数组类型[] 数组名 = new 数组类型[数组长度];
数组类型[] 数组名 = new 数组类型[]{数组元素0, 数组元素1, ...};
数组类型[] 数组名 = {数组元素0, 数组元素1, ...};

(2)数组定义示例

int[] ids = new int[100];
String[] names = new String[] {"洪艳林", "陈燕文", "郑晓琳", "唐竹龙"};
Object[] student = {1, "张三丰", "男", 20, "15892924560", "maths007@163.com"};

(3)数组定义的内存变化图

  • 声明数组变量,此时数组变量还是null,赋值实例化数组之后,才会给它分配内存空间

2、不同类型数组元素默认初始值

数据类型 默认初始值
byte,short,int,long 0
float,double 0.0
char 一个空字符,即’\u0000’
boolean false
引用数据类型 null,表示变量不引用任何对象

3、避免数组下标越界异常

  • 每个数组的索引(下标)都有一个范围,即[0, length - 1]。在访问数组的元素时,索引不能超出这个范围,否则程序会报错(ArrayIndexOutOfBoundsException,即数组角标越界异常)。

4、避免数组空指针异常

  • 在使用变量引用一个数组时,变量必须指向一个有效的数组对象,如果该变量的值为null,则意味着没有指向任何数组,此时通过该变量访问数组的元素会出现错误(NullPointerException,即空指针异常)。

(三)拓展练习

  • 2020 年春节期间,有一个特殊的日期引起了大家的注意:2020 年 2 月 2 日。因为如果将这个日期按“yyyymmdd”的格式写成一个 8 位数是 20200202,恰好是一个回文数。我们称这样的日期是回文日期。有人表示 20200202 是“千年一遇”的特殊日子。对此小明很不认同,因为不到 2 年之后就是下一个回文日期:20211202 即 2021年 12月2日。也有人表示 20200202 并不仅仅是一个回文日期,还是一个 ABABBABA 型的回文日期。对此小明也不认同,因为大约 100 年后就能遇到下一个 ABABBABA 型的回文日期:21211212即2121 年 12 月 12 日。算不上“千年一遇”,顶多算“千年两遇”。
  • 给定一个 8 位数的日期,请你计算该日期之后下一个回文日期和下一个 ABABBABA 型的回文日期各是哪一天。
  • 输入描述:输入包含一个八位整数 N,表示日期。
    对于所有评测用例,10000101 ≤ N ≤ 89991231,保证 N 是一个合法日期的 8 位数
  • 输出描述:输出两行,每行 1 个八位数。第一行表示下一个回文日期,第二行表示下一个ABABBABA 型的回文日期。

任务2、数组排序(升序和降序排列)

1、选择排序法

(1)选择法排序含义
  • 选择排序(Selection Sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。
(2)选择法排序实现步骤
  • 选择法排序(降序):n个数排序,经过n − 1轮比较。
    – 第1轮是第1个数跟剩下的( n − 1 ) 个数比较,让第1个数成为本轮最大者,要比较( n − 1 ) 次;
    – 第2轮是第2个数跟剩下的( n − 2 )个数比较,让第2个数成为本轮最大者,要比较( n − 2 )次;
    – ……
    – 第( n − 1 )轮是第( n − 1 )个数与剩下的1个数比较,让第( n − 1 )个数成为本轮最大者,要比较1次。
    _ 总比较次数:(n−1)+(n−2)+……+2+1=n(n−1)2=O(n2)(n-1)+(n-2)+……+2+1=\displaystyle \frac{n(n-1)}{2}=O(n^2)(n−1)+(n−2)+……+2+1=2n(n−1)​=O(n2)
  • 代码如下:
package p01.t05;/*** 功能;选择法排序* 作者:刘金花* 日期:2022 年04月14日*/
public class XExercise02_1 {public static void main(String[] args) {// 声明部分int t;int[] arr = {71,5458,29,31,78,2,77,82};// 处理部分for (int i = 0; i < arr.length - 1; i++) {}}
}

2、冒泡法排序

(1)冒泡法排序含义
  • 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端。
(2)冒泡法排序实现步骤
  • 冒泡法排序(降序):n个数排序,经过n − 1轮比较。
    – 第1轮是n个数里相邻两个数比较,如果后者比前者大就交换,要比较( n − 1 )次,本轮最小者“浮”到第n个位置;
    – 第2轮是前( n − 1 )个数里相邻两个数比较,如果后者比前者大就交换,要比较( n − 2 )次,本轮最小者“浮”到第( n − 1 )个位置;
    – ……
    – 第( n − 1 )轮是前2个数里相邻两个数比较,如果后者比前者大就交换,要比较1次,本轮最小者“浮”到第2个位置;
    – 总比较次数:(n−1)+(n−2)+...+2+1=n(n−1)2(n−1)+(n−2)+...+2+1=n(n−1)2( n − 1 ) + ( n − 2 ) + . . . + 2 + 1 = n ( n − 1 ) 2 (n-1)+(n-2)+...+2+1 = \displaystyle \frac{n(n-1)}{2}(n−1)+(n−2)+...+2+1=n(n−1)2(n−1)+(n−2)+...+2+1=2n(n−1)​
  • 代码如下:
package p01.t05;/*** 功能;冒泡法排序* 作者:刘金花* 日期:2022 年04月21日*/
public class XExercise02_2 {public static void main(String[] args) {// 声明部分int t;int[] arr = {71, 54, 58, 29, 31, 78, 2, 77, 82};System.out.print("原始数组:");for (int x : arr) {System.out.print(x + "\t");}System.out.println();// 处理部分for (int i = 0; i < arr.length - 1; i++) {for (int j = 0; j < arr.length - 1 - i; j++) {// arr[j]与arr[j + 1]比较if (arr[j] < arr[j + 1]) {t = arr[j];arr[j] = arr[j + 1];arr[j + 1] = t;}}}System.out.print("降序排列:");for (int x : arr) {System.out.print(x + "\t");}System.out.println();for (int i = 0; i < arr.length - 1; i++) {for (int j = 0; j < arr.length - 1 - i; j++) {// arr[j]与arr[j + 1]比较if (arr[j] > arr[j + 1]) {t = arr[j];arr[j] = arr[j + 1];arr[j + 1] = t;}}}System.out.print("升序排列:");for (int x : arr) {System.out.print(x + "\t");}}
}
  • 运行代码,查看结果:

补充:利用Arrays工具提供的sort()方法实现数组排序

  • 运行程序,查看结果:
  • 怎么才能实现降序排列呢?此时,我们还得传一个参数给sort()方法,这个参数是Collections.reverseOrder()
  • 运行程序,查看结果
  • 要访问一个班的全部同学,有两种方式:一种方式是通过学号(id),相当于采用一维数组来访问;一种方式是通过座位号(row, col),相当于采用二维数组来访问。

任务7、统计一组学生成绩相关推荐

  1. c语言学生成绩统计问题分析,统计计算学生成绩类有关问题ACing

    统计计算学生成绩类问题ACing 1,输入一个正整数n,再输入n个学生的成绩,计算平均分,并统计不及格成绩的学生人数. int count,i,n; //count 为记录不及格成绩的个数 doubl ...

  2. C语言 编程统计全班学生成绩

    编程统计全班学生成绩.要求每次用键盘输入一个学生的2门分数,计算输出每个学生平均分,如果平均分大于等于85,为优秀,60~85为通过.统计出成绩优秀的学生和及格的学生人数. 算法分析: 统计人数,用c ...

  3. Java编程判断一组学生成绩等级

    首先需要说明,本代码使用的判断方式是每个学生成绩与最高学生成绩的差来判断等级 eg:最高成绩98(最高成绩等级为A) 87为B: 77为C: 67为D: 47为D: 代码如下: import java ...

  4. java判定成绩等级_Java编程判断一组学生成绩等级

    首先需要说明,本代码使用的判断方式是每个学生成绩与最高学生成绩的差来判断等级 eg:最高成绩98(最高成绩等级为A) 87为B: 77为C: 67为D: 47为D: 代码如下: import java ...

  5. 利用数组统计班级学生成绩(入门级)

    1.数组的练习,用户录入10个学生的成绩,计算出总分和平均分并输出 2.条件:统计3个班的成绩情况,每个班有5个同学 要求:求出各个班级的平均分和所有班级的平均分[学生的成绩从键盘输入] 统计三个班每 ...

  6. C语言按各科分数段统计人数,(更新啦)学校学生成绩统计通用模板(科目、分数、统计分数段等均可自定,班级数、学生人数不受限制)...

    更新说明: 1.增加了导入.导出数据功能. 2.该功能可以实现版本更新时不用手动复制数据,可实现一键导入导出. 导语微信号☞gdpc-service 这是一款适用于学校平时统一考试成绩统计表.这是长期 ...

  7. 快速计算每个学生成绩最相似的10个学生(万级别数据量)

    作者:小小明 10年编码经验,熟悉Java.Python和Scala,非常擅长解决各类复杂数据处理的逻辑,各类结构化与非结构化数据互转,字符串解析匹配等等. 至今已经帮助至少百名数据从业者解决工作中的 ...

  8. c语言pta按等级统计学生成绩,第九周作业

    6-1 按等级统计学生成绩 (20 分) 本题要求实现一个根据学生成绩设置其等级,并统计不及格人数的简单函数. 函数接口定义: int set_grade( struct student *p, in ...

  9. C语言学生成绩管理程序(可排队序统计)

    C语言学生成绩管理程序(可排队序统计) 一.系统菜单的主要功能 (1)输入若干条记录 (2)显示所有记录 (3)按学号排序 (4)插入一条记录 (5)按姓名查找,删除一条记录 (6)查找并显示一条记录 ...

最新文章

  1. 解决Android 加载大图片OOM
  2. One order Report framework search code debug
  3. pm961 mysql_Oracle GoldenGate学习之--异构平台同步(Mysql到Oracle)
  4. VLAN基本通信原理
  5. CEH v8~v11 Module Slides 和 Lab Manual 下载
  6. 【Flink】Error during binlog processing last offset stored = null binglog reader near position
  7. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节 常用函数接口_12_常用的函数式接口_Predicate接口...
  8. 会javascript,你才是前端工程师!
  9. 基于WF4的新平台-流程格式转换架构
  10. 面向程序员的精品开源字体
  11. 1 10000以内的质数表C语言,求1万以内的质数表,有急用
  12. 分数排名 mysql_mysql 分数排名
  13. PS:动图加文字(二)
  14. python快递分拣程序怎么写_分拣中心分拣作业流程
  15. PCL代码学习03-kdtree_search
  16. 工业42、57、86、110步进电机
  17. 4 款超级好用的终端文件管理器
  18. 从事计算机行业考MBA有用吗,什么行业需要考mba
  19. 阿木实验室的一个专门教程的网站(现在知道这是P200的wiki地址)
  20. Python构图小实例

热门文章

  1. 力扣算法学习计划打卡:第五天
  2. 基于JAVA保险公司风险测评管理系统计算机毕业设计源码+系统+lw文档+部署
  3. Install-macOS-Big-Sur-11.5-20G71
  4. python学习笔记一——鸭子模型
  5. F.interpolate函数使用记录记载
  6. 杂事缠身总分神,不妨试试番茄钟
  7. rrpp协议如何修改_H3C 中低端以太网交换机 可靠性典型配置指导-6W100
  8. To My Little Princess
  9. xxl-job The access token is wrong.
  10. Linux之kickstart全自动安装