“双一流”下的C语言程序设计教学探索
2019-06-19杨旺明
杨旺明
(三峡大学,湖北宜昌 443002)
C 语言是计算机程序设计中常用的基础的教学课程。目前高校C 语言程序设计的教学以讲授知识点为主,采用老师讲解知识点,对应程序演示及上机练习的模式。这样教学模式能帮助学生掌握对应的知识,基本上能实现对应的习题练习。一个学期下来,对于编程学生存在着以下问题缺少实际问题的解决能力。所学习的知识点语法可以进行一些理论学习和实践,能阅读或编写简单代码,针对具体问题往往束手无策。
缺少综合问题解决基本处理能力,缺少将问题总任务进行分析分解成若干个子问题,完成子问题从而解决总任务能力,进而编写出对应的程序。或者,即使找到一种解决方案,但将代码大部分写在main 函数中,使得程序的调试变得困难,以至逐渐丧失编程兴趣。
有鉴于此,本文提出设计应用型问题作为教学案例,将知识点融合到案例中,采用软件工程方法解决综合问题,进而提高学生编程能力,提高C 语言程序设计的教学效果。
1 教学需求
应用型人才的需要培养学生分析问题能力,解决问题及动手编程能力,能在将工作岗位中能适应项目驱动开发。C 语言教材中一般来讲皆是给知识点为章节,每个章节也有对应示例来讲解对应的知识点。在教学中,我们根据所学的知识点设计一个具体应用实例,涵盖多个章节的知识点,综合训练学生编程能力,激发编程兴趣,提高教学效果。下面就以校历打印为例,逐步实现该问题的解决方案,实现对应的教学内容的学习。
1.1 教学内容
C 语言前面章节讲述的是顺序结构、 选择结构及循环结构。这一部分涉及的知识点有逻辑表达式、if 语句及循环结构for 语句(或while 语句)。通过教材或讲义示例,使学生掌握了闰年判断方法、某年某月天数及for 语句实现循环(如求累加和)等,为了提高综合编程能力,我们引入实际问题作为教学案例,以学校校历打印来激发学生兴趣,培养学生解决问题的综合能力。
1.2 教学案例需求
打印学校一学年的校历。校历见图1。
图1 校历示例图
2 实施细则
2.1 问题分解
校历打印涉及日期处理、 教学周的计算及星期处理,是一个综合型的案例。对于初级编程者而言,该问题比较复杂。当然这里面需要用到的知识点有日期的处理,循环结构的使用,如何才能用程序实现呢? 我们可以用软件工程方法,自上而下进行设计,自下而上的实现。那么问题就变得要简单多了。
按照软件工程学的方法,将总任务分解成几个小任务来完成。如果某个子任务在实现时还有一些复杂,则可以继续分解。从整个结果来看,可以将其分为3 个大部分,即标题部分,教学周及该年该月的周历打印。标题部分比较简单,共两行。教学周的计算是一个循环结构,而该年该月的周历又包括两部分,其一是计算该年该月有多少天,其二是打印出该年该月的位置。计算该年该月有多少天,可以分解为闰年判断和天数计算。而打印该年该月的1日又可以分解为计算该年该月的1日是否教学周并计算该年该月的1日是星期几。通过这样的方法分解成子问题后,每个子问题就可以对应相应的知识点来编程实现。
2.2 任务实现
通过上面的分析和分解,按照软件工程学方法,自下而上逐个实现。问题明朗后,教师对所涉及的知识点进行点拨,学生就可以分别根据所学知识来完成。涉及闰年判断和天数计算,学生在学习逻辑表达式及选择结构时已经掌握了,实现相对容易一些。计算该年该月的一日是星期几是根据已经知道1900年1月1日是星期一来进行推算的,推算分两个部分,其一按年计算,其二是按月计算,星期几可以使用C 语言中的求余运算%来实现。经过这样分析分解后,容易编写对应函数,如下所示:
/*某年某月第一天是星期几
已知1900年1月1日是星期一
*/
int firstDayMonth(int y,int m){
int i, weekday;
weekday = Monday;
/* 以年为单位按天算是星期几*/
for(i=1900; i //每一年以365 天计 weekday = (weekday + 365) % 7; //如果该年i 是闰年就加多1 天 if (isLeapYear(i)){ weekday = (weekday+1) % 7; } } /* 以月为单位按天算是星期几*/ for(i=1; i weekday = (weekday + getDaysByYearMonth(y, i) )% 7; } //printf("%d-%d is %d
", y,m,weekday); return weekday; } 同样的方法,对计算该年该月的1日是否是教学周的开始,只需要比较一下日期是否等于指定开学的日期,使用语句即可,如下所示: if(y == beginDate[i].year && m==beginDate[i].month&& d==beginDate[i].day) 计算出该年该月的第一天是星期几后就可以让该年该月的1日出现对应星期列,前面用空白填补,用典型的循环结构中嵌套选择结构即可。 通过该案例,可以帮助学生理解逻辑表达式及选择结构与循环结构使用等知识点,在解决实际问题的过程中,提高学生编程能力与兴趣,整个案例的实现过程中,学生查阅相关资料并相互之间进行讨论分析,有的学生还对结果进行了改良,进一步培养了学生的创新精神,取得很好的教学效果。 通过一学期的案例尝试,极大地调动了学生编程兴趣及实践能力。实践表明,通过案例特别是综合案例的引入,极大提高了C 语言程序设计的考试成绩,学生的C 语言二级通过率也有很大的提高。 在本文中,我们提出高校校历制作的教学案例,改善传统教学模式下学生解决实际问题及综合问题能力的不足,培养学生动手能力,提高教学效果。2.3 案例效果
3 结论