国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于案例的C程序設(shè)計(jì)實(shí)驗(yàn)教學(xué)的探索

2019-12-04 02:42樊新華郭曉宇陳洪軍郭志
現(xiàn)代計(jì)算機(jī) 2019年2期
關(guān)鍵詞:素?cái)?shù)程序設(shè)計(jì)編程

樊新華,郭曉宇,陳洪軍,郭志

(東北大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院,國家級計(jì)算機(jī)實(shí)驗(yàn)教學(xué)示范中心,沈陽110819)

0 引言

2012年,教育部等七部門聯(lián)合頒布《教育部等部門關(guān)于進(jìn)一步加強(qiáng)高校實(shí)踐育人工作的若干意見》的文件,其中著重提出了強(qiáng)化實(shí)踐教學(xué)環(huán)節(jié)和深化實(shí)踐教學(xué)方法改革,要求制訂實(shí)踐教學(xué)標(biāo)準(zhǔn),增加實(shí)踐教學(xué)比重,并重點(diǎn)推行基于問題、基于項(xiàng)目、基于案例的教學(xué)方法和學(xué)習(xí)方法,加強(qiáng)綜合性實(shí)踐科目設(shè)計(jì)和應(yīng)用[1]。2016年,全球著名的Indeed和Glassdoor等門戶網(wǎng)站通過收集數(shù)據(jù),以總結(jié)出全球最受歡迎的編程語言及行業(yè)內(nèi)最需要的編程語言,發(fā)現(xiàn)C語言依然是編程人員最受大家歡迎的編程語言之一[2]。

《C程序設(shè)計(jì)》是大學(xué)的一門實(shí)踐性計(jì)算機(jī)基礎(chǔ)課程,實(shí)踐教學(xué)對學(xué)習(xí)具有重要作用,尤其是信息類專業(yè)?!禖程序設(shè)計(jì)》對后續(xù)課程學(xué)習(xí)至關(guān)重要。徐一秋等將PBL教學(xué)法應(yīng)用于程序設(shè)計(jì)實(shí)驗(yàn)教學(xué)中,強(qiáng)調(diào)以“問題”為中心,以學(xué)生自學(xué)為主的教學(xué)改革[3];陳婷采用“階梯式”、“案例式”課堂教學(xué)方法,以“項(xiàng)目驅(qū)動(dòng)式”實(shí)踐教學(xué)為核心,同時(shí)搭建多種自主學(xué)習(xí)平臺,采用更科學(xué)和完善的考核方式[4]。這一系列C程序設(shè)計(jì)實(shí)踐教學(xué)改革,對提高實(shí)踐教學(xué)效果,促進(jìn)學(xué)生掌握程序設(shè)計(jì)知識,提高編程能力起到了一定促進(jìn)作用。

因此,根據(jù)我校的工科程序設(shè)計(jì)的實(shí)際教學(xué)安排及多年的C程序設(shè)計(jì)實(shí)踐教學(xué)經(jīng)驗(yàn)和總結(jié),提出了專題案例教學(xué)方法并應(yīng)用實(shí)驗(yàn)教學(xué)實(shí)踐中,對學(xué)生的思維能力和編程能力的培養(yǎng)有明顯的提高。

1 設(shè)計(jì)思路

C程序設(shè)計(jì)的實(shí)踐教學(xué),一直是教學(xué)工作者探索的一個(gè)問題。實(shí)驗(yàn)題目的選擇和設(shè)計(jì),對學(xué)生編程能力的培養(yǎng)起到了至關(guān)重的作用。其中,黃宏博在函數(shù)實(shí)驗(yàn)教學(xué)中,設(shè)計(jì)了不同層次的不同問題,并根據(jù)學(xué)生的水平選取相應(yīng)的題目[4]。盧瑾等根據(jù)學(xué)生的認(rèn)知過程的階段性和實(shí)驗(yàn)難易的層次性,提出了一種階段式分層實(shí)驗(yàn)教學(xué)方案[5]。周靖將一個(gè)大項(xiàng)目分解成小項(xiàng)目的訓(xùn)練題目,并應(yīng)用在不同章節(jié)部分的實(shí)踐教學(xué)中[6]。但是,這些實(shí)驗(yàn)題目內(nèi)容之間相互獨(dú)立或題目難度過大,對大多數(shù)學(xué)生來說,不能激發(fā)學(xué)習(xí)的興趣,也不能培養(yǎng)學(xué)生思維能力。

