前言:想要写出一篇令人眼前一亮的文章吗?我们特意为您整理了5篇c程序范文,相信会为您的写作带来帮助,发现更多的写作思路和灵感。
第二天上机的时候也很快完成了第一步,觉得还行,慢慢来五天完全可以完成。后来也就没怎么好好思考,没想到第二天遇到麻烦了,编不出第二步了。第三天下午也没调试好,第一步输入的数据在第二步统计的时候怎么也数不出来,我从头至尾研究了多次,没发现一点问题,请舍友帮我检查也说没错,到了傍晚还是看不出来。哎!又找一个人给我看了看,竟然错得那么幼稚,类外定义了全局对象,在数据输入put()函数里又重新定义了对象,这样在put()输入的数据无法用到其他函数中,自然统计的时候都是默认值了。
就这么一个小小的错误整得我一天一晚上寝食难安。
编程序时深深感受到要不得半点马虎,有时少一个“}”或“<”都会导致程序语法错误;由于编程序经常要变换输入法,很容易输进中文字符,这也会导致语法错误;调用类里重名函数时要注明属于哪个类的。
第三天的时候第二步基本都编出来了,傍晚那时我没检查出错误来的时候,实在是把我急坏了,借了台电脑,在那安静专心的研究程序,舍友帮我检查出错误来之后,编程序有了感觉,那时已经22:00多了,竟然没有一丝睡意。
后来舍友们陆续睡觉了,可我就是不愿睡。可能是出于自尊心需要,别人都编出来了,自己编不出来,让我无法接受;也可能是第二步出来了急于尽快搞定。从19:00到凌晨4:00一直在那儿编程序了,一次次地听到铃声响竟然没有上床睡觉的冲动,满脑袋只有一个想法:认真编程序,争取晚上搞定。后来差不多了,只有备份不怎么完善,当时电脑已经用了好长时间了,实在不忍心一直用人家的电脑,只好关机睡觉了。
这几天可以说是两耳不闻窗外事,一心只顾编程序了,电话都懒得打,只想尽快把程序搞定,晚上没有电脑用,我们三个女生就去网吧,只是那儿没有vusual-c++,只好作罢。
虽然我们一直在编程序,觉得挺累的,其实还有比我们更累的——我们的老师。我们是每天只有半天的实习时间,可是老师却整天在机房里,看得出来,老师连坐下休息的时间都没有,刚要喝点水,立马就被一个同学叫去了,实习完那天下午看见老师都不想走路了。太累了,一天站7小时,还一直给别人检查程序,太忙了。想想老师这么认真,我们还有什么理由不认真呢?
只有五天的实习,却让我受益匪浅:这不仅是一次对我们的c++掌握和运用的熟练程度的检查,更是一次磨练我们耐性、培养认真态度的机会。这次实习让我深刻体会到“细节决定成败,态度决定一切”;更让我 从 老师身上学到了很多在以后工作中需要的优秀品质。相信这会在我今后的学习和以后的工作很有帮助。
通过完成本次面向对象程序设计的任务,使我熟练和掌握了上学期所学的有关visual c++中的一些主要知识点和应用点,如类的定义,类的实现,对象的定义,类的继承等等。可以所学有所学,所有所用,不至于自己所学知识由于没有经历可用过程,而放弃对它的兴趣。
第一天上课时候听老师讲,第一反应是这可怎么做了。当时有些迷茫。但是事在人为,下午回去之后在宿舍苦心研究,终于在整体上有了一定的把握。我们可以先定义一个基类,再派生三个子类,然后在类外定义函数。有人数规定,我们就定义相应长度的对象数组,最后在实现程序功能时,用函数调用就行。
于是当晚很快就完成了第二天的预习报告,上机调试时也没什么大问题,就这样第二天顺利通过。
虽说接下来的统计没那么容易,但就顺着数据顺利输入的喜悦心情,我还是较好的完成了这个任务。在类外定义一个函数用来输出雇员的基本情况,表头,表尾直接在统计函数中输出,也就是在统计函数中调用函数。打印与统计有异曲同工之妙,所以在统计做出之后,打印自然而然的也就很快完成了。
接下来的数据备份中,遇到了一个小问题,一开始以为也是函数中调用打印函数中用的那函数。其实不然,如若那样,又变成了打印。那我们就直接输出,但详细资料是受保护的,不能直接输出,那还得调用函数。于是在每个类中的公共成员中定义了直接返回的函数,接下来顺利完成了备份。调用头文件<process.h>里的exit(int)函数,可以用if()语句进行判断是否确定退出。程序顺利完成。
面向对象程序设计作为一门软件设计的课程,具有极强的实践性,使我加强了灵活应用理论知识的能力及面向对象程序设计技能。
关键词:考试系统;多媒体技术;数据源;连接数据库
中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)03-10854-03
1 课题研究的意义和目的
1.1研究意义
现在,多媒体技术日趋成熟,多媒体系统以其能输出精彩的图形和图像、美妙的声音、动感的画面赢得了用户和社会各界广泛的关注和应用。如果把按传统考试方式同现代化的多媒体技术相结合,并且用多媒体著作工具及其它多媒体技术,编制一套符合高校考试需求的系统及其配套的多媒体教学软件,利用多媒体技术生动、直观、形象展示信息的特点,辅助教师授课和学生进行考试,尤其对部分有限制性的实验环节,可利用活动视频技术进行展示,这将会解决一系列目前存在的问题。总之,该课题是在计算机辅助教学及考试上进行的一次积极有意义的尝试,为其他实践性较强的课程进行多媒体辅助教学开辟一条新的路子,具有一定的理论和现实意义。
1.2目的
传统的考试手段主要依靠有纸试卷,几乎没有可重用性。本课题将实现:用计算机辅助考试系统,把多媒体生动、直观的显示出来,使学生不再将考试视为一种枯燥无味的东西,提高了考试效果,使学生在一种愉悦的心情中进行考试,把枯燥的重复变为充满乐趣、具有启发性的考试过程,使学生能比较全面的学习知识,掌握技能,达到素质教育的要求。
2 系统流程图设计
2.1初始化流程设计
在使用Authorware创建任何多媒体项目的时候,都应该先设置当前项目文件的窗口大小,将其设置为“800×600”,然后选择“演示居中屏幕”,同时取消对“显示标题栏”和“显示菜单栏”复选框的选择。
2.2主界面的设计
本界面采用了Photoshop7.0图形图像处理软件来绘制。为了避免界面的单调和呆板,用蒙版和滤镜技术加以美化。该界面把Photoshop中的图层技术、图层蒙版技术、文字效果及滤镜等功能完美的结合了起来。并且在底部设置了一个Flas,增加视觉效果。
2.3背景音乐的交互控制
该多媒体教学以MIDI作为背景音乐,背景音乐的交互控制包括背景音乐的随机选曲播放、停止等功能,另外当该教学程序处于活动状态时,能够随时调整背景音乐和讲解声音的大小及比例,让使用者在一种轻松悦耳的环境中考试(调出WINDOWS的音量控制实现),还能够暂停背景音乐,当再次进入活动状态时则能重新播放背景音乐。
为了充分考虑用户计算机的不同配置情况,首先利用BUDAPI.U32的BASOUNDCARD函数判断用户机器是否已经安装了声卡,如果已经安装则执行背景音乐播放,否则不允许播放任何背景音乐操作.程序如下:
IF BASOUNDCARD() THEN
MIDI:=1
TEST(MIDI,MIDILOOP (FILELOCATION^”MUSIC\\MUSIC-”^RANDOM(1,5,1)^”.MID”),STOPMIDI())
END IF
软件中的背景音乐交互控制是通过交互响应来实现的。在程序执行过程中,用户始终可以通过按钮控制背景音乐的播放与暂停。在计算图标“播放音乐”后添加一交互图标并命名为“音乐控制”,并在交互图标右边添加三个计算分支。设置“STOP/PLAY”分支为按钮响应交互,其功能是实现对背景音乐的控制。由于在整个程序执行过程中它都是有效的,因此须设置其为永久按钮,即选择“PERPETUAL”属性选项,同时设置“ACTIVE IF”条件为:BASOUNDCARD(),即检测到用户没有安装声卡的情况下该按钮及响应分支无效。
2.4内容的导航设计
该多媒体教学涉及内容繁多,不仅包括文本、图片、声音和动画,而且还有其它多媒体工具与Authorware 配合,同时,还把视频文件导入,以增加实用性。为使用户操作简单方便,设计了合理的教学内容导航。主文件与各章节之间的导航设计根据结构规划中的该章节内容的栏目划分,在流程设计中为这些栏目设计了导航,如图1为主程序内容导航的设计流程图。
这样的流程设计使整个主程序结构清晰,可读性强。由于该文件结构是主-分结构,即主文件调用各章节模块文件的方式,因此在主文件的章节内容中实际存放的是一个起链接桥梁作用的调用脚本,而具体的考试试题题型内容则放在各章节的模块文件内。
2.5各模块的内容流程设计
图中的考试模式、练习模式、教学模式及退出系统这四部分主要程序流程图如下图2、图3、图4、图5所示。
第五部分的原理演示则是通过热区交互以及调入用VC6.0制作的演示内容的库文件,抽象的工作原理形象化,具体化。在打包的过程中采用了分步打包,首先对每部分进行打包。通过主文件调用其它各部分,这样避免了主文件过大,影响运行速度。
3 以完成单选题为例来看具体实现过程
从单选题的数据库题库中随机抽取相应题数的问题;每一题只能选择一个答案;用户可以按次序做答,可跳过不答,在回答过程中,可以随时返回已做过的题目进行修改;交卷后会给出完成情况可以查看每题的回答情况.最后回到选题主界面,并把学生所做的答案成绩保存到数据库中。
当用户在主界面中,选择了“考试模式”后,系统就会进入到登录界面系统会提示输入用户名和密码,当输入后,点击“确定”后,系统将会进入到题型选择界面。在提示框中输入用户名和密码,我们点击“确定”后,就会进入到正式的单选题型界面中,选择“单选题”单击。
C语言程序设计考试系统的选择题从数据库中取出选择题,在一个界面上显示。利用三个热区域交互按钮“上一题”“下一题,”“完成”,按钮和四个热区域设置计算图标用来记录学生所选择的答案。在学生选择“完成”后,弹出学生做题的情况界面,然后回到选题主界面,并把学生所做的答案成绩保存到数据库中。
3.1“未命名”用来擦除以前的图像
(1) 打开“未命名”的属性,进入“未命名”的属性窗口。
(2)在“属性窗口”中单击擦除标签在设置过渡效果进行设置。
(3)单击“确定”按钮
3.2 设置“单选界面”插入一个图像
(1)双击“单选界面”图标进入显示图标窗口
(2)单击绘图工具箱 图标进行绘制一个和窗口矩形一样大的矩形
(3)设置矩形的颜色为“绿色”
(4)单击显示图标窗口的关闭按钮,关闭保存对“单选界面”的设置。
3.3 设置交互“进入”
(1)在交互图标的右边拖放一个群组“单选”。
(2)设置单选的热区为“按钮”。
(3)单击确定后,双击“选择”。
3.3.1“未命名”用来擦除上次运行的图形
3.3.2 在“打开数据库”的输入如下源程序:
hint0:="您的数据库没有连接上......"
--显示连接数据库的信息
title:="数据库连接...."
ODBChandle:=ODBCOpen(WindowHandle,"","database","","")
--得到数据源
getrecord:="select count(sequence) from erigister"
--得到记录的个数
record:=ODBCExecute(ODBChandle,getrecord)
if ODBChandle=0 then--测试连接数据库是否连接成功
MessageBox(WindowHandle,hint0,title,17)
end if
ODBCClose(ODBChandle)
ODBChandle:=ODBCOpen(WindowHandle,"","database","","")
if ODBChandle=0 then
MessageBox(WindowHandle,hint0,title,17)
end if
sqlstring1:="select ssdb from erigister where sequence="^record^"" -从表中选择单选库表题
ssdatabase:=ODBCExecute(ODBChandle,sqlstring1)
getrecord:="select count(sequence) from "^ssdatabase^""
record:=ODBCExecute(ODBChandle,getrecord)
--ssdb数据库的记录个数,以便产生随机数
sssum:=0
number1:=1
sui:=[]
sui[1]:=Random(1,record,1)
--下面程序用来产生一个随机数不能出现相同的题目
i:=2
repeat while i
flag:=0
repeat while flag=0
sui[i]:=Random(1,record,1)
flag1:=0
repeat with p:=1 to i-1
if sui[i]=sui[p] then flag1:=1
end repeat
if flag1=0 then flag:=1
end repeat
i:=i+1
end repeat
3.3.3 在“做选择的背景”显示图标中设计单选题的界面如上图5.4
3.3.4 在“数据库的操作”中输入如下代码:在这里,我们就要实现对数据库的随机读取和跟踪答案的长短来选择界面
x:=0
ran:=sui[number1]
result:=""
record1:=Number(record)
record:=record1--得到记录的个数
sqlstring1:="select topic from "^ssdatabase^" where sequence="^ran^""分别得到选择题各项
sqlstring2:="select a from "^ssdatabase^" where sequence="^ran^""
sqlstring3:="select b from "^ssdatabase^" where sequence="^ran^""
sqlstring4:="select c from "^ssdatabase^" where sequence="^ran^""
sqlstring5:="select d from "^ssdatabase^" where sequence="^ran^""
sqlstring6:="select result from "^ssdatabase^" where sequence="^ran^""
get1:=ODBCExecute(ODBChandle,sqlstring1)
--get1得到选择题目内容
get2:=ODBCExecute(ODBChandle,sqlstring2)
--get2得到选择项A内容
get3:=ODBCExecute(ODBChandle,sqlstring3)
--get3得到选择项B内容
get4:=ODBCExecute(ODBChandle,sqlstring4)
--get4得到选择项C内容
get5:=ODBCExecute(ODBChandle,sqlstring5)
--get5得到选择项D内容
get6:=ODBCExecute(ODBChandle,sqlstring6)
--get6得到选择题的答案
inputa:=1 --用来设置热区域的激活条件
3.3.5空“操作”用来设置跳转标志
3.3.6在交互图标右边拖入四个热区域
在计算图标中从左到右的四个计算图标中输入: result:="A" result:="b" result:="c" result:="d"在交互属性中设置激活条件为inputa=1: ,鼠标指针设置为标准鼠标指针,其它的为默认设置.其中result变量用来记录用户所选的答案.
3.3.7拖一个交互图标“未命名”在它的右边拖两个计算图标为“上一题”和“下一题”,再拖一个群组“完成”放在“下一题”右边 ,设置热区为按钮。在“上一题”的激活条件中输入number1>1,鼠标指针设置为:标准的鼠标指针。在“下一题”的激活条件中输入:number1
4 结束语
根据对教师上课时课堂练习的分析,开发出该考试系统,主要是能够方便课堂练习,同时还可用于期中期末测试,该系统主要是针对《C语言程序设计》课程来设计的。对该系统做简单修改,即可用于其它课程。
参考文献:
[1]王嘉宁,朱隽.Photoshop7.0中文版新概念百例[M].中国水利水电出版社,2004,4.
[2]龚祥国.主编.Photoshop图像处理实用教程[M].科学出版社,2002,2.
[3]王龙,金海.主编.Flash MX实战入门新概念[M].中国水利水电出版社,2005,5.
[4]李恒.Authorware 6.0多媒体实例大制作》[M] 冶金工业出版社,2002,4.
[5]袁海东.Authorware 7.0教程[M].电子工业出版社,2004,9.
关键词:冒泡排序;选择排序;插入排序
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2012)31-7504-04
排序(Sorting)是C++程序设计中基本并且常用的算法,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列。本文将讨论三种排序算法的实现,并对三种排序算法进行比较分析。
1 排序的分类
1.1 按是否涉及数据的内、外存交换分为[1]:
1)内部排序: 内部排序(简称内排序),是带排序纪录存放在计算机内存中进行的排序过程。
2)外部排序: 外部排序(简称外排序),是带排序纪录的数量很大,以至于内存一次不能容纳全部纪录,在排序过程中,只有部分数被调入内存,并借助内存调整数在外存中的存放顺序的排序方法。
1.2 按策略划分内部排序可分为
1)插入排序,包括:直接插入排序,其它插入排序,希尔排序;
2)快速排序,包括:冒泡排序,快速排序;
3)选择排序,包括:简单选择排序,树形选择排序,堆排序;
4)归并排序;
5)基数排序,包括:多关键字的排序,链式基数排序。
2 排序的实现
由于排序有很多种方法,本文主要讨论内部排序的几种实现。
2.1冒泡排序
算法实现思想:将被排序的数组R[1...n]垂直排列,即将元素R[1]到R[n]排列垂直如气泡状,约定数据小的为轻气泡,大的为重气泡,根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R,凡扫描到违反本原则的轻气泡,就使其向上”飘浮[2]”。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止(图1)。
2.2 简单选择排序
算法实现思想: 对于一组数据{K1,K2,…,Kn},首先从K1,K2,…,Kn中选择最小值,假如它是Kz,则将Kz与K1对换,然后从K2,K3,…,Kn中选择最小值Kz,再将Kz与K2对换. 如此进行选择和调换n-2趟,第(n-1)趟,从Kn-1、Kn中选择最小值Kz将Kz与Kn-1对换,最后剩下的就是该序列中的最大值,一个由小到大的有序序列就这样形成. 即: 在要排序的一组数中,选出最小的一个数与第一个位置的数交换,然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止(图2)。
直接插入排序(Straight Insertion Sort)是一种最简单的排序方法,它的基本思想是将任一数插入到已排好序的数据序列中并保持序列的排序。如果数组a[n]中存放的数据序列是升序,当插入的数num比已有序列最后一个数大,则将插入到序列的末尾;如果插入的数num不比序列最后一个数大,则将它依次与a[0]~a[n-1]进行比较,直到出现a[i]>=num为止,这时表示a[0]~a[i-1]各元素的值比num小,这时将a[i]~a[n-1]各元素向后移一人位置,把a[i]空出,最后将num放在a[i]中,最终完成插入排序。
程序设计如下:
3 排序算法的分析
3.1 排序算法比较
3.1.1 简单选择排序
1)关键字比较次数
无论文件初始状态如何,在第i趟排序选出最小关键字的记录,需做n-i次比较,因此总的比较次数为: n(n-1)/2 = O(n2)。
2)记录的移动次数
当初始文件为“正序”时,移动次数为0 ;当文件初态反序时,每趟排序均要执行交换操作,其中的移动次数取最大值(n-1) ;
3)时间复杂度
简单选择排序的平均时间复杂度[1]为O(n2) 。
4)稳定性分析
简单选择排序是不稳定的。
3.1.2 冒泡排序
1)关键字比较次数
若初始序列为“正序”序列,则只需进行一趟排序,在排序过程中进行(n-1)次关键字的比较。反之,若初始序列为“逆序”序列,则需进行(n-1)趟排序,需进行n(n-1)/2次比较。
2)记录的移动次数
当初始文件为“正序”时,移动次数为0 ;当文件初态“反序”时,每趟排序均要执行交换操作,其中的移动次数取最大值n(n-1)/2 ;
3)时间复杂度
冒泡排序的平均时间复杂度为O(n2) 。但当原始关键字序列已有序时,只进行一趟比较就结束,此时时间复杂度为O(n).
4)稳定性分析
冒泡排序是稳定的。
3.1.3 直接插入排序
1)关键字比较次数
若初始序列为“正序”序列,则只需进行一趟排序,在排序过程中进行(n-1)次关键字的比较。反之,若初始序列为“逆序”序列,则需进行(n+2)(n-1)/2次比较。
2)记录的移动次数
当初始文件为“正序”时,最小移动次数为0 ;当文件初态“反序”时,记录移动的次数也达最大值[1]:(n+4)(n-1)/2 ;
3)时间复杂度
直接插入排序的平均时间复杂度为O(n2) 。
4)稳定性分析
冒泡排序是稳定的。
3.2 排序算法的分析
1)若n较小(如n≤50),可采用直接插入或简单选择排序。
当记录规模较小时,直接插入排序较好;否则因为简单选择移动的记录数少于直接插人,应选简单选择排序为宜。
2)若文件初始状态基本有序(指正序),则应选用直接插人、冒泡排序为宜;
3)若n较大,则应采用时间复杂度为O(nlgn)[3]的排序方法:快速排序、堆排序或归并排序。
快速排序是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短。
参考文献:
[1] 严蔚敏,吴伟民.数据结构[M].北京:清华大学出版社,2002.
关键词:C程序设计;教学方式;实验教学
中图分类号:G642文献标识码:A文章编号:1009-3044(2008)11-20290-01
1 引言
C 程序设计功能丰富、表达能力强,既具有高级语言的优点,又具有低级语言的许多特点,在当今系统软件和部分应用软件的开发中具有很强的实用性。[1]C程序设计是计算机及相关专业中一门重要的计算机基础课程,也是《C++程序设计》、《数据结构》和《操作系统》等课程的前导课程。由于作为程序设计的入门课程,同时C语言牵涉到的概念比较复杂,规则繁多,使用灵活,容易出错,使不少初学者感到学习困难。这就要求教师深入探讨教学内容、方法及手段的改革,尤其是探索一套行之有效的教学方法。
2 明确教学目的、引导学生正确认识课程
C 程序设计主要培养学生正确的设计算法以及编程能力,熟练掌握程序设计的思想,培养学生结合所学知识解决实际问题的能力和正确的编程思维方式。但是《C程序设计》课程在学生心中没被引起足够的重视,对课程的理解普遍存在两个误区:一是在当今的软件领域,C语言已经无用武之地,想一步到位学C++、JAVA之类;二是程序设计对今后的学习和工作意义不大。[2]
针对这两个错误的看法,我们从两个方面有意识地引导学生正确对待C 程序设计:第一、强调算法,我们通过讲解一些常用的、经典的算法,使学生对学习C程序设计有更高层次的认识,认识到算法是程序的灵魂,只要有了算法,可以用不同的计算机语言来实现;第二、理论与实践相结合,收集一些与专业联系紧密的应用程序作为范例,同时可以例举一些因特网上的应用(例如:网站、网络游戏的开发),让学生清晰的认识到程序设计的重要作用。
3 注重教学改革,采用多样化的教学方式
实例式教学注重实例演示、动手实践,与计算机学科自身的实践性、操作性强的特点相一致。优秀的课堂教学应该以程序设计为主线, 寓概念于实例中, 将复杂枯燥的语法知识分解到每个生动、有趣、实用的程序实例中,避免一味地给学生讲解语句的功能和语法规则,使学生陷入到繁琐的语法规则之中。实例选取的适当与否直接影响学生的学习效果;选取时应注重基础知识与基本技能的训练,选取的实例既有基础性、典型性,又要尽量保持一定的趣味性。
在实例式教学活动中,我们不能只给学生一张n-s流程图,一个正确的程序和结果,而更应该展示给学生的是一个过程,一个思想,也就是怎么样去解决这个问题。我们的重点在于教会学生掌握方法,即帮助学生学会自己解决问题。我们首先介绍实际问题,针对问题进行分析,然后将实际问题抽象为数学模型(能否得到正确的数学模型就决定我们的程序能否得到正确的结果),接着我们介绍问题的解决办法(即算法和数据结构),最后使用C编程实现。在教学过程中,教师切忌采用灌输式教学,一味的自演自说,而是应该有意识地举一些例子,由浅入深、由易到难、循序渐进、逐步深入的介绍我们的知识点;通过与学生的不断互动,活跃、引导他们的思维,来启发学生发现问题、解决问题;将自身角色转变为学生主动学习的帮助者、促进者,培养学生独立思考能力。
这个过程的重点是介绍程序设计方法和思路,在分析程序和程序设计中让学生逐步熟悉基本的语法和语句。对于在程序中出现的新的语句或函数,我们据此实例对其进行讲解,不做详细深入讲解,进而来突出程序设计为主线、算法是教学重点。在学生掌握实例的算法以后,我们针对新出现的语句或函数给出若干问题作为课下作业,采用问题驱动法来引导学生对该语句或函数进行更深入学习,这样一方面,我们可以在有限的学时内,更好的讲授教学重点难点;另一方面,可以引导学生在课余时间充分发挥自己的思维,突出其在学习中的主体作用,培养其自学能力。
整个教学过程中强调在应用中学习,从而避免了枯燥、繁杂的理论说教,不仅能增进学生的学习兴趣和积极性,而且对提高学生综合分析和解决实际问题的能力也大有帮助。
4 强化实验教学,培养动手能力
C程序设计是一门理论与实践并重的课程。我们应该改变实验教学为理论教学的附属、实验仅仅是对理论的简单验证的观念,认识到学生只有通过实验环节才能在实践中真正的掌握C语言语法、语义,培养程序设计的能力。因此,我们要加大实验教学的力度,对实验教学的各个环节进行精心设计。
兴趣是激发学生主动学习C语言的关键,而加强实验教学,尽力提高实验内容的趣味性,利用学生在实验过程中产生的“求知欲”和“成就感”是激发学习兴趣的一种重要方式。精心设计实验内容,使其不但与理论教学同步,而且突出理论知识的重点与难点。实验内容包括三部分:一、验证型实验。该部分要求学生根据实验指导书中要求进行操作,题目有参考答案可以借鉴。主要通过对一些知识点的验证,来帮助学生掌握基本的知识点;二、简单的编程题与程序填空题。该部分内容主要针对所学的新概念、新语句,是对他们的简单的运用,尽量体现出教学重点与难点;三、程序改错。内容的选取主要针对学生容易疏忽、易犯错误的知识点,通过这些“反例”帮助学生扎实掌握知识点;四、编程题,该部分题目较复杂,具有一定难度,注重前后知识的衔接,需要综合运用前面章节的内容,要求学生综合所学的知识来达到知识的系统化[3]。同时,在设置实验内容时我们应该考虑到不同层次的学生,通过设置一部分选做题来引导学有余力的学生进一步学习。多种实验内容的结合, 即巩固了学生的理论基础,又可提高学生分析问题、解决问题的能力,从而使学生整体的动手能力有所提高。
在指导实验时,应让学生先独立解决问题,在学生不能独立完成时,教师应该先询问学生的解题思路,通过与学生进行讨论来引导学生、让学生自己发现问题,分析、解决问题,从而达到辅导的目的,而不是直接告诉学生正确的解题思路。
实践环节要注重学生调试程序能力的培养。基本调试技术是深入学习和取得实际编程能力的前提,可通过现场演示等手段,讲解C语言的编译环境及一些常用的调试技巧,例如通过单步执行、设置断点、观察变量的值等调试技巧来帮助学生理解程序的执行过程,增强程序的排错能力。教师需要对实验操作中遇到的问题和常犯的操作错误进行归纳总结,集中进行讲授,及时有效地清除学生学习过程中的障碍。
5 改革课程考核方式
课程考核采用笔试考试、实验考试及平时实验成绩相结合的方式。其中笔试考试占总成绩的50%,可采用类似计算机二级考试的C 语言部分作为考题,对学生掌握理论基础知识的程度进行全方位考查。实验考试占总成绩的40%,采用上机操作的考核方式,考察学生的编程能力、程序调试能力。平时实验成绩占总成绩的10%,考核依据为平时实验项目的完成情况。
课程的这种考核方式避免了学生埋头于书本,死记硬背知识点,忽视实际操作能力与应用能力的培养;使学生将精力集中于程序的设计与调试,有助于实际动手能力的培养。
6 结束语
C程序设计这门课程,作为程序设计的入门课程,起着重要的作用。教师要有效地组织教学,以“程序设计”为主线,灵活地运用多种方法进行课堂教学;注重学生程序设计能力的培养,抓好实践技术技能的训练;激发学生的学习兴趣,让学生主动、愉快地学习,这样才能取得良好的教学效果。
参考文献:
[1] 谭浩强.C程序设计[M](第三版)[M].北京:清华大学出版社,2005.
关键词:C语言;程序设计;机考;分层教学;课程改革
中图分类号:G642 文献标识码:A 文章编号:1009-3044(2014)34-8225-02
《C语言程序设计》课程的授课对象是计算机专业本科学生,为专业基础(必修)课,是学好后续各软件课程必要的基础。有别于已经掌握的汉语、英语语言,作为人与计算机交流的语言,C语言不但概念多、符号多、语法多、规则多,而且抽象、难懂,再加上需要有一定的理解力以及解决问题的清晰思路,有些学生在学习过程中会感觉到枯燥、繁杂、无趣。因此培养学生的学习兴趣、加强对课程的重视、提高实际编程能力、将理论与实际相结合,是教师必须解决的问题。
为了提高学习质量,从2010年秋季学期开始对《C语言程序设计》课程的教学过程、成绩考核进行了改革,由原来的纸质试卷考试变成全程上机考试。改革实施多年来,大部分学生增加了学习兴趣,有了编写程序的主动性和积极性,增加了专业学习的信心,提升了程序设计的能力。
考虑到学生在基础知识、智力因素、学习能力上的差异,为了更有效地实施“因材施教”,从2013年秋季学期开始实施分层教学。在讲完C语言基础知识、程序基本设计方法之后进行分层。通过考核,外加自愿的原则,将原来的教学班打乱,重新组合成两种班型――高层次、低层次班。分层之后,每个学生个体获取的知识趋于最大化,极大地提高了课堂学习效率。
1 传统教学与纸质考试存在的问题
传统的教学是按照指定教材,在课上将重点内容进行讲解,典型的问题、方法在TC/VC环境中进行演示,课后留给学生一定的纸质作业和上机编程作业。同样的讲授,理解力强的学生一听就懂;理解力弱的学生,老师需要讲多遍才有可能懂。传统的教学中,老师只能顾及大多数中等学生,照顾不到特殊的学生。降低了课堂效率,也可以说浪费了某一部分学生的时间。
由于期末考核采用的是纸质考试,只是从纸面上考核学生对C语言理论、编程方法的理解、掌握程度,更对学生的学习产生误导。部分学生也只重视理论,不重视实际动手编程。他们只满足于“纸上谈兵”,不考虑结果。因此,实际应用时,对上机环境不熟悉、编写的程序不能顺利通过,导致很多学生高分低能,在解决实际问题时,茫然无措。
2 机考及分层教学改革的探索
计算机专业课程的特点是实践性强,学生在掌握了基本语法后重点是上机实践,即在计算机上解决实际问题,这里包括问题的分析与抽象、程序的编写与调试。
常言道:“实践是检验真理的标准”。在学习C语言过程中,上机实践是巩固理论知识、增加理解力、提升编程能力的重要途径。为了提高教学质量,让学生真正打好专业基础,授课教师在教学内容、教学方法、教学组织、考试方式等多方面上进行了调整。
2.1 教学方法以及教学组织上的改革
为了使教学效果更好,将两个自然班作为一个授课班,教学内容统一要求。讲授时,由浅入深、循序渐进。在语言的基础上,重点放在程序设计的思想、方法、技巧的讲解,结合典型例题,培养学生分析、设计、解决问题的能力。通过精心设计实验题目、课后作业、调整考核比例、增加课后上机机时、多方位提供答疑指导等环节培养学生学习兴趣,使学生重视上机编程。
对学生作业题目进行精心设计,既覆盖知识点,又有趣味性,每个题目都像在讲一个故事,把要解决的问题融在故事中,学生在读故事的同时,不自觉地就会去想解决办法,增加了兴趣,提高了自主性,也锻炼了思维。
调整平时考核内容。平时考核的环节包括:上机小测试、期中机考、上机作业、考勤,每一个环节的成绩都会反映到平时成绩中。平时成绩的取得完全依赖自己的学习态度。
增加课后上机机时。由于考核重点是对实际动手能力的考核,光靠课内安排的上机时间显然不够,所以需增加学生课外自主上机实验时间,并配有指定人员辅导。
多方位提供答疑指导。所有任课教师把答疑时间错开,这样每周学生可以有多次答疑时间,对比原来教师只给自己学生答疑的做法,学生增加了学习解疑的机会。
2.2加强上机实验过程控制,促进考试改革
借助于“课程自动评测与抄袭检测系统”,老师和学生有了C语言作业部署、学习、检测的平台。通过这个平台,老师可以布置上机实验、安排考试、检查学生提交的作业。根据知识点,每章布置4-5道题,限定学生在规定时间内独立提交。老师可以随时查看学生提交的程序,及时与学生沟通、反馈。学生可以随时把自己编写的程序提交,系统对提交到服务器的程序自动判断对错,学生可以及时了解自己程序存在的问题,不断进行修改,直到能够顺利通过所有测试。
这一环节起到了巩固课本知识、增加独立思考、加强动手能力的作用。期末就是利用这个平台进行全程两个小时的考试,要求学生既有编程的能力,又有时间的紧迫感。
加强过程考核,增加平时机考次数。为了缓解期末机考时的紧张情绪,之前会安排1-2次的上机考试,成绩记入期评,其中期中考试的考试形式与期末一样,为全程两个小时的机考,随机组卷。学生可以尽早了解考试模式,并更加重视对本门课程实际动手能力的训练,学会调整心态。
为了满足不同层次学生的要求,在平台上配备了大量不同难度的习题,不受提交时间的限制。学生可以根据自身需求,随时编程测试。
2.3分层教学,提升学习效率
分层教学是根据学生不同基础、不同学习需求而实施教学的一种手段。是在承认学生差异、考虑学生兴趣的前提下,以发展的眼光看待学生,给每个学生提供符合他们发展的教学目标与方法,是同时提高所有学生能力的理想状态。经过调研,从三个方面进行分层教学。
1)学生分层。对学生能力考核的一个重要标准就是学生的学习成绩,但是在学习这门课之初,没有可依据的成绩。分层安排在讲完两周课,即学完了简单程序设计之后进行。学生根据自己当前对C语言的理解和接受程度,选择不同层次。在分层教学的实施过程中,这样的分层是暂时的、动态的。过一段时间,视学生的后期学习成绩、学生的具体情况,可递进或降层。这样更有利于学生个性化发展。
2)讲课分层。对不同层次的学生,采取不同课堂。在讲授编程思想、必备知识基础上,对高层次学生,拓宽和加深问题的难度,做到拔尖提高;对普通学生,在达到大纲要求的同时,考虑他们的接受能力,适度增加和加深知识,做到稳步推进。
3)实验分层。练习是对所学知识的巩固和消化。按照作业、实验题目的难易,对不同层次的学生提出不同要求。对普通学生布置基础题,进行强化训练;对高层次学生,以综合运用知识进行练习。要求学生多编程解决问题,以提高应用知识的能力。这样使得不同层次的学生得到不同程度的提高。
3 教学改革实践效果
实行考试改革后,学生的学习积极性有了明显提高。由于考试时间的有限性,增加了学生的紧迫感、主动性,在程序编写、调试程序的实际动手能力方面得到了重视并有所提高,为后续课程学习奠定了良好的基础。经过分层教学,满足了不同层次学生学习的需要,激励了各层次学生朝着有利于自己的方向努力,有利于学生个性能力的张扬,有利于学生综合素质的提高,更有利于优秀学生综合能力的发挥、较低层次学生潜在能力的开发。
3.1带动学风,促进后续课程的学习
大部分学生能够按时到课,勤于思考,互相研究,答疑的同学增多了。改变了不良学风,营造了良好学习氛围。由于课程期间比较重视学生结构化程序设计的方法,要求编写程序之前理清解题思路、做好算法设计,经过训练后,在后续的“程序设计专题训练”中,面对稍难一些的问题,学生也能逐步找到解决办法,编出程序,顺利通过测试。在小学期“学术工程实践”课程中,要求完成一个小型管理系统,有一定的难度。大部分学生能够顺利编写由多个结构体、多个文件、几十个函数组成的、2000-4000行代码的程序,并调试成功,完成管理。
3.2提升学生的程序设计能力和创新能力
竞赛是考核学生全面素质的一个平台,它要求学生具有扎实的理论基础、清晰的算法设计能力、娴熟的编程能力、良好的心理素质和快速的临场应变能力。
随着知识的积累,学生的能力和自信心不断增强。学生们更加渴求知识,渴望展示自己,参加竞赛的积极性提高了,人数也不断增多。在大二阶段,报名参加全国软件设计大赛的人数由09级的16人次(占09级学生人数14.04%)、10级的33人次(占10级学生人数26.19%),增加到11级的66人次(占11级学生人数51.56%)。全国获奖人数由09级的1人次(占09级学生人数0.88%),到10级的12人次(占10级学生人数9.52%),再到11级的17人次(占11级学生人数13.28%),获奖人数同比增多。
4 结论
总之,学习“高级程序设计语言”不仅要使得学生在程序表达和设计上得到培养,更重要的是在掌握解决问题的思想、方法和手段的同时,实际动手编程能力有所提高,从而增长设计程序的能力。因而,将“C程序设计”课程的考试改为上机考试是很有益的,可以改变不良的学风,营造良好学习氛围;可以加强学生对课程的重视,提高学生程序编写、调试等实际动手能力,提升学生的程序设计能力和创新能力,为后续课程学习、为培养合格的专业人才奠定良好的基础。
对“C程序设计”课程实施分层次教学也是必要的,可以针对不同层次学生的需求给予相应的学习指导,以达到学生全面发展的教学目标;可以激发不同层次学生学习的欲望,向着更高更深的知识海洋探索;可以鞭策任课教师积极思考、合理取舍,做到充分了解学生、合理安排进度,能够极大地提升老师的组织与应变能力。
参考文献:
[1] 李学会.C程序设计教学改革与实践[J].实验室科学,2010(4)33-34.