下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 基于计算思维的c程序设计教学实践研究 摘 要:文章源于教育教学实践,通过对计算思维起源做了简要阐述,并选择了计算思维的核心要素:抽象和自动化;从洞察思维过程层层细化、问题需求层层拓展、解决问题算法层层深入等三个方面着手,通过线下课程细节,如数值的比较、数组的引入、素数算法等展现在c语言程序设计课堂中如何将计算思维有效融入,如何开展计算思维融入程序设计课堂教学的实践研究。關键词:计算思维;程序设计;算法:tp312;g642 :a :2096-4706(2020)04-0105-03abstract:b
2、ased on the practice of education and teaching,this paper briefly expounds the origin of computational thinking,and selects the core elements of computational thinking:abstraction and automation;from three aspects of insight into the process of thinking layer by layer refinement,problem demand layer
3、 by layer expansion,problem-solving algorithm layer by layer in-depth,through offline course details,through the comparison of numerical value,the introduction of array,the prime number algorithm and so on,it shows how to effectively integrate the calculation thinking into the c language programming
4、 classroom,and how to carry out the practical research on how to integrate the calculation thinking into the programming classroom teachingkeywords:computational thinking;programming;algorithm0 引 言自周以真提出计算思维后,以计算思维为导向的教学改革在国际上悄然兴起,我国2017年推出的普通高中信息技术课程标准(2017年版)已将计算思维作为信息技术学科的核心素养之一。目前,学术
5、界尚未在计算思维的内涵、教学内容、教学工具、测评工具等方面达成相对统一的共识,但多数学者认为计算思维的本质核心是抽象和自动化。抽象是把现实问题的核心抽离出来的过程,关注现实对象的本质特征;自动化是指计算过程在现实系统运作中的所采取的表现形式,如何有效地高效地自动化是计算思维的重要问题。自上世纪80年代,全国各院校相继开设了计算机相关课程。c语言程序设计作为一门必修的入门课程,被广泛采用。基于“计算思维”的c语言课程教学模式,将不再偏重语法,而是将重点放在思维训练上,课堂上以问题求解为核心。教师的授课重点放在问题求解思路、算法和程序实现上。以计算思维为导向的教学改革,根据汪红兵等的提法,分析和梳
6、理了c语言程序设计各章节知识点及其对应的计算思维培养点,“程序是对实际系统的抽象,c语言程序开发过程是对系统建模的过程,算法过程体现了计算思维的自动化”,比如说,数据类型是实现抽象的载体,c语句是自动化实现的基本单位,函数体现了模块功能的抽象,控制结构是对问题求解步骤的抽象和自动执行单位。笔者根据c语言教学经验总结,尝试基于“洞察思维、问题需求、解决算法”三部曲,将计算思维融入程序设计课堂,进行计算思维融入c程序设计课堂的初探。1 洞察思维层层细化在c语言教学的第一节课,笔者提问了学生们两个问题:“你们知道计算机是如何思维的吗”“你们知道自己是如何思维的吗”,面对着两个问题,同学鸦
7、雀无声。一方面可能还不理解思维是什么,另一方面思维的确难以言表。笔者在课堂上做了个实验,在屏幕同时展示随机10个自然数(比如3、7、12、24、8、21、20、5、16、13)后,然后请同学们迅速说出最大值和最小值,同学们立刻异口同声说出了最大值24,最小值3。这时继续提问上面的问题,换了方式,“你们怎么得出最大值24,最小值3”,同学们依然欲言又止,对于在10个数字中找出最大值和最小值,对于他们来说是显而易见的事;然后在屏幕上继续同时展示了100个随机自然数,请他们说出最大值和最小值,此时同学们有点困惑,随着时间慢慢过去,报出来的答案参差不齐;接下来又给同学们依次展示100随机整数,展示完就
8、要求得出最大值和最小值,这次同学们在最后一个数字出现之后,便再一次异口同声地报出了正确结果。通过上面的例子,说明在一些简单问题上,很容易忽略具体的思维过程。然而让计算机通过程序设计来解决的实际问题,往往是简单问题的巨型化。上述案例说明了计算机如何比较多个数中的最大值和最小值,其本质就是数值的两两比较,对于微小数据量的比较,人类往往忽视过程,当出现较大数量级的时候却有时手足无措。正如周以真指出:计算思维是运用计算机科学的基础概念进行问题求解、系统设计和理解人类行为,是通过约简、嵌入、转化和仿真等方法,将一个看来困难的问题重新阐述成一个我们知道怎么解决的问题。为此在c语言程序教学中,对于经典的程序
9、算法等,需要引导同学剖析思维过程,比如质数的算法、水仙花数的算法等。2 问题需求层层拓展通过对问题需求层层拓展,帮助学生建立已有概念的知识链,达到巩固已有知识和引入新知识的目的,实现优化抽象建模和自动化水平,发展计算思维水平的目的。例如在数组的教学引入中:设计一个程序,输入要求某班10位同学某门课程的分数,最后打印出总分。根据学生们已有的知识和编程技能,很容易建立抽象模型int score=0; /存储分数的变量,long sum = 0l; /总分数,float average = 0.0f; /平均分;以及实现自动换解决方案:for(int i=0;i<10;i+) pr
10、intf("enter score:");scanf("%d",&score);/从键盘读入一个分数sum += score;/将读入的分数加到总分数里面此时教师对实际需求进行第一次拓展,形成与已有解决方案的冲突,要求同时输出10位同学的最高分和最低分,引导学生深入思考,发现该方法只保留了最后一个学生的分数。因此,如果在此程序的基础上继续求最高分和最低分是行不通的。此时,同学们重新建立抽象模型和优化自动化过程,应用到了数值比较大小的算法思路,int max = 0; /存最大值int min = 100; /存储最小值,程序做了如下调整:for(
11、int i=0;i<10;i+) printf("enter score:");scanf("%d",&score);/从键盘读入一个分数sum += score;/将读入的分数加到总分数里面if(score>max)max= score;/保证max中存储分数最大值if(score< p>此方法虽然能解决最高分和最低分的问题,但除了最高分、最低分以及最后一位同学的分数,其他学生的分数全丢失了,这与现实不符,也不利于后续的排序计算等,接着教师对现实需求进行第二次拓展,要求保留所有学生信息,并为后续计算做好准备,有学生可能会
12、使用多个变量存储分数:int score0=0,score1=0,score2=0,score3=0,score4=0,int score5=0,score6=0,score7=0,score8=0,score9=0;但随着学生数量的增加,此种抽象显然欠妥,再者也不便于for循环自动化的进行,教师继续制造已有方案与需求之间的冲突,引导学生计算思维发展,改进抽象模型和自动化过程,从而引入新的抽象模型数组。3 解决问题算法层层递进讲解编程例题时,解决同一问题的方法要层层递进,通过不断优化算法,引导学生不断思考,帮助学生不断扩展认知水平,实现优化抽象建模和自动化水平,发展计算思维水平的目
13、的。例如:在讲解判断并输出100以内所有素数例题。根据素数的定义,因为素数除了1和本身之外没有其他约数,所以判断n是否为素数,最直观的方法:根据定义直接判断从2到n-1是否存在n的约数即可。for(int i=3;i<100;i+)for(int j=2;j<99;j+)if (i % j = 0)break;/遇到可以整除的数,即跳出内层循环,说明此i不是素数elsereturn true;/自然结束内层循环,说明此i是素数上述自动化方法存在算法时间效率低下的问题。对于每个正整数n,其实并不需要从2判断到n-1,根据数学经验可知,一个数若能进行因数分解,那么分解时得到的两个因数一
14、定一个小于等于sqrt(n)(其算术平方根),一个大于等于sqrt(n),据此,上述方法中并不需要遍历到n-1,只需遍历到sqrt(n),因为若sqrt(n)左侧找不到约数,那么右侧也一定找不到约数。以此引导学生进行算法优化;优化算法如下:for(int i=3;i<100;i+)for(int j=2;j<=sqrt(i);j+)if (i % j = 0)break;/遇到可以整除,即跳出内层循环,说明此i不是素数else return true;/自然结束内层循环,说明此i是素数此时的算法时间复杂度已经有所降低,同时学生理解起来难度也不大。到这一步已
15、经适合大多数学生对素数求解的算法优化需求。但此时仍需要给学生一个认知的拓展空间,引导学生认识到在算法优化的道路上永无止境,随着认知水平的提升,可能会设计出更巧妙的算法过程。通过观察素数分布的规律发现,超过5的素数有这样的规律:与6的倍数相邻。例如5和7,11和13,17和19,23等;此时若能给出学生能够容易理解的证明最好,例如:令x1,将大于等于5的自然数表示如下:6x,6x+1,6x+2,6x+3,6x+4,6x+5可得,不在6的倍数两侧,即6x两侧的数为6x+2,6x+3,6x+4,由于2(3x+1),3(2x+1),2(3x+2)它们不可能是素数,再除去6x本身,素数显然只可能出现在6
16、x的相邻两侧。注意,在6的倍数相邻两侧并不一定就是素数。根据以上素数的分布规律,判断素数可以6个单位步长,即将优化算法循环中i+步长设置为6,代码如下:if (num = 2 or num = 3)/ 两个较小的数进行处理return true;if (num % 6 != 1 and num % 6 != 5)/ 不在6的倍数的两侧的一定不是素数return false;temp = int(sqrt(num);for(int i=2;i< p>if (num % i = 0 or num % (i+2) = 0)return falsereturn true / 剩下的全是素数通过不同难度算法的层层递进,使得不同层次的同学都能找到适合自己的建模需求和自动化过程,这样既满足了不同学生的需求,也在各层次学生中融入了计算思维。4 结 论文章从思维过程、问题需求、问题算法等三个方面着手,通过课程细节,展现在c语言程序设计课堂中如何将计算思维有效融入,如何开展计算思维融入程序设计课堂教学的实践研究。此外,注重采用多种方法来解决同一问题;在教学过程中通过逐步改变条件或增加条件的途径来拓展案例;在教学过程中注重从问题分析开始到算法流程图设计,再到程序设计完整地讲解一些典型的c程序设计例题等等也是很多研究者尝试的途径。参考文献:1 王立翔.基于计算思维
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 职工工作会议的演说词(3篇)
- 服装销售年度工作总结范文
- 小学班主任学期工作计划(18篇)
- 期末国旗下的讲话稿(31篇)
- 跟踪审计方案
- 清廉家风最美家庭事迹材料(3篇)
- 新教材高考地理二轮复习三10个长效热点综合专项训练热点1局部气候与环境含答案
- 24.1 一元二次方程 同步练习
- 统编版四年级上册语文第一学期期末考试卷(三)(含答案)
- 黑龙江省牡丹江市2024-2025学年高三上学期11月期中英语试题(含解析含听力原文无音频)
- XX电站接地装置的热稳定校验报告(220kV)
- 涉警舆情培训课件模板
- 养殖行业背景分析
- 马戏团活动方案
- 政府会计童光辉课后习题答案
- 当代大学生幸福感课件
- 张剑简要的创业计划书
- 钢筋工程量计算规则
- 2024年江西赣州城投工程管理有限公司招聘笔试参考题库含答案解析
- 五年级科学 《光的反射》 一等奖
- 人力资源各维度分析报告
评论
0/150
提交评论