考试成绩系统-第12届蓝桥杯Scratch省赛2真题第5题

[导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第46讲。

第12届蓝桥杯青少年组省赛分两次进行,这是2020年10月19日举行的第一次省赛考试中级组,形式为在线考试。Scratch分为初级组和中级组,其中初级组面向7~10岁孩子,中级组面向11~14岁孩子。

考试成绩系统,本题是第12届蓝桥杯Scratch第一次省赛真题中级组编程第5题。题目要求考生编程实现一个简单的考试成绩录入系统平台,可以添加成绩、删除成绩、查询成绩、统计总成绩和平均成绩、获取最高成绩以及对成绩按照从大到小的顺序进行排列。

先来看看题目的要求吧。

一.题目说明

编程实现:

考试成绩录入系统平台。

具体要求:

1). 点击绿旗,角色与背景如下图所示呈现在对应位置;

2). 点击增加,出现对话框,输入成绩后添加到列表中;

3). 点击删除,出现对话框,输入删除第几项后列表中第几项成绩删除;

4). 点击总分,系统会说出总成绩;

5). 点击平均分,系统会说出平均成绩;

6). 点击最高分,系统说出本次最高分数;

7). 点击查找,输入查找分数,系统会说出在第几项;

8). 点击排序,列表会按照从大到小自上而下的顺序进行排列。

评判标准:

  • 5 分 :满足要求 1);

  • 5 分 :满足要求 2);

  • 15 分 :满足要求 3);

  • 15 分 :满足要求 4);

  • 15 分 :满足要求 5);

  • 15 分 :满足要求 6);

  • 15 分 :满足要求 7);

  • 15分:满足要求 8)。

二.思路分析

本作品一共有7个角色,每个角色对应一个按钮,如图所示:

这里一共有7种不同的操作,分别是增加分数、删除分数、统计总分、统计平均分、获取最高分、查找分数和排序。

所有的操作都是围绕着列表来进行的,基本上都是对列表的CRUD(增删改查)操作,其中难点是对列表进行排序。

排序是编程中最基本的算法,常见的实现方式有冒泡排序、选择排序、插入排序、快速排序和归并排序等。在这些排序算法中,选择排序相对要简单一些,所以在本作品中,我们将使用选择排序算法来实现分数的排序。

 

三.编程实现

根据题目描述及思路分析,我们可以按角色逐个编写程序:

  • 增加分数

  • 删除分数

  • 统计总分

  • 统计平均分

  • 获取最高分

  • 查找分数

  • 排序

1). 增加分数

首先,我们要创建一个列表,将其命名为”成绩单“,当绿旗点击时,将其清空。当点击增加按钮时,询问”请输入成绩“,然后将用户输入的成绩插入到列表。

切换到增加按钮角色,编写代码如下:

2). 删除分数

当点击删除按钮时,会询问”删除第几项“,等待用户输入数字,然后就删除对应的成绩,切换到删除按钮角色,编写代码如下:

需要注意的是,如果输入的数字,大于列表的最大编号,比如列表有5个成绩,而输入的是6,则不会删除任何数据。

3). 统计分数

统计分数,就是将列表中的每一项成绩相加,这就需要对列表进行循环遍历,将每一项成绩取出来,累加求和。这需要使用循环,同时结合变量,分别创建变量”总分“和”i“,其中i充当计数器,用于获取每一项成绩。

切换到总分按钮角色,编写代码如下:

4). 统计平均分

总分统计出来了,平均分也就非常简单了,只需要用总分除以列表的项目数即可,切换到平均分按钮角色,编写代码如下:

需要注意的是,不能在这里直接使用总分除以列表的项目数。原因在于,我们无法保证在点击统计平均分按钮之前已经点击了总分按钮,所以,此处需要先使用循环计算出总分,然后再计算平均分。

5). 获取最高分

要获取最高分,就需要对列表中的每一项数据进行比较,常见思路是创建一个变量”最高分“,先将最高分设为列表的第一项,然后逐个比较,如果某一项成绩大于最高分,就将最高分设为当前成绩,重复执行这个过程,直到列表中的所有成绩都比较一遍。

切换到最高分按钮,编写代码如下:

6). 查找分数

查找分数也比较简单,Scratch专门提供了查找某一项数据编号的指令,需要注意的是,如果用户输入的成绩不在列表中,则需要提示用户。

切换到查找按钮角色,编写代码如下:

7). 排序

排序是本题的难点,我们先来了解一下什么是选择排序,其基本思想是:

首先在未排序的数列中找到最小(或者最大)元素,然后将其存放到数列的起始位置;接着,再从剩余未排序的元素中继续寻找最小(或者最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

其排序方式可以参考下图:

会打扑克就会选择排序,选择排序很像我们打扑克牌时,把牌从左到右扫描,找到最小的一张牌,放到最左边,然后从第二张牌继续扫描第二小的牌,放到第二的位置,以此类推,直至所有的牌都排列好。

切换到排序按钮角色,编写代码如下:

简要说明两点:

①. 在选择排序中,需要使用嵌套循环,其中外层循环表示循环的轮次,每一轮循环,我们会找到当前待排序数据中的最大数。内层循环则用于逐个比较,确定最大数在列表中的位置。

②. 每一轮循环完毕,都需要进行一次数据交换,在交换数据的时候,必须要借用一个临时变量temp,将其中的一项数据临时保存起来,从而避免数据丢失。

四.总结与思考

本题难度较大,一共大概120个积木块,分值为100,涉及到的知识点主要包括:

  • Scratch问答指令,包括询问并等待和回答指令;

  • 列表的各种操作,包括插入、删除、查找、替换和遍历等;

  • 字符串连接操作;

  • 使用循环累加求和;

  • 交换两个变量的编程技巧;

  • 选择排序的编程思想及具体实现。 

作为省赛中级组的最后一题,还是挺有难度的,不仅需要熟练掌握列表的各种基本操作(包括插入、删除、查找、替换、遍历等),同时还需要掌握至少一种排序算法。

当然,如果考试时间不够,或者不会排序,快速完成前面6个功能就可以的,100分的题目,排序只占了15分,如果保证前面的功能顺利完成,能拿下85分也是非常不错的。

如果你觉得文章对你有所帮助,别忘了点赞,你的鼓励是我坚持继续写下去的最大动力,Thanks♪(・ω・)ノ。

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值