非计算机专业《C语言程序设计》循环结构教学用例探讨

2017-04-18 11:59夏芸陈传明俞庆英
电脑知识与技术 2016年35期
关键词:C语言程序设计C语言程序设计

夏芸+陈传明+俞庆英

摘要:《C语言程序设计》一般是高校非计算机专业理工类学生的公共基础课程,在教學中普遍存在学生学习积极性不高、学习目标盲目、编程思维欠缺等问题。该文探讨C语言程序设计课程中循环结构教学用例的设计与实施,通过这些用例帮助学生掌握循环结构的基本语法知识和编程方法,使用循环结构解决实际问题。教学实践表明所设计的教学用例可以激发学生的学习热情、帮助学生快速掌握循环结构的基础知识和编程技巧。

关键词:C语言;程序设计;教学;循环结构;课堂用例

中图分类号:G642 文献标识码:A 文章编号:1009-3044(2016)35-0163-03

Research on Cycle Structure of Teaching Cases in The Course of C Language Programming for Non-computer Major

XIA Yun, CHEN Chuan-ming, YU Qing-ying

(School of Mathematics and Computer Science, Anhui Normal University, Wuhu 241003, China)

Abstract: C language programming is a common course in some universities for the students of non-computer science and engineering major, and in the teaching there are many problems such as the students have little interest and no goal in learning, and they are lack of programming thinking, etc. It mainly discusses the teaching design and implementation of teaching cases about cycle structure in this paper, which can help the students to grasp the basic knowledge about cycle structure, and can solve problems by using the knowledge of cycle structure. Teaching practice proves that the design of teaching cases can stimulate the students study interest of learning programming and can help the students quickly grasp the basic knowledge and programming skills of cycle structure.

Key words: C language; programming; teaching; cycle structure; teaching use cases

1 背景

《C语言程序设计》课程作为高校大一学生的公共基础课开设,希望通过这门课程的学习,培养学生的计算思维能力,激发学生对于程序设计语言的兴趣,让学生掌握一些基本的算法,会使用C语言编写程序解决问题。

在实际教学过程中,随着教学内容的不断深入,非计算机专业的学生由于时间投入不够、重视程度不高等原因,会觉得内容越来越难,从而丧失学习的兴趣,导致学习困难。因此,教学中有必要通过适当的教学手段来吸引学生的学习注意力,激发学生的兴趣。本文主要针对《C语言程序设计》中循环结构程序设计的教学用例进行探讨,设计用例模拟实际生活场景,吸引学生的注意力。

2 循环结构教学用例的设计

作者在《C语言程序设计》公共基础课的实际教学过程中,发现在循环结构教学中如果仅仅将普通计算题作为例题讲解,学生的兴趣一般不大;若使用现实生活中的一些例子,学生的学习兴趣会有很大的提高。在教学中,作者使用程序模拟孩子做错题后被妈妈罚做题的生活例子,引起学生浓厚的好奇心和学习兴趣。

2.1 循环次数确定的例题设计

在学习循环结构程序设计时,循环次数确定的程序相对来说比较容易掌握。在教学时,作者先介绍while语句的语法结构,再以while语句进行编程讲解。接着介绍for语句的语法结构,最后用for语句对原先的while语句程序进行替换。

问题场景1:一个孩子学习了整数加减运算,但是作业的错误率比较高,因此,妈妈决定让他进行20题的专项练习,妈妈报题,孩子答题,妈妈再对孩子的答题情况进行批改。请用程序模拟孩子做20题,及对他的答题情况进行批改这个事件。

提出这个问题后,教师在课堂中积极引导学生思考如下问题,问题1:对于单独一个题目,如何解决妈妈报题、孩子答题、妈妈批改这样的过程;问题2:问题1描述过程中的出题、答题、批改,需要重复20次,这如何解决。教师可以在教学过程中积极引导学生使用所学习的while语句先解决问题2,给出如下所示的算法设计。

Step 1: 设置循环计数器cnt=1;

Step 2: 当cnt<=20时,重复执行如下操作:

