比较身高-第15届蓝桥杯第一次STEMA测评Scratch真题精选

比较身高-第15届蓝桥杯第一次STEMA测评Scratch真题精选_第1张图片

[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第153讲。

第15届蓝桥杯第1次STEMA测评已于2023年8月20日落下帷幕,编程题一共有6题,分别如下:

  • 行走的螃蟹

  • 飞驰的高铁

  • 旋转的正方体

  • 弹跳小球

  • 比较身高

  • 数据计算

比较身高,本题是2023年8月20日举行的第15届蓝桥杯STEMA测评Scratch编程中级组编程第5题,题目要求编程实现比较身高。游戏开始后,先向列表中插入5个随机的身高数据,1秒后计算他们的平均身高,再等1秒,将小于平均身高的数据填充到另一个列表中,并排序。

先来看看题目的要求吧。

一.题目说明

编程实现:

比较身高。

具体要求:

1). 运行程序,角色、背景如图所示(列表1和列表2为空);

比较身高-第15届蓝桥杯第一次STEMA测评Scratch真题精选_第2张图片

2). 等待1秒后,在列表1中随机生成5个不重复的整数(170 ≤ 整数 ≤ 190),表示5名同学的身高;

比较身高-第15届蓝桥杯第一次STEMA测评Scratch真题精选_第3张图片

3). 等待1秒后,小男孩说出5名同学的平均身高2秒(平均身高四舍五入取整);

比较身高-第15届蓝桥杯第一次STEMA测评Scratch真题精选_第4张图片

4). 在列表2中自动填入列表1中小于平均身高的数据(按照由小到大的顺序排列)。

比较身高-第15届蓝桥杯第一次STEMA测评Scratch真题精选_第5张图片

评判标准:

  • 10分:满足"具体要求"中的1);

  • 15分:满足"具体要求"中的2);

  • 15分:满足"具体要求"中的3);

  • 40分:满足"具体要求"中的4)。

二.思路分析

本题只有1个角色,就是卡通小人,如图所示:

比较身高-第15届蓝桥杯第一次STEMA测评Scratch真题精选_第6张图片

本题考查的知识点包括列表操作、数学运算和排序算法。

根据题目的描述,我们使用计算思维中的拆分思想,可以将作品的功能分为4个模块:

  • 随机身高数据

  • 计算平均身高

  • 筛选数据

  • 排序

对于模块1,要求在列表1中随机生成5个不重复的整数。这里的关键是不重复,这就要求每随机一个身高,都需要判断列表1中是否包含该数据,如果包含,则重新生成,直到不包含为止,这通常需要使用”重复执行直到“指令。

模块2则比较简单,可以有两种方式:

1). 在生成身高数据的时候,进行累加,然后将总和除以5;

2). 单独计算,使用循环遍历列表,进行累加,然后将总和除以5;

两种方式各有优劣,方式1比较简单,方式2的代码结构更优,为了让代码结构更加清晰,超平老师选择方式2。

模块3,筛选数据也比较简单,只需要对列表1进行遍历,挨个比较,将小于平均身高的数据插入到列表2中即可。

模块4是排序,也是本作品的难点。关于排序,在之前的真题中出现过多次,比如:

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

  • 《列表排序-第14届蓝桥杯STEMA测评Scratch真题精选》

排序是编程中最常见的基础算法,关于排序的算法也挺多的,常见的经典排序算法有选择排序、插入排序、冒泡排序和快速排序等。

实际上,针对此题中的数据,还有更简单的方式,就是比较法。

本题中的身高在170~190之间,而列表2中的数据在170 ~ 平均身高之间,我们可以让数字从平均身高开始,将其和列表2中的数据挨个比较,如果相等,则说明该数字是最大值,将其移到列表的最前面,否则就不做任何操作。

然后将数字减1,再重复上面的操作,直到所有小于平均身高的数据都处理完,这样就可以将列表2中的数据按照从小到大进行排列了。

思路有了,接下来,我们就进入具体的编程实现环节。

三.编程实现

根据上面的思路分析,我们分5步来编写程序:

  • 初始化

  • 随机身高数据

  • 计算平均身高

  • 筛选数据

  • 排序

1. 初始化