因此,根據(jù)實(shí)驗(yàn)性質(zhì)和不同培訓(xùn)目的,可將程序設(shè)計(jì)課程實(shí)驗(yàn)分為基礎(chǔ)驗(yàn)證型、設(shè)計(jì)開發(fā)型和研究創(chuàng)新型三個(gè)類型[5-6],并且要求學(xué)生熟練掌握基礎(chǔ)驗(yàn)證型實(shí)驗(yàn),基本掌握設(shè)計(jì)開發(fā)型實(shí)驗(yàn),鼓勵(lì)掌握研究創(chuàng)新型實(shí)驗(yàn)。設(shè)計(jì)實(shí)驗(yàn)題目時(shí),按照階梯式思路設(shè)計(jì),一步一步地提出相關(guān)編程要求,引導(dǎo)學(xué)生思考和分析問題。題目前后相互關(guān)聯(lián),功能進(jìn)一步完善,以培養(yǎng)學(xué)生的邏輯思維能力,引導(dǎo)學(xué)會(huì)如何解決實(shí)際問題[7]。

2 實(shí)踐教學(xué)

在C程序設(shè)計(jì)實(shí)踐教學(xué)中,將緊密相關(guān)的知識,做成相應(yīng)的專題案例,如有趣的整數(shù)、素?cái)?shù)探索、猜數(shù)游戲、小學(xué)四則運(yùn)算、數(shù)值計(jì)算、方程求解、學(xué)生成績管理等。每個(gè)案例所涉及的問題,按基礎(chǔ)驗(yàn)證型、設(shè)計(jì)開發(fā)型和研究創(chuàng)新型進(jìn)行設(shè)計(jì),前后問題相關(guān)聯(lián)系,且難度一步步加深。

2.1 案例設(shè)計(jì)

由于實(shí)驗(yàn)課時(shí)有限,為使學(xué)生在有限的課堂時(shí)間掌握更多的內(nèi)容,必須精心設(shè)計(jì)實(shí)驗(yàn)案例。本文以“素?cái)?shù)探索”為例,說明具體案例設(shè)計(jì)過程。

素(質(zhì))數(shù)不僅是小學(xué)所學(xué)數(shù)論中的最基本的、最重要的概念,也是信息學(xué)競賽(NOIP)和程序設(shè)計(jì)競賽(ACM)中??嫉臄?shù)論知識,而且在密碼學(xué)中的加密解密算法中,素?cái)?shù)也被廣泛應(yīng)用于公鑰和密鑰的產(chǎn)生。另外,企業(yè)招聘的程序設(shè)計(jì)面試和計(jì)算機(jī)等級考試中也有一部分很典型的考題就是素?cái)?shù)問題的處理。在《C程序設(shè)計(jì)》教程中,都會(huì)有以素?cái)?shù)為主題的例題和編程題目[8],但只是一些零散的知識。在此,以素?cái)?shù)的概念為基礎(chǔ),并依據(jù)學(xué)生認(rèn)知的特點(diǎn),從易到難的順序進(jìn)行“素?cái)?shù)探索”專題案例設(shè)計(jì)[9-10],具體內(nèi)容如下:

所謂素?cái)?shù)是指除了1和它本身以外,不能被任何整數(shù)整除的數(shù),例如17就是素?cái)?shù),因?yàn)樗荒鼙?~16的任一整數(shù)整除。

問題1:素?cái)?shù)判斷

判斷一個(gè)正整數(shù)是否是素?cái)?shù)。

問題2:區(qū)間素?cái)?shù)

(1)判斷1-200之間有多少個(gè)素?cái)?shù),并輸出所有素?cái)?shù)。

(2)求m 和 n之間(m<=n)的所有素?cái)?shù),并求所有素?cái)?shù)和。

問題3:素?cái)?shù)分解

(1)(哥德巴赫猜想)將任意一個(gè)大于6的正偶數(shù)分解為兩個(gè)素?cái)?shù)之和。

(2)將一個(gè)正整數(shù)分解質(zhì)因數(shù)。例如:輸入90,打印出 90=2×3×3×5。

問題4:特殊素?cái)?shù)

(1)因?yàn)?51既是一個(gè)素?cái)?shù),又是一個(gè)回文數(shù)(從左到右和從右到左是看一樣的),所以151是回文素?cái)?shù)。寫一個(gè)程序來找出范圍[a,b](5<=a<=b<10000)間的所有回文素?cái)?shù)。