Step 2.1: 妈妈出题;

Step 2.2: 孩子答题;

Step 2.3: 妈妈批改;

Step 2.4: 循环计数器cnt增1。

再用while语句来表示该算法,如图1所示。

给出图1所示的算法后,教师在课堂上需要引导学生思考前文中所提问题1的解决方法,即如何用程序设计语言实现妈媽报题、孩子答题、妈妈批改这样的操作。

教师可以引导学生去思考“妈妈出题”这个操作,实际上就是获取题目,也就是题目的输入问题,这在C语言中可以用输入函数scanf()完成,让学生观察输入题目的格式,从而得出关于题目描述需要两个int型变量czs1和czs2及其一个char型变量ysf,分别表示两个运算数和一个运算符,相应得出如下语句:scanf("%d%c%d",&czs1,&ysf,&czs2);。

教师再引导学生思考“孩子答题”这个操作,是否类似于刚才的“妈妈出题”操作,实际上就是获取孩子的答案,可以很快的得出如下结论:孩子的答案保存于int型变量reply中,实现的语句是scanf("%d",&reply);。

最后“妈妈批改”这个操作实际上就是将题目的正确答案与孩子的答案作比较,若相同则输出“正确”,否则输出“错误”。正确答案用int型变量key来表示,则批改操作可以用如下语句实现:

if (key==reply)

printf("正确\n");

else

printf("错误\n");。

此时,让学生思考:上述if-else语句执行前,变量key如何赋值?

此例题可以让学生培养循环次数确定时的算法设计,熟悉循环结构语句,练习格式化输入语句scanf,以及选择结构编程语句if-else语句的使用。让学生了解如何用编程语言模拟现实的操作。

2.2 循环次数不确定的例题设计

基于问题场景1解决的基础上,提出问题场景2:一个孩子学习了整数加减运算,但是作业的错误率比较高,因此,妈妈决定让他进行专项练习,妈妈报题,孩子答题,妈妈再对孩子的答题情况进行批改,妈妈批改时发现孩子做对5题就结束练习。请用程序模拟上述的场景。

这个问题提出后,教师在课堂教学中积极引导学生思考如下问题。问题1:对于问题场景2而言,孩子练习的题目数是不确定的,这与问题场景1是不一样的,那么结束练习的条件是什么?对于问题1,经过简单的编程题目分析,就可以让学生得出结论:结束练习的条件是孩子做对5题。接下来,教师可以提出问题2:如何知道孩子做对了5题。教师引导学生了解计数器的使用,特别强调计数器需要在使用前需要赋值。因为此处的计数器是用来统计答对题目的数量,因此它的初始值为0。从而,得出如下的算法用以解决问题场景2。

Step 1: 设置计数器correctcnt=0;

Step 2: 当correctcnt<5时,重复执行如下操作:

Step 2.1: 妈妈出题;

Step 2.2: 孩子答题;

Step 2.3: 妈妈批改,如果孩子答对则计数器correctcnt增1。

再用程序设计语句来实现该算法,如图2所示。

问题场景2解决后,接着提出与其非常相似的问题场景3:一个孩子学习了整数加减运算,但是作业的错误率比较高,因此,妈妈决定让他进行专项练习,妈妈报题,孩子答题,妈妈再对孩子的答题情况进行批改,妈妈批改时发现孩子连续做对5题就结束练习。请用程序模拟上述的场景。

在分析题目时,教师要引导学生注意问题场景3与问题场景2的不同之处,要求学生思考问题场景3在设计循环结构编码时循环条件是否要修改,如果循环条件不修改那么应该修改哪些代码,为什么要修改?经过引导,学生会积极地思考如何实现连续做对5题,很容易想到使用计数器correctcnt统计连续答对题的个数,一旦发现孩子答错correctcnt应该置0。从而需要对问题场景2中的答题批改判断代码进行修改,得出如下的代码:

if (reply==key)

{

printf("正确\n");

correctcnt++;

}

else

{

printf("错误\n");

correctcnt=0;

}

