软件工程专业《程序设计基础》课程思政课堂教学设计

发布日期:2021-12-08
false本科(1):
课程名称 |
程序设计基础 |
授课对象 |
大一第一学期 |
||
授课内容 | 运算符和表达式 |
课时 |
2.00 |
||
课程类型 | A.思想政治理论课;B.通识课;√C.专业课;D.实践课; | ||||
教学目标 | 1. 能力目标: (1) 能够根据问题场景选择合适的运算符编写正确代码; (2) 能够分析给定代码并给出正确的程序运行结果; (3) 能够在程序中正确的运用强制数据类型转换; (4) 能够编写规范的代码。 2. 知识目标: (1) 能够列举出所有的运算符并举例阐明各个运算符的功能; (2) 能够描述自动数据类型转化的原则; (3) 能够描述多种运算符混合运算的编程规范原则。 3. 思政目标: (1) 培养学生具备“前人栽树,后人乘凉”的奉献意识和精神; (2) 培养学生“精益求精”的工匠精神,树立“科技强国”意识; (3)培养学生具有灵活处理“复杂”问题的思维和能力,具备化繁为简的工程意识。 |
||||
课程思政 | 融入知识点 | (1) 库函数 (2) 数据类型转换 (3)运算符优先级 |
|||
融入方式 | (1) 我们今天科技发展有如此的成绩,正是站在巨人的肩上,这是奉献的力量。程序设计过程中调用第三方或者系统函数库,正是站在巨人的肩上,才能让我们更好地聚焦业务代码,高效地开发出程序,在工作过程中,我们也应该具备这种奉献、共享意识和精神。 (2) 亚利安 5 号(Ariane 5)运载火箭事件,是由于程序中整数溢出导致的。在数据类型转换时要考虑溢出问题和精度问题。对待科学问题要有“精益求精”、“刨根问题”的科学精神和态度。 (3)编程语言中运算符的优先级顺序非常庞大,非常难记的,如果记不清楚,在编程应用中就会导致BUG,这个问题换个角度完全可以使用括号来解决。因此当我们面对复杂问题,要灵活处理,换一种视角和思路,就会“柳暗花明又一村”。 |
||||
思政元素 | 奉献精神 工匠精神 思辨精神 科技强国 行业素养 工程实践能力 | ||||
思政资源 | |||||
思政案例 | |||||
教学实施 | |||||
教学引入 | 在前面的学习过程中我们使用了scanf和printf这两个函数非常方便地实现了输入和输出。大家试想一下,如果系统没有提供这两个函数,我们在编写程序过程中需要自己实现,大家可以想象下,这个工作量有多大。所谓“前人栽树,后人乘凉”,一些经典的算法、标准的接口,前人把他们制式化,做成库函数,那么后来的开发者就可以直接拿来使用,这样可以大大提高开发效率。我们今天科技发展有如此的成绩,正是站在巨人的肩上,这是奉献的力量。小到一个项目,大到一个社会,每个人都应该奉献自己的力量,我为人人,人人为我,这个世界才能更美好。 |
||||
教学展开 | 1:库函数
讲解:库函数的思想
库函数顾名思义是把函数放到库里,就是说是把一些常用到的函数放到一个文件里,供他人用。其他人用的时候把函数所在的文件名用#include <>加到自己的程序里面就可以了。
程序员本身也可以对自己的程序进行“分段”,构造自己的函数,但这些函数我们一般不称之为“库函数”,C语言的库函数一般是指编译器提供的函数。常见的库函数有数学类、字符串操作类、输入输出类等等。
为什么需要库函数?所谓“前人栽树,后人乘凉”,一些经典的算法、标准的接口,前人把他们制式化,做成库函数,那么后来的开发者就可以直接拿来使用,大大提高开发效率。我们今天科技发展有如此的成绩,正是站在巨人的肩上,这是奉献的力量。小到一个项目,大到一个社会,每个人都应该奉献自己的力量,我为人人,人人为我,这个世界才能更美好。
2、讲解 演示:算术运算符
(1)讲解 运算符家族
(2)讲解 演示:算术运算符
讲解:算术,这两个字对我们来说真是太熟悉了,以前是从小学开始学算术,现在从幼儿园就开始学算术了,从简单的加减,到复杂的乘除,都属于算术运算。
C语言的常见的算术运算符有5种,即+-*/%,分别对应数学中的加、减、乘、除和取余数操作,下面我们来实际编程看看这个几个运算符的使用。
演示:演示算术运算符的用法
一边演示一边讲解,同时注意强调编程过程的规范要求。
(3)讲解:算术表达式
用算术运算将变量或者常量连接起来,满足语言语法要求的式子。例子中的c = a + b, c = a – b……都是算术表达式。
(4)讲解 演示:自增、自减运算符
讲解:编程语言中还有一种运算叫自增(++)运算,这是一个单目运算符。何为单目运算符?引入概念:双目运算符、单目运算符、还有我们后面要学习的三目运算符,是根据操作数的不同划分的:
双目运算符的操作数有2个
单目运算符的操作数有1个
三目运算符的操作数有3个
所谓自增就是自己增1,所谓自减就是自己减1:
自增:a++ ++a 等价于 a = a + 1
自减:a-- --a 等价于a = a – 1
自增或自减运算符放在变量的前面或者后面有什么区别呢?讲解PPT上的例子。
讲解对于多个运算符连续出现的情况,系统是如何处理的?
演示: i+++j 等价于 (i++)+j
-i+++-j 等价于 -(i++)+(-j)
但是请注意:在实际编程时,应避免编写此类容易因此歧义的代码,必要时使用括号进行区分。不要将问题复杂化,编程的世界与我们的现实世界一样,“与人方便,与己方便”,写别人更易于理解、易于维护的代码,以“代码”会友,“团结协作”,彰显个人的专业素养。
(5)讲解 演示:数据类型转化
实际编程中如果不同的数据类型碰到一起组成了表达式,结果是什么样的数据类型呢?如果不人为去处理这种特殊的情况,C语言的程序会遵守这样一个原则:自动将精度低、表示范围小的运算对象类型向精度高、表示范围大的运算对象类型转换。
在赋值运算中,赋值号两边的数据类型不同时,编译器会把右边表达式的类型转换为左边变量的类型,这可能会导致数据失真,或者精度降低;所以说,自动类型转换并不一定是安全的。
演示: 大家看这样一个例子:
这就是数据类型在自动转化时造成了数据失真,精度变低。
大家听说过亚利安 5 号(Ariane 5)运载火箭事件吗?这是编程史上臭名昭著的bug之一。1996 年 6 月 4 日,欧洲空间局(European Space Agency,ESA)发射的亚利安 5 号(Ariane 5)运载火箭在法属圭亚那的库鲁发射场发射后仅 40 秒就爆炸了。这枚火箭经过长达十年的研发,耗资 80 亿美元后进行首飞,但这一 Bug 的结果导致了 3.7 亿美元的损失。首飞失败的原因是整数溢出,这是计算机编程中一个普遍存在的错误。有人试图在 16 位空间中设置 64 位数字。所以说,在编程过程中关注每个数字的长度和大小,不要随意进行混合类型赋值,对数据关系进行细致的分析,养成“精益求精”的开发习惯。只有这样,你才能成为一个优秀的软件工程师,未来通过你的技术为国家的繁荣富强贡献自己的力量。
讲解强制类型转化:C语言提供强制类型转化,将数据类型转化成你想要的类型,上面的例子可以使用强制类型转化解决数据失真的问题。
(6)实践:给定一个三位数,通过编程分别输出个位、十位、百位。
教师讲解思路,学生进行编码实践。
3、讲解:关系运算符
(1)讲解:关系运算符也称为比较运算符,就是用来比较两个值(或表达式的运算结果)谁大谁小,相等还是不等于的问题。
在编程中如何使用比较运算符呢?之前讲过数学思维和编程思维,在编程的世界中,不是让我们去比较两个值(或表达式的计算结果)究竟谁大谁小,相等或者不相等,二是用于当满足某种条件时,会怎么样?
譬如在计算器中,当你输入“+”号时,我们要对两个数做加法运算,当我们输入“*”时,我们对两个数做乘法运算,这时候我们就用到了比较运算符。
初学者对于关系运算符很容易陷入一个误区,就是使用数学思维,以为是让我们做一道数学题,去判断两个数的大小,而在编程的世界中,往往用关系运算符做条件,这一点要给学生讲明白。
(2)讲解:关系表达式,用关系运算符将运算对象连接起来的式子,运算对象可以是值也可以是表达式。
(3)讲解:关系表达式的结果是逻辑值,即真或假(对或错)。在C语言中用 0 或者1表示,满足逻辑条件即为1,不满足则为0。
(4)特别注意: 当关系表达式中含有多个关系运算符时,与数学上的表达方式是有差别的。 6>x>-3 X>-3&&X<6
(5)演示: 输入一个整数,求这个整数的绝对值。
4、讲解 演示:逻辑运算符
(1)讲解: 逻辑运算符
何为逻辑?举个例子,有两个条件(命题)“我有空”和“天气好”,我们可以通过不同的逻辑连接词把这两个条件(命题)连接成更复杂的条件,譬如:“我有空,且天气好”,“我有空或天气好”,“天气不好”……
在C语言中,用几个符号来表示这种逻辑关系,即“逻辑与”、“逻辑或”以及“逻辑非”,&& || !。通过逻辑运算符连接起来的式子就是逻辑表达式,
接下来通过一个例子具体看下逻辑运算符是如何应用的。
演示 实践:输入一个年份,判断是否是闰年。
教师先进行演示,再让学生进行编码实践。
5、讲解 演示:条件运算符
(1)讲解:条件运算符又称之为问号运算符,它是一个三目运算符。讲解条件运算符的语法逻辑。
(2)演示: 使用条件运算符计算一个数的绝对值。
6、讲解:赋值运算符
在前面的课程中,我们看到过多个类似于a = 12的这种带“等号”的表达式,在C语言中,“=”不是 数学中的等号,我们称之为“赋值运算符”。所谓“赋值”就是把一个数(一般是常量或者是常量表达式)给一个变量,让这个变量的值等于这个常量或者是表达式的计算结果。
“=”为基本的赋值运算符,赋值运算符与其他运算符结合后称之为复合运算符,譬如,a += b 等价于a = a + b。
特别注意:不一定我们学习了复合赋值运算符,你就得用它,这两种写法虽然不同,但对结果没有任何影响,所以,如果它妨碍了你的理解,可以不用。
7、讲解: 逗号运算符
从左向右,依次对表达式求值,最后得到表达式n 的值就是逗号表达式的值。
特别说明:除了在定义变量的时候我们使用逗号作为‘间隔符’,上面我们讲的这种用法,在实际编程中尽量不要用,为什么?因为它同样增加了程序的复杂度,降低了程序的可读性。
8、讲解 讨论: 运算符的优先级
讨论:如果多个运算符构成一个复杂的表达式,究竟改先算哪个呢?请大家以小组为单位进行讨论,挑选1-2人发表小组意见。
参考讲解:大家先看一下这个运算符优先级的表,试问一下,你能不能记得住?我反正是记不住。即便是你现在记住了,如果真正用的时候又忘了怎么办?有的同学说,百度呗。还有的同学说,我打印出来揣兜里。那多麻烦,其实很简单,大家从小学就知道,四则混合运算,先算乘除,后算加减,有括号先算括号里面的。注意“括号”,我们管它什么优先级,统统加括号不就完了嘛。复杂的优先级问题,通过一个小小的括号就解决了。未来我们可能会遇到更加复杂的工程问题,有时间换种角度,反而是一条捷径,所以大家不要只拘泥于问题本身,多动脑,多思考,多积累,“化繁为简”。 |
||||
教学总结 | 本节课讲解了库函数、各种运算符以及运算符组成的表达式,要求学生能够领会库函数的思想和意义,能够掌握各类运算符的用法,并灵活应用于编程中,能够依据运算符的基本语法规则分析程序。 课堂上通过讲解、演示、讨论、实践等多种活动,引导学生充分参与,学习目标由记忆、理解迈向高层次的应用、分析、评价层面。 课堂上各个环节融入“思政元素”,将“奉献精神”融入库函数,将“团结协作”融入编程规范,将“工匠精神”融入数据类型转换,将“化繁为简”、“灵活多变”融入运算符的优先级,已达成“润物细无声”的思政教学目标。 |
||||
目标达成检测 | (1)知识目标在教学管理平台中通过课堂测试题目进行评价,学生答题,系统自动评分。 (2)能力目标通过课堂编程实践、程序分析、课堂讨论以及课后编程作业进行评价,由教师根据学生完成情况评分。 (3)思政目标通过课堂学生讨论过程、实践过程以及课后作业完成情况进行间接评价。 |
||||
教学反思 | 本节课内容相对较多,知识点比较零散,课堂上学生的实践时间较少,后续课程中可以安排一部分内容进行线上较多,线下课堂重点进行案例演示和学生实践练习,也更容易将思政元素融入其中。 |