[导读]:超平老师计划推出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♪(・ω・)ノ。