



摘 "要 "提出累加和算法的縱遞式學習技巧,通過Rap-tor工具繪制流程圖,由淺入深循序漸進地講述累加和算法的學習過程,通過C語言編程工具編寫并實現累加和算法,完成累加和算法單元的云教學內容構建。以云上教學輔助的縱遞式學習縮短學生學習所需時間,簡化學習過程,為復雜算法的學習奠定基礎。
關鍵詞 "程序設計基礎;累加和算法;Raptor;縱遞式學習;流程圖;C語言;云教學
中圖分類號:G642.1 " "文獻標識碼:B
文章編號:1671-489X(2022)11-0110-04
0 "引言
程序設計基礎是大學一年級非計算機類專業的基礎必修課,理論性和實踐性非常強,內容繁多,要求學生具有較高的邏輯性思維能力,同時在不斷的學習中鍛煉計算機思維能力。大部分大學生在剛剛接觸程序設計基礎時不能跟上教師的講課步驟,教學效果不理想,這門課程成為學生難學、教師難教、掛科率較高的課程。程序設計基礎包括兩部分內容,分別為程序設計方法(算法)和程序設計語言[1],程序設計語言是算法的實現工具,學生既要掌握典型問題的經典算法,也要能熟練地使用一種程序設計語言來設計實現最優算法。
1 "程序設計方法和程序設計語言
程序設計方法即算法是解決問題的方法,程序設計中典型的算法有累加和算法、排序算法、檢索算法等。學生只有在熟練掌握典型算法的基礎上,才能在遇到實際問題時具體問題具體分析,設計出最優的算法,同一問題不同的設計者會有不同的算法。由于程序設計方法的抽象性決定了學生學習算法并不容易,要讓學生對程序設計方法感興趣更難,因此,教師要提高課程的趣味性來調動學生的積極性。
程序設計語言是算法的實現工具,是語法和語句的集合。Raptor可視化語言是算法的流程圖實現方法。目前,高校非計算機類專業開設的程序設計語言有C語言、VB語言、Python語言和VF語言等。算法和規則相輔相成,教師在實際教學過程中不可能完全分開講解,必然會結合具體的程序設計語言來開展算法的學習。
2 "累加和算法之縱遞式學習技巧
程序設計基礎的學習要循序漸進、由淺入深。順序結構、選擇結構和循環結構[2]是結構化程序設計的三種基本結構。順序結構和選擇結構貼近生活簡單易學,學生的學習難點由循環結構開始,而循環結構是編寫程序時使用頻率最高的結構。累加和算法是循環結構的典型應用,是程序設計基礎后續復雜算法的基礎。累加和算法的學習技巧采用的是縱遞式思維方法,所謂縱遞式是指在圍繞中心論述時,采用由表及里、由淺入深、層層遞進、步步深入的方法,進而得出結論。在程序設計方法中,以累加和算法為例,縱遞式學習技巧是指圍繞累加和算法,以100以內正整數和為基礎,由淺入深,相繼引出100以內的奇/偶數和、100以內奇數的倒數和以及帶有符號位的100以內奇數的倒數和等。例題層層遞進、步步深入,進而推廣到更為復雜的累加和算法。采用縱遞式學習技巧學習累加和算法過程如下。
2.1 "100以內的正整數之和
根據循環結構的定義可知循環結構有循環條件和循環體[2]兩部分,100以內的正整數之和的循環條件是加數小于101,循環體是重復的加法動作,重復執行100次。設sum是累加和變量,初值為0,因為是在0的基礎上進行加法運算,加數設為變量n,n的值為1、2、3、…、100,分析過程如圖1所示。
2.2 "100以內的奇/偶數和
前面講述了100以內的正整數和的求解方法,理解了n=n+1的應用,接下來就學習100以內的奇數和與偶數和問題。由于奇數為1、3、5、7、…、99,n的初值為1,在重復進行加法運算時n=n+2,循環條件為n<100。若是求偶數和,則n的初值為2,循環條件為n≤100。學生理解了奇/偶數和的算法,則1+5+9+13+…+97等的變換形式都迎刃而解。
2.3 "100以內奇數的倒數和
在學習了100以內的奇數和之后,接下來引導學生求倒數和的問題。觀察表達式1+1/3+1/5+…+
1/99的特征,發現加數不再是1、3、5、7、9等,而是變成1/1、1/3、1/5等,如果設n的初值仍為1,則累加和變成sum=sum+1/n。
2.4 "求1-1/3+1/5-1/7+1/9-…+1/97-1/99的和值
學習了倒數和之后,接下來就要學習符號位的使用。對于這道題的算法,如果不引入符號位也可以計算出來,先求正數的累加和,再求負數絕對值的累加和,然后把累加和相減得出結果。這種算法不是結構化程序設計的典型算法。把上述問題都看成求累加和的問題,用一個通式作為循環體來反復使用。把表達式整理成(+1/1)+(-1/3)+(+1/5)+
(-1/7)+…,引入符號位f=1,詳細分析過程如圖2所示。
由上面對于累加和問題由淺入深的分析總結,學生的思維層層推進,順利地掌握了累加和算法的應用,并可以靈活地使用累加和算法解決多變的求和問題,比如表達式1/(1*2)-1/(2*3)+1/(3*4)-…的前10項和值、2/1+3/2+5/3+8/5+13/8+…的n項和值等。
3 "累加和技巧之實現
掌握了累加和的學習技巧后,接下來就是具體算法的實現。對于大學一年級的學生,如果在課程配置上直接進入計算機編程語言則學習難度很大,這是因為編程語言的語法本身對初學者來說就不易掌握,再加上具體的算法會增加初學者的學習難度。因此,找到一種過渡語言尤為重要。流程圖是算法化繁為簡的有力工具,可以簡化算法執行過程的每一個步驟,不存在專業性的術語。流程圖可以讓使用者清晰地看到算法從開始到結束的整個過程。畫流程圖相對簡單易學的軟件工具有Raptor、Visio、PPT等,不同軟件各具優點,對于初學者選擇可以根據流程圖生成編程代碼的Raptor可視化工具作為講述編程軟件的先導課程。
累加和的實現過程分兩個方向展開:一方面憑借Raptor畫出累加和算法的流程圖,通過流程圖的執行過程了解各個變量取值變化和循環的動態執行過程;另一方面使用計算機編程語言把流程圖轉化為代碼,在計算機上調試運行。
3.1 "累加和之Raptor實現
Raptor是一種以繪制流程圖為基礎的可視化計算機編程工具[3],為計算機算法設計課程的教學提供實驗平臺,是計算機編程思維啟蒙類語言。使用Raptor繪制流程圖過程分為三步:首先在符號欄選擇需要符號添加到編輯區;其次在編輯區雙擊該符號對變量進行賦值等動作;最后點擊運行按鈕,觀看流程圖的執行過程,包括各個變量在循環過程中每一次的值變化及循環具體的走向過程,運行次數通過主控臺給出。使用Raptor設計的流程圖可以通過生成菜單直接轉換成為C++、C#、Java等高級程序語言,這就為計算機語言初學者搭建了一條平緩、向上的學習階梯。求100以內正整數累加和的Raptor流程圖如圖3所示。
3.2 "累加和之C語言實現
目前大部分高校的非計算機類專業教學的程序設計語言以C語言為主,C語言應用范圍廣,既具有高級語言的功能,又具有匯編語言的特色,并且C語言編寫的程序不依賴于具體的操作系統。C語言編寫的源程序是一個字符序列,這個字符序列包括保留字、常量、變量名、運算符、函數名等,若干條語句構成C語言源程序。C語言循環結構實現累加和算法有三種形式[4]:while循環、do~while循環、for循環。
3.2.1 "while循環 "while循環為當型循環,格式如下:
while(表達式){循環體語句;}
1)100以內的正整數和:
n=1,sum=0;
while(nlt;101){sum+=n;n+=1;}
2)100以內的奇數和:
n=1,sum=0;
while(nlt;101){sum+=n;n+=2;}
3)100以內奇數的倒數和:
n=1,sum=0;
while(nlt;101){sum+=1/n;n+=2;}
4)1-1/3+1/5-1/7+1/9-…+1/97-1/99的和:
n=1,f=1,sum=0;
while(nlt;101){sum+=f/n;f=-f;n+=2;}
3.2.2 "do~while循環 "do~while循環為直到型循環,格式如下:
do{循環體語句;}while(表達式);
求1-1/3+1/5-1/7+1/9-…+1/97-1/99的和:
f=1,n=1,sum=0;
do{sum+=f/n,f=-f,n+=2;}while(nlt;101);
3.2.3 "for循環 "for循環的格式如下:
for(表達式1;表達式2;表達式3){循環體語;}
一般情況下,表達式1代表循環變量的初值,表達式2代表進入循環的條件,表達式3代表循環變量的增值。
求1-1/3+1/5-1/7+1/9-…+1/97-1/99的和:
f=1,sum=0;
for(n=1;nlt;101;n+=2){sum+=f/n;f=-f;}
循環語句的典型應用是求累加和問題,三種循環結構處理求和類型不同:循環次數一定的求和問題習慣上用for循環實現,如求100以內的自然數和;循環次數未知的累加和問題用while循環和do~while循環來求解,如求累加和直到某項的值小于一個非常小的數為止。學生在使用循環語句時,要具體問題具體分析,掌握累加和算法的使用技巧后,理清解決問題的思路,定能用程序設計工具開發出最優的算法。
4 "累加和單元云教學設計
4.1 "云教學
所謂云教學,就是教師利用云服務把教學的各種信息收集在一起,學生只要注冊一個賬號并獲得教師的允許就能夠直接使用云資源。在云教學過程中,學生從“云”端以自主學習的方式對學習內容、學習方法、學習時間自由支配。所謂云下教學,是傳統課堂環節通過教師、學生及手機的參與,結合具體的實例項目和任務來強化云教學部分的教學重點,加強學生計算思維與創新能力的培養[5]。
4.2 "累加和云教學設計
累加和云教學設計過程如圖4所示。累加和云教學過程中,基于云教學的任務驅動[5]傳統教學模式即云下面對面互動尤為重要。計算機語言的教學,教師更要重視學生興趣的培養,課堂氣氛要活躍,在任務驅動的教學模式下要重視任務的趣味性、思想性等。為了使任務驅動中的任務能夠吸引學生的注意力,教師采用最多的是游戲驅動。采用游戲驅動課堂教學,快速使學生從玩手機游戲轉變為編游戲來玩。在具體的教學環節注重學生的主觀能動性,學生展示作品,把作品完成過程中最大的收獲講給大家聽,相互討論、共同提高。累加和算法教學過程中采用兔子繁殖、圓周率、小球自由落體等任務驅動,學生在游戲角色轉變過程中激發學習興趣,會不斷完善自己編寫的游戲,因而編程能力會大幅度提升。
4.3 "累加和云教學評價
累加和云教學設計是包含篩選、組織、實施和評價的閉環系統,是一個螺旋式上升的連環系統,其中課程評價體系是驗證和完善課程建設的必要環節。評價體系要求學生和教師共同參與,客觀地反饋學生的學習情況。評價系統建立包含學生信息、課堂表現、學習資料完成情況、考試成績等的學生電子檔案,包含教師信息、授課內容計劃、學員學習狀態、教師作業發放記錄、教師在知識點的測試記錄等的教師電子檔案[6]。電子檔案和云教學相關聯,授課教師利用后臺的教學統計功能實時掌握學生學習情況,及時發布作業提示和教學預警,以此實現對學生的學習監管。
累加和云教學評價體系是教師評價和學生評價的有機結合,是對累加和教學單元教學目標、教學方法、教師教學管理的綜合評價,是對學生學習參與度、學習興趣的激發度、學習過程和學習結果的有效評價。評價體系是教學過程的催化劑,教師和學生通過反思和調控激發自身潛能,達到理想的教學效果。
5 "結束語
累加和是循環語句的典型應用,累加和算法也是程序設計基礎課程中的基礎算法,該課程后續算法中的求階乘、完數問題和水仙花數問題等都是累加和問題的靈活運用,可見累加和算法的重要性。采用縱遞式學習技巧結合云教學使累加和算法易于學習掌握,學生能夠在不知不覺中把該縱遞式學習技巧應用到其他的算法學習中,提高學習興趣。循環結構解決了重復的動作,可以使程序簡潔易懂。在進行循環結構設計過程中一定要注意進入循環的條件和各種循環結構的區別。
程序設計基礎作為非計算機專業開設的重要基礎課程,在教學中首先應該強調通過算法設計解決問題的方法,其次才是對程序設計語言的教學。程序設計方法與程序設計語言在教學過程中是相融相通的,必須結合某種具體的程序設計語言進行算法的教學。經過一學期的學習,大部分學生能夠獨立編寫一些小程序。計算思維的建立是一個記憶、積累、實踐的循環過程,也是一個累加和的過程。學生靈活運用縱遞式學習技巧,結合云教學輔助平臺反復學習實踐,會收到事半功倍的效果。
參考文獻
[1] 葛文庚,藺莉.程序設計基礎課程教學模式研究與設
計[J].電子設計工程,2012,20(4):44-46,49.
[2] 程麗敏. C語言程序設計循環結構之“四要素學習法”
[J].電腦知識與技術,2020,16(29):121-123.
[3] 張曉芳,王志海,張磊.大學計算機基礎[M].北京:
北京郵電大學出版社,2017.
[4] 譚浩強.C語言程序設計[M].5版.北京:清華大學
出版社,2017.
[5] 黃淑芹,張海,王淮生.興趣驅動的Python語言課
程教學改革研究[J].電腦知識與技術,2020(17):
111-113.
[6] 王偉,李欣,薛冰.“線上線下混合教學”在研究生
培養中的實踐和思考[J].大學,2021(39):18-20.