(2)如果n和n+2都是素?cái)?shù),則稱它們是孿生素?cái)?shù)。輸入m(5<=m<=10000),輸出2個(gè)均不超過 m的最大孿生素?cái)?shù)。例如m=20時(shí)候,答案為17、19,m=1000的時(shí)候,答案等于881、883。

這些題目主要應(yīng)用到邏輯結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的相關(guān)知識,要求學(xué)生熟悉邏輯結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的使用方法及程序測試方法,并掌握解決問題的一些常見算法。

2.2 實(shí)驗(yàn)教學(xué)

在實(shí)驗(yàn)教學(xué)過程中,應(yīng)用實(shí)驗(yàn)教學(xué)系統(tǒng)平臺對C程序設(shè)計(jì)實(shí)驗(yàn)進(jìn)行全程管理,主要包括實(shí)驗(yàn)發(fā)布、預(yù)習(xí)測試、實(shí)驗(yàn)指導(dǎo)和實(shí)驗(yàn)報(bào)告遞交等。

(1)實(shí)驗(yàn)預(yù)習(xí)

實(shí)驗(yàn)預(yù)習(xí)是對實(shí)驗(yàn)涉及的知識的復(fù)習(xí),并深入了解實(shí)驗(yàn)內(nèi)容,學(xué)生必須注重這一環(huán)節(jié)。通過實(shí)驗(yàn)教學(xué)系統(tǒng)發(fā)布實(shí)驗(yàn)內(nèi)容,學(xué)生可以根據(jù)實(shí)驗(yàn)?zāi)康暮鸵螅崆皺z查自己對實(shí)驗(yàn)所涉及的基本概念和基礎(chǔ)知識的掌握程度,并獨(dú)立完成所布置的相關(guān)測試,對錯(cuò)題的知識點(diǎn)進(jìn)行查漏補(bǔ)缺。同時(shí),要求學(xué)生對于實(shí)驗(yàn)內(nèi)容中的題目進(jìn)行分析、寫出解題思路并畫出流程圖,然后編寫出程序。

(2)實(shí)驗(yàn)講解

在每次實(shí)驗(yàn)課前,對于實(shí)驗(yàn)中所用到的基礎(chǔ)知識和基本技巧進(jìn)行講解,就上述專題案例講解如下:

首先,講解實(shí)驗(yàn)過程中需要的基礎(chǔ)知識,主要包括:

①控制結(jié)構(gòu)語句的格式及使用方法,及使用中的注意事項(xiàng);

②數(shù)組的定義、初始化和輸入輸出方法;

③函數(shù)的定義方法、調(diào)用方法、參數(shù)說明以及返回值,掌握實(shí)參與形參的對應(yīng)關(guān)系,以及參數(shù)之間的“值傳遞”的方式。

其次,學(xué)會(huì)分析問題的方法,并會(huì)使用流程圖表示算法;掌握一些常用算法,并在編程過程中體驗(yàn)各種算法的編程技巧,進(jìn)一步學(xué)習(xí)調(diào)試程序,掌握檢查語法錯(cuò)誤和邏輯錯(cuò)誤的方法;分析程序運(yùn)行效率并進(jìn)行優(yōu)化程序。

(3)思路與要求

對于上述案例的實(shí)驗(yàn)教學(xué),對每個(gè)問題給出要求和提示,并一步步地提出相關(guān)問題,引導(dǎo)學(xué)生分析問題,最后完成編程和程序測試工作。具體教學(xué)過程如下:

問題1:

主要用到C語言中的分支和循環(huán)結(jié)構(gòu)。首先輸入一個(gè)數(shù),判斷輸入數(shù)是否為正整數(shù)。其次判斷一個(gè)正整數(shù)m是素?cái)?shù)有多種方法:

①讓 m依次被2,3,…,m-1除,如果 m不能被2~m-1中的任何一個(gè)整數(shù)整除,則m是素?cái)?shù)。

②讓m依次被2,3,…,m/2除,如果m不能被2~m/2中的任何一個(gè)整數(shù)整除,則m是素?cái)?shù)。

③讓m依次被2,3,…,sqrt(m)除,如果m不能被2~sqrt(m)中的任意一個(gè)整數(shù)整除,則m為素?cái)?shù)。sqrt(m)為m的平方根。

引導(dǎo)學(xué)生用不同的方法來實(shí)現(xiàn)素?cái)?shù)的判斷,并提示用到了sqrt()函數(shù)時(shí),別忘了引入頭文件#include<math.h>。

