• 闰年计算-第13届蓝桥杯Scratch选拔赛真题精选


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

    蓝桥杯选拔赛每一届都要举行4~5次,和省赛、国赛相比,题目要简单不少,再加上篇幅有限,因此我精挑细选了一部分题目进行解读。

    第13届蓝桥杯青少年组第1次选拔赛于2021年8月14日举行,形式为线上考试。Scratch分为初级组和中级组,其中初级组面向7~10岁孩子,中级组面向11~14岁孩子。

    闰年计算,本题是2021年8月14日举行的第13届蓝桥杯Scratch选拔赛真题编程第5题,初级组和中级组都有此题,题目要求编程计算玩家输入的年份是闰年还是平年,输入的月份有多少天。

    先来看看题目的要求吧。

    一.题目说明

    背景信息:

    每年的 1、3、5、7、8、10、12 月都有 31 天; 4、6、9、11 月都有 30 天;2月比较特殊,公历年份能被4整除的是闰年,其他是平年,例如2020年是闰年,2021年是平年。平年的2月有28天,闰年的2月有29天。

    编程实现:

    运行程序,在对话框输入年份与月份,并说出输入年份为平年还是闰年,输入月份有多少天。

    具体要求:

    1). 点击绿旗,询问请输入年份并出现对话框;

    2). 说出输入年份为平年还是闰年(年份大于2001,小于2040);

    3). 询问请输入月份并出现对话框(1-12);

    4). 说出输入月份有多少天; 

    5). 完整说出刚才输入年份为平年或闰年,输入月份一共有多少天。

    评分标准:

    • 5分:满足要求1);

    • 5分:满足要求2); 

    • 6分:满足要求3); 

    • 7分:满足要求4); 

    • 7分:满足要求5)。 

    二.思路分析

    本题只有1个小狗角色,舞台背景和角色分别来自于Scratch3.0自带的背景库和角色库,如图所示:

    闰年分为普通闰年和世纪闰年,其判断方法为:公历年份是4的倍数,且不是100的倍数,为普通闰年。公历年份是整百数,且必须是400的倍数才是世纪闰年。有一个简单的十二字口诀:四年一闰、百年不闰、四百再闰

    比较特殊的是世纪年份,比如1900年不是闰年,而2000年是闰年。题目给出的年份范围是2001~2040,不包括世纪年份,如此一来,只需要判断输入年份能否被4整除,如果能整除就是闰年,否则为平年。

    本着严谨的态度,我这里还是给出完整的解决方案,即不限年份。其实就是两种情况:

    • 普通闰年

    • 世纪闰年

    对于普通闰年,只需要同时满足两个条件,一是能被4整除,二是不能被100整除。对于世纪闰年,只需要满足一个条件,即能被400整除。

    两种闰年之间是或者的关系,使用逻辑或进行运算即可。

    如何判断某个月份有多少天呢?

    每个月的天数基本上是固定的,一个比较巧妙的方法是将12个月份的天数使用列表保存起来,如图:

    有了这个列表,要获取某个月份的天数就非常简单了,列表编号刚好对应于月份,需要特殊处理的是2月份,这里保存的是平年的天数,即28天,如果是闰年,2月份有29天。

    三.编程实现

    根据题目描述和思路分析,我们可以分4步来编写程序:

    • 初始化列表

    • 判断闰年还是平年

    • 计算月份天数

    • 说出完整语句

    1. 初始化列表

    根据思路分析,先创建一个列表,命名为“月份天数”,并添加好12个月份的天数,为了方便起见,我们可以创建一个自制积木来完成这项工作,代码如下所示:

    很多同学直接向列表中添加数据,也是可以的,但使用代码方式添加更加安全合理,强烈推荐使用这种方式,不过要注意在添加之前清空列表,避免多次添加。

    2. 判断闰年还是平年

    绿旗被点击时,小狗位于舞台中心,然后开始询问输入年份,当玩家输入年份之后,就需要判断是闰年还是平年了,根据前面的思路分析,编写代码如下:

    简要说明如下:

    1). 为了方便,这里定义了一个变量“年”,用于保存玩家输入的年份;

    2). 判断是否整除就是求余数,因此这里使用的是“a除以b的余数”指令;

    3). 这里的条件比较长,其中前面的两个条件进行的是逻辑与运算,用于处理普通闰年,第3个条件则用于处理世纪闰年的;

    4). 列表中2月份默认添加的是28天,如果是闰年,2月份应该是29天,所以这里对2月份天数做了一个特殊处理,如果是闰年将2月份更新为29天,否则更新为28天。

    3. 计算月份天数

    接着就是询问月份了,这个非常简单,直接上代码:

    为了方便,这里也定义了一个变量“天数”,用于保存当前月份的天数。 

    4. 说出完整语句

    最后需要完整地说出一句话,有的同学就开始犯难了,难道还要再判断一次吗?其实我们可以换个思路,使用分步处理的方法。

    先定义一个变量“完整语句”,用于表示最后要说的内容,绿旗点击时,先将变量设置为空字符串,在判断闰年的时候,根据闰年还是平年分别设置不同的内容,当说出月份有多少天之后,再进行字符串连接即可,在之前的代码块中添加代码如下:

    至此,整个作品就创作完成了,你可以输入不同的年份和月份来测试效果了。

    四.总结与思考

    本题难度系数为4,积木块数量在64个左右,涉及到的知识点主要包括:

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

    • 逻辑运算,包括逻辑与、逻辑或和逻辑非(不成立);

    • 列表的灵活运用,包括列表的清空、插入、获取和替换等操作;

    • 使用取余数指令判断两个数是否能整除;

    • 字符串连接运算,重点是多个连接指令的组合使用;

    • 自制积木的使用。

    本题的难点是判断闰年的条件,如果只是判断2001~2040年之间的年份,则要简单不少,对于大部分孩子来说,应该没有任何难度。其次是关于列表的灵活运用,列表在编程中的作用举足轻重,一定要熟练掌握。

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

    需要素材和源码的,可以给我留言。

  • 相关阅读:
    OpenCV校准棋盘集合
    诊断DLL——周立功模板生成dll文件
    MacOS 下使用 cloud 版 qcow2镜像的最佳实践
    Python数据结构——数组
    OCP集群内的AKO功能测试
    1359. 有效的快递序列数目
    Programming Languages PartA Week5学习笔记——SML进阶与编程哲学
    计算机网络相关知识点(二)
    Android intent的一些小使用
    Cloudreve搭建云盘系统,并实现随时访问
  • 原文地址:https://blog.csdn.net/diamondwang2012/article/details/127863553