前言:想要寫出一篇令人眼前一亮的文章嗎?我們特意為您整理了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.