為了減少循環(huán)判斷的次數(shù),提高程序的執(zhí)行效率,因此,編程需要想辦法減少循環(huán)的檢查次數(shù)。通過比較這三種方法的執(zhí)行次數(shù)的數(shù)量級,明白程序優(yōu)化方法,第③種方法判斷速度最快,可以采用這種方法。

問題2:

(1)主要用到C語言中的分支、循環(huán)和循環(huán)嵌套結(jié)構(gòu)的知識。提示學(xué)生應(yīng)用問題1的方法進(jìn)行素?cái)?shù)的判斷。也可以要求在顯示輸出結(jié)果時(shí),要求每行輸出5個(gè)素?cái)?shù),最后一行顯示總個(gè)數(shù),等等。

(2)方法同問題2(1)。但要判斷輸入m和n值是否符合要求,并給出相應(yīng)的提示信息。

問題3:

(1)設(shè)n為大于等于6的一個(gè)偶數(shù),可將其分解為n1和n2兩個(gè)數(shù),分別檢驗(yàn)n1和n2是否為素?cái)?shù),若都是,則該數(shù)得到驗(yàn)證。若n1不是素?cái)?shù),就不必再檢查n2是否為素?cái)?shù)。先從n1=3開始,檢驗(yàn)n1和n2(=nn1)是否為素?cái)?shù)。然后使n1+2再檢驗(yàn)n1,n2是否為素?cái)?shù)……直到n1=n/2為止。

(2)從1到N先找出最小的質(zhì)因數(shù),如果等于本身,那么說明只有一個(gè)質(zhì)因數(shù),如果不是,那么將該質(zhì)因數(shù)打印出來,并將N/該質(zhì)因數(shù)作為新的N值進(jìn)行運(yùn)算。

對n進(jìn)行分解質(zhì)因數(shù),應(yīng)先找到一個(gè)最小的質(zhì)數(shù)k,然后按下述步驟完成:

①如果這個(gè)質(zhì)數(shù)恰等于n,則說明分解質(zhì)因數(shù)的過程已經(jīng)結(jié)束,打印出即可。

②如果n<>k,但n能被k整除,則應(yīng)打印出k的值,并用n除以k的商,作為新的正整數(shù)n,重復(fù)執(zhí)行第一步。

③如果n不能被k整除,則用k+1作為k的值,重復(fù)執(zhí)行第一步。

改進(jìn):因?yàn)樵谒械馁|(zhì)數(shù)中只有2是偶數(shù)外,其他的質(zhì)數(shù)都是奇數(shù)。所以i可以一次+2跳過所有的偶數(shù)。不過2要特別處理。

問題4:

(1)對于判斷一個(gè)正整數(shù)是否是回文數(shù),應(yīng)該首先要明白回文的概念,其次是如何將一個(gè)正整數(shù)進(jìn)行反轉(zhuǎn)過來,最后是判斷是否是回文數(shù)。如何將一個(gè)正整數(shù)進(jìn)行反轉(zhuǎn)有不同的方法,可以應(yīng)用循環(huán)、取模、整除的知識;也可以轉(zhuǎn)換成字符串,可以使用字符串操作的進(jìn)行反轉(zhuǎn)。求正整數(shù)反轉(zhuǎn)的方法很多,這里提供一個(gè)簡單的方法,代碼如下:

int m=0;

while(n>0)

{

m=m*10+n%10;

n=n/10;

}

就可以將n進(jìn)行反轉(zhuǎn)數(shù)位,變?yōu)閙。

(2)可以把所有滿足條件的孿生素?cái)?shù)找出來再比較大小,但這樣過于繁瑣,所以,我們只需用一循環(huán),從小于m的數(shù)開始倒序查找符合條件的孿生素?cái)?shù),一找到就輸出,那輸出的便是最大孿生素?cái)?shù)了。

在實(shí)際編程過程中,考慮問題必須全面、嚴(yán)謹(jǐn)。例如這里討論的是素?cái)?shù),所以輸入條件時(shí),一定要對其輸入值判斷,使其滿足實(shí)際和題目的要求。可以用不同方法實(shí)現(xiàn),例如可使用篩選法(Eratosthenes)求出素?cái)?shù)[10],并用數(shù)組保存整數(shù)。

當(dāng)生成大量數(shù)據(jù)時(shí),可以將數(shù)據(jù)保存到文件中,就涉及到文件的讀寫知識。可以將這些問題應(yīng)用到不同章節(jié)中,在控制結(jié)構(gòu)部分,練習(xí)分支、循環(huán)結(jié)構(gòu)的知識;在數(shù)組部分,練習(xí)數(shù)組的定義、讀寫的知識;在函數(shù)部分,練習(xí)函數(shù)的定義、調(diào)用的知識;在文件部分,練習(xí)文件的創(chuàng)建、讀寫的知識。