本题的初始化比较简单,包括列表的清空、角色的位置,在角色中编写代码如下:

比较身高-第15届蓝桥杯第一次STEMA测评Scratch真题精选_第7张图片

注意:需要先创建好列表1和列表2。

由于代码较多,为了简化代码结构,也为了方便讲解,超平老师定义了4个自制积木,分别用于实现随机身高数据、计算平均身高、筛选数据和排序,如图:

比较身高-第15届蓝桥杯第一次STEMA测评Scratch真题精选_第8张图片

2. 随机身高数据

根据思路分析,需要创建变量,将其命名为”随机数“,然后随机一个身高,重复判断列表1中是否包含该随机数,代码如下:

比较身高-第15届蓝桥杯第一次STEMA测评Scratch真题精选_第9张图片

这段代码非常经典,专门用于实现向列表中插入不重复数据,其关键点是”重复执行直到“指令的使用。

每次生成的随机数有两种可能性,要么不在列表中,要么在列表中。如果不在列表中,条件不成立,循环结束,直接将随机数插入列表中;如果在列表中,则需要执行循环,重新生成随机数,直到生成的随机数不在列表中,然后再将随机数插入到列表中。

3. 计算平均身高

这一模块相对比较简单,使用循环将列表中的每一项取出来,累加求和,再除以5即可,为了实现这一功能,需要创建3个变量:

  • i,用作计数器

  • 身高和

  • 平均身高

其实现代码如下:

比较身高-第15届蓝桥杯第一次STEMA测评Scratch真题精选_第10张图片

需要注意,这里的平均身高是需要进行四舍五入的。

4. 筛选数据

筛选数据比较简单,仍然是循环遍历列表,将小于平均身高的列表项插入到列表2中,其代码如下:

比较身高-第15届蓝桥杯第一次STEMA测评Scratch真题精选_第11张图片

需要注意,这里的变量”i“和自制积木”计算平均身高“中的”i“是同一个变量。它是计数器,可以反复使用,但是必须要重新初始化,确保每次都是从第1项开始遍历。

5. 排序

最后一步就是排序了,根据前面的思路分析,我们要使用两次循环来实现,其代码如下:

比较身高-第15届蓝桥杯第一次STEMA测评Scratch真题精选_第12张图片

简单说明如下:

1). 内层循环的作用是对于给定的数字,判断其是否存在于列表2中,如果存在,则将其移到到列表的最前面(先删除,再插入);

2). 外层循环的作用则是将数字从平均身高开始,每比较一轮,就将数字减1,直到列表2中所有小于平均身高的数据都处理一遍;

4个自制积木都已经全部实现了,将其连接起来,完整的代码如下:

比较身高-第15届蓝桥杯第一次STEMA测评Scratch真题精选_第13张图片

至此,整个作品就创作好了,你可以运行程序多测试几遍,看看效果如何吧。

四.总结与思考

本题是中级组编程部分第5题,分数为80分,积木块数量70个左右,涉及到的知识点主要包括:

  • 列表的基本操作,包括插入和删除;

  • 遍历列表;

  • 循环编程,尤其是两层循环;

  • 运算符,包括随机数、四舍五入、连接字符串、不成立等;

  • 排序算法;

这是中级组的第5题,题目有一定的难度,完成时间20分钟左右,难点是如何实现列表的排序。

在实际编写程序的时候,很多同学习惯性地将所有代码都写在一起,从效果上来看,当然是没什么问题的。但是在编程的过程中,比较容易出错,一会儿在这里加点代码,一会儿在那儿删除代码,操作起来很不方便。

所以,超平老师强烈建议你使用模块化的思想,将其拆分成4个不同的模块,并使用自制积木分别实现。如此一来,代码的结构更加清晰,编程的时候也不容易出错,操作起来也非常方便,一举三得,何乐而不为呢,你说是吧。

超平老师给你留一个思考题,除了上面介绍的排序算法之外,你还知道哪种排序方法呢,可以编程实现吗?

如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香

需要素材和源码的,可以移步至“超平的编程课”gzh。

你可能感兴趣的:(蓝桥杯Scratch真题,蓝桥杯,少儿编程竞赛,scratch,STEMA测评)