这两个例题可以让学生熟悉循环次数不确定时的算法设计,让学生明白程序设计并不是死记硬背代码,应该仔细分析题目,得出问题解决的方案,进一步给出算法,再用程序设计语言实现该算法。

2.3 循环结构使用break语句的例题设计

教师在讲解循环结构break语句的功能后,以问题场景2的程序代码为例,要求在程序中使用break语句退出循环。首先,教师假设在解决问题场景2时因为一时无法确定循环条件,写出了如图3所示的程序代码,让学生分析代码,找出问题,能够分析出该循环是个死循环。

if (correctcnt==5)

break;

通过程序的运行,让学生了解break语句的功能。此外,也可以将此处的break语句改为continue语句,从而让学生了解continue语句的功能,并能很好地与break语句进行区分。

本题的设计不但讲解了break语句和continue语句,而且也让学生了解编写程序解决问题时,因为算法设计时思路不同,写出的程序代码也不相同,所以,在学习过程中并不是生硬地记忆程序代码,而是学会如何设计算法,并用程序设计语言来表述解决问题的步骤。

2.4 课后思考题——课堂例题的延伸

基于上述3个问题场景,教师可以提出问题场景4作为课后思考题。问题场景4:要求将问题场景3中的妈妈出题和妈妈批改操作改为计算机出题和计算机批改操作。实际上,这样的修改就意味着无法使用输入语句“scanf("%d%c%d",&czs1,&ysf,&czs2);”,这需要引导学生思考如何实现让计算机出题。教师可以介绍stdlib.h文件中的两个函数:设置随机种子函数srand((unsigned)time(NULL))和产生随机数的函数rand(),特别需要强调rand()%N产生的随机数的范围是[0,N-1],其中N可以是整型常量也可以是赋了值的整型变量。

一般,学生可以很快地想到两个运算对象czs1和czs2如何生成,但是可能觉得运算符ysf无法自动生成。教师可以引导学生使用rand()%2生成一个随机数,该随机数的取值不是0就是1,那么就可以认为数0代表‘+,则数1代表‘-。

计算机出题问题解决后,要求学生思考:如果生成的题目是减法运算式,那么该减法式的运算结果必须是非负数,应该如何设计程序?这个思考题的提出丰富了课堂例题,引导学生独立思考和解决实际问题,并让学生进一步学习和了解C语言中更多的函数。

3 结束语

本文给出了循环结构教学的4个课堂教学用例和1个思考题,这些用例都是结合日常生活的问题场景,这些场景对于学生而言是比较熟悉的,因此,学生在学习时表现出了较好的学习积极性。此外,这些例题体现了循环结构程序设计时循环次数确定和不确定两种情形,很好地体现了循环结构的特点,让学生由浅入深地逐步掌握循环结构程序设计特点,从而达到培养学生使用循环结构编程求解实际问题的教学目标。思考题既延伸了课堂例题,同时也是对教材知识的扩展,鼓励学生进行相关的课后学习和训练,进一步提高学生的逻辑思维能力和C语言编程能力。

参考文献:

[1] 胡明, 王红梅. 程序设计基础——从问题到程序[M]. 北京: 清华大学出版社, 2011.

[2] 罗永龙, 方群. C语言程序设计[M]. 北京: 科学出版社, 2013.

[3] 俞庆英, 刘莉, 陈传明. 非计算机专业C程序设计教学方法创新[J]. 计算机教育, 2010(20):118-121.

[4] 黎昂, 曾利军, 李泽军. 高校非计算机专业C语言程序设计教学方法探索[J]. 课程教育研究, 2012(19):22-23.

[5] 蒋小莺. C语言程序设计课程教学方法实践[J]. 电脑知识与技术, 2014,10(7):1467-1468.

猜你喜欢
C语言程序设计C语言程序设计
基于Visual Studio Code的C语言程序设计实践教学探索
从细节入手,谈PLC程序设计技巧
基于C语言的计算机软件编程
高职高专院校C语言程序设计教学改革探索
PLC梯形图程序设计技巧及应用
论子函数在C语言数据格式输出中的应用