在實(shí)際實(shí)驗(yàn)教學(xué)中,對基礎(chǔ)不同的學(xué)生,設(shè)計(jì)不同的問題,實(shí)行分層實(shí)驗(yàn)教學(xué)。通過這種分層案例可以讓學(xué)生掌握所學(xué)程序設(shè)計(jì)知識,更進(jìn)一步訓(xùn)練了學(xué)生分析實(shí)際問題能力和創(chuàng)新思維。

(4)實(shí)驗(yàn)考核

為了真正從程序設(shè)計(jì)能力角度對學(xué)生進(jìn)行評價(jià),采用以下幾方面進(jìn)行實(shí)驗(yàn)課程的考核,并各項(xiàng)分配不同的權(quán)重,以期激發(fā)學(xué)生平時(shí)注重實(shí)踐和能力培養(yǎng)。

①現(xiàn)場驗(yàn)收:通過學(xué)生講解、提問、答辯等方面的表現(xiàn),了解學(xué)生對分析問題、編程技能、程序測試能力的水平。

②自主創(chuàng)新:在所實(shí)現(xiàn)程序的基礎(chǔ)上,進(jìn)一步提出新的要求,以考核學(xué)生的自主思考與獨(dú)立實(shí)踐能力。

③實(shí)驗(yàn)考試:通過一組編程題目,測試學(xué)生對解決實(shí)際問題的編程能力。

④實(shí)驗(yàn)報(bào)告:實(shí)驗(yàn)報(bào)告要求規(guī)范性與完整性,重點(diǎn)要寫清設(shè)計(jì)思路和程序清單。

3 結(jié)語

C程序設(shè)計(jì)的實(shí)驗(yàn)環(huán)節(jié)對學(xué)生實(shí)際動(dòng)手能力和解決實(shí)際問題能力的培養(yǎng)有著重要作用。根據(jù)學(xué)生興趣和專業(yè)的實(shí)際情況,結(jié)合實(shí)驗(yàn)教學(xué)的目標(biāo)和要求,提出實(shí)驗(yàn)專題案例教學(xué)方法。通過一個(gè)具體的“素?cái)?shù)探索”專題案例,說明專題案例的設(shè)計(jì)、實(shí)驗(yàn)教學(xué)的全過程。在專題案例設(shè)計(jì)中,所提問題的知識點(diǎn)前后相關(guān)、難度依次加強(qiáng);在專題案例實(shí)驗(yàn)教學(xué)中,對不同問題提出不同要求并實(shí)現(xiàn)編程。將專題案例教學(xué)法應(yīng)用到《C程序設(shè)計(jì)》實(shí)驗(yàn)課中,大大地提高了學(xué)習(xí)編程的興趣,激發(fā)了學(xué)生討論問題的熱情。同時(shí),使學(xué)生掌握程序設(shè)計(jì)知識,培養(yǎng)了學(xué)生分析問題和編程能力,并養(yǎng)成嚴(yán)謹(jǐn)縝密思考問題的習(xí)慣。另外,要達(dá)更良好的教學(xué)效果,實(shí)驗(yàn)教學(xué)環(huán)節(jié)還需要進(jìn)一步重視對學(xué)生引導(dǎo)。專題案例實(shí)驗(yàn)教學(xué)法對于其他語言程序設(shè)計(jì)(如C++、C#、Java、Python等)的實(shí)驗(yàn)教學(xué),也是一種有益的借鑒。

猜你喜歡
素?cái)?shù)程序設(shè)計(jì)編程
基于SolidWorks和VBA的電機(jī)階梯軸建模程序設(shè)計(jì)
項(xiàng)目化教學(xué)在Python程序設(shè)計(jì)課程中的應(yīng)用
醫(yī)學(xué)專業(yè)“Python程序設(shè)計(jì)”課程教學(xué)改革總結(jié)與思考
元征X-431實(shí)測:奔馳發(fā)動(dòng)機(jī)編程
編程小能手
紡織機(jī)上誕生的編程
從細(xì)節(jié)入手,談PLC程序設(shè)計(jì)技巧
學(xué)編程,先畫畫
等距素?cái)?shù)對初探
孿生素?cái)?shù)新紀(jì)錄