基于可解释的C语言程序设计教学案例分析

来源 :卫星电视与宽带多媒体 | 被引量 : 0次 | 上传用户:JERONG971
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  【摘要】C语言程序设计是计算机专业的核心专业平台课程,掌握C语言程序设计的设计思想是关键。从一个教学案例出发提出可解释的C语言程序设计的教学思路,希望对C语言程序设计的教学得到一些交流和启发。
  【关键词】可解释性;C语言;程序设计;教学案例
  前言:当前,作为人工智能技术核心内容的机器学习、深度学习已经成为学术界和工业界的一个热门话题。然而,一直以来,基于机器学习、深度学习的模型可解释性很差。因此,仅仅考虑机器学习、深度学习所遵循的 “输入输出满足”原则对某些问题而言可能是远远不够的。追求因果关系是科学研究的一个持续动力,我们应该考虑模型对问题世界的可解释性。
  C语言程序设计的课程教学不仅要充分考虑与计算机组成原理(硬件)、算法、数据结构(软件)的紧密联系,还要注重每个概念、问题背后的可解释性,不让学生陷入“计算机是一个黑匣子”学习误区。本文从一个教学案例出发,提出可解释的C语言程序设计的教学思路,希望对C语言程序设计的教学得到一些交流和启发。
  1. 案例提出
  例题求方程ax2+bx+c+=0的实数解。
  编程如下:
  01 #include<stdio.h>
  02 #include<math.h>
  03 void main()
  04 {
  05 float a,b,c,x1,x2,disc;
  06 printf(“input a,b,c: ”);
  07 scanf(“%f%f%f”,&a,&b,&c);
  08 if (fabs(a)<1e-6)
  09    printf(“The question is not a quadratic”);
  10 else
  11 {disc=b*b-4*a*c;
  12 if(disc<0)
  13 printf(“The question has not real root”);
  14 else
  15 if(fabs(disc)<1e-6)
  16 printf(“The equation has two equal roots:%8.4f,-b/(2*a)”);
  17 else
  18 {x1=(-b+sqrt(disc)/(2*a);
  19 x2=(-b-sqrt(disc)/(2*a);
  20 printf(“The question has distinct real roots:%8.4f,%8.4f,x1,x2”);
  21 }
  22 }
  23 }
  學生提出问题,程序的第08和15行,好像跟自己的理解不一样。学生认为第08行是表示a=0,判别是否为一元二次方程。第15行是判别式disc=0,判别是否有两个相等的实数根,为什么要写成fabs(a)<1e-6和fabs(disc)<1e-6呢?这是一个好问题。
  2. 案例解释:C语言中“0”的认识
  这个问题可以归结为C语言中的“0”的认识问题。作为“0”,在计算机的内存中、输入、输出时将以怎样的形式存在?首先,我们思考一下,计算机是一个资源有限的机器。因此,对于仅有的CPU、内存等资源管理十分严格。其次,我们先前定义了变量int m;这是给变量m定义一个变量类型,给变量x分配内存空间大小;还有变量名m是给变量一个存取的地址。
  接下来,我们看第05行我们定义了变量a,disc是float类型变量,输出是%f格式。再看一下%f对应的输出格式表示什么?表示按小数形式输出十进制实数(单精度),并输出6位小数。
  总之,在C语言中“0”的存在形式是这样的,绝对值小于10-6 的实数是被认定为“0.000000...”。这就是对变量的值在计算机的内存中如何存、如何取、如何输入、如何输出的解释。
  3. 解释的循环
  实验设计 在Dev_C++6.0平台验证“0”的输入输出及其表示。
  编写程序:
  #include<stdio.h>
  void main(  )
  {float a,b,c,d;
  printf(“print a,b,c,d:”);
  scanf(“%d%d%f%f”,&a,&b,&c,&d);
  printf(“%d%d%f%f”,a,b,c,d);
  }
  验证输入:0.0001,0.00001,0.000001,0.0000001
  验证输出:0.000100,0.000010,0.000001,0.000000
  正如我们所思考的一样。绝对值小于10-6 的实数是被认定为“0.000000...”也即是“0.000000”。
  4. 解释再循环
  我们似乎达到了完美的理解,得到很好的解释,可是我们还是看看“0”表示的边界在哪里?于是我们又做了一次验证设计。
  验证实验1:
  验证输入:0.0000004,0.0000005,0.0000006,0.0000009
  验证输出:0.000000,0.000000,0.000000,0.000000
  似乎再一次验证了我们的想法。可以当我们进行下面的验证时,情况变得不可解释了。   验证实验2:
  验证输入:0.0000009,0.0000009,0.0000009,0.0000009
  验证输出:0.000001,0.000000,0.000000,0.000000
  这又变得不可解释了,我们继续讨论,最后决定换一个开发平台实验。
  5. 换个开发平台实验
  我们换到开发平台Eclipse+MinGW GCC上验证实验。
  验证实验3:
  验证输入:0.0000009,0.0000009,0.0000009,0.0000009
  验证输出:0.000001,0.000001,0.000001,0.000001
  这个结果让我们觉得可以理解,四舍五入就可以解释了。而且这与条件限制相互也不矛盾。反思在浮点类型的数据里,计算机的平台不同,对于浮点型数据的表示不同。
  6. 教后反思:基于可解释的课程教学
  从这个案例出发,我们可以看出基于可解释的教学是可能的。特别是计算机的课程,不能把计算机变成一个不可解释的“黑匣子”,变成一个神秘所在。运用解释学的方法,在教师与课程文本之间建立理解、師生之间建立理解和对话的关系。教师与课程设计者之间不应该是单独的课程工作者,而是以合作者身份共同参与课程的开发和实施。解释一直是人类存在的方式,其根本特征是对为什么(Why)问题的解答。当构成问题和解答的命题具有经验可检验性并且为真,而解答与问题之间在科学上具有解释相关性时,这才能称之为科学理解,相应的解释称为科学解释。教师要与学生一起“对话”,共同承担科学理解的任务,一起来体验、认识和理解计算机的局限性,人的局限性,课程文本教材的局限性,更加深刻的理解人类创造的艰辛和伟大。教师作为反思性的实践者,在科学文本教学时,可以参考可解释的哲学,把教学改革推向一个新的科学高度。
  参考文献:
  [1]张长水.机器学习面临的挑战[J].中国科学:信息科学,2013,43(12):1612-1623.
  [2]杨路明.C语言程序设计教程(第3版)[M].北京:北京邮电大学出版社,2015.
  [3]张志林.科学解释与理解类型[J].科学技术与辩证法,2003(03):29-31+43.
  [4]王凌超,吴乐娇.理解与对话:从哲学解释学视角透析教师与课程的关系[J].淄博师专论丛,2019(01):15-18.
  作者简介:余红宴(1971— ),男,湖北黄冈,副教授,博士。现主要从事工程教育方向的研究。
其他文献
龙眼(Dimocarpus Longan Lour)属无患子科(Sapindaceae )龙眼属,是我国南方诸省较重要而有特色的一种热带亚热带木本果树。由于龙眼合子胚遗传背景复杂,童期长,阻碍对其胚胎
贫困最初指物资不足难以生存,例如食物、衣服等方面。后来发展到包括精神上的贫乏。贫困人群在医疗卫生、教育、安全、住房等方面也不能得到充分保证。我国人口众多,地区差异较大,这些年来一直致力于减少农村贫困人口,维护民族团结与和睦,实现共同富裕一直是我们的社会主义目标。作为世界第二大经济体,近年来,我国的经济发展水平在不断提高,改革开放以来在党的带领建设下,经济发展水平稳步上升,形势一片大好。而为了完成到
六光幕阵列天幕立靶是测量速射武器连发弹头着靶坐标的主要设备。针对现有光幕阵列理想模型下测量不确定度分析无法满足其工程实际中测量需求的不足,在理想模型和工程模型下
宅基地是农民安身立命的根本,关系到每一个农民的生存权益。我国现有法律主要规定的是一定条件下的宅基地无偿使用制度,但现阶段由于我国城镇化的逐步推进,土地资源走向稀缺
名师工作室作为能够发挥名师的辐射作用、培养名师、提高教师专业素质的重要教师学习型组织,现在我国中小学教育领域受到极大的关注。从2002年中国成立第一个名师工作室以来,
从语义语言的角度提出一种利用统计语义单元识别中文人名的方法.在该方法中没有词的概念,一切单位都是语义单元,语义单元有参数和类型等属性.通过语义单元对句子进行语义切分,获
美洲商陆抗病毒蛋白(Pokeweed Antiviral Protein,PAP)是从美洲商陆(Phytolacca americana)叶片或种子分离出的一类碱性蛋白,分子量29-31KD。PAP是典型的单链核糖体失活蛋白,它
在体绘制中传递函数将体数据转换成光学参数,因此体绘制的效果直接由传递函数决定.本文提出了基于多尺度等值面设计传递函数的高效方法.该方法通过梯度阈值提取边界体元来简化数据场,然后将提取等值面的目标函数的计算化简为累加的拉普拉斯加权的直方图极值的计算.最后对直方图进行多尺度平滑,利用提取出的多尺度等值面来设计高斯型传递函数,提高了等值面的准确度和传递函数的设计效率.