崔孝鳳
摘要:對(duì)于c語言的初學(xué)者來說,激發(fā)出學(xué)習(xí)c語言的興趣至關(guān)重要,該文通過探討完美數(shù)的多種實(shí)現(xiàn)方法的案例教學(xué),同時(shí)列舉完美數(shù)特有性質(zhì),激發(fā)學(xué)生的學(xué)習(xí)興趣,提高教學(xué)質(zhì)量。
關(guān)鍵詞:c語言;完美數(shù);案例教學(xué);興趣
中圖分類號(hào):G642 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2020)10-0084-02
1概述
興趣是最好的老師,學(xué)習(xí)c語言自然也不例外。非計(jì)算機(jī)專業(yè)的學(xué)生學(xué)習(xí)c語言難度確實(shí)不小,如何激發(fā)學(xué)生的學(xué)習(xí)興趣是擺在每一位任課教師面前的一項(xiàng)重要的任務(wù)。C語言編程中有很多題目是很有意思的,如果教師適當(dāng)?shù)赝诰蛞幌逻@些題目的前因后果,學(xué)生就會(huì)容易產(chǎn)生興趣,從而調(diào)動(dòng)起學(xué)習(xí)積極性,當(dāng)學(xué)習(xí)積極性一旦調(diào)動(dòng)了起來,何愁學(xué)習(xí)不好呢?本文通過研究用C語言實(shí)現(xiàn)完美數(shù)的輸出的算法以及源代碼,同時(shí)對(duì)完美數(shù)的特征做一簡(jiǎn)單介紹,主要目的在于激發(fā)學(xué)生的學(xué)習(xí)興趣,提高教學(xué)質(zhì)量。
2完美數(shù)的定義
完美數(shù),又稱完全數(shù)或完備數(shù),是一些特殊的自然數(shù),它所有的真因子(即除了自身以外的約數(shù))之和恰好等于它本身。例如數(shù)字6是最小的完美數(shù),它的真因子有1、2、3,這三個(gè)數(shù)之和正好與6相等,數(shù)字28是第二個(gè)完美數(shù),它的真因子有1、2、4、7、14,這5個(gè)數(shù)之和也正好與28相等。完美數(shù)的數(shù)量是比較少的,千百年來一直吸引著無數(shù)的數(shù)學(xué)家及其愛好者不懈地尋找著,目前人們共找到了僅僅五十多個(gè)完美數(shù),由此可見,在浩瀚的數(shù)字海洋中完美數(shù)確實(shí)是稀少的,所以有“數(shù)論寶庫中的‘鉆石”之稱。
3完美數(shù)帶給我們的美感
首先完美數(shù)本身的定義就容易讓人自然地產(chǎn)生一種美感,試想一下,其真因子之和與其本身相等,這真的是大自然的神奇之作,讓我們驚嘆之余,心中的美感油然而生,對(duì)于c語言的學(xué)習(xí)者來說當(dāng)然也不例外。另外,完美數(shù)還有一些特殊的性質(zhì),比如都是以6或者8結(jié)尾等,教師給學(xué)生講課時(shí)不妨稍微擴(kuò)展一下完美數(shù)的這些特殊的性質(zhì),這樣,自然能夠吸引學(xué)生,學(xué)生一定會(huì)很想知道用c語言如何編程能求出更多的完美數(shù)。從而激發(fā)學(xué)生學(xué)習(xí)的興趣,提高教學(xué)質(zhì)量。
4用C語言編程輸出完美數(shù)
使用計(jì)算機(jī)枚舉法,只要依次找出某個(gè)數(shù)的所有真因子,然后驗(yàn)證一下是否所有真因子之和與該數(shù)本身相等即可,若相等即為完美數(shù),借助于計(jì)算機(jī)的高速度,這個(gè)方法是可行的,經(jīng)過不少數(shù)學(xué)家及業(yè)余愛好者研究,到2018年12月6日為止,一共找到了51個(gè)完美數(shù)。下面研究一下用C語言實(shí)現(xiàn)一個(gè)上限n(某個(gè)整數(shù),比如10000),輸出1至n之間的所有完美數(shù)及其個(gè)數(shù)的算法以及源代碼。
4.1方法一:使用簡(jiǎn)單的窮舉法算法概述:
第一步:輸入上限n的值;
第二步:查找出所有n的真因子;
第三步:判斷所有真因子之和是否與n相等,若相等則將其輸出并將完美數(shù)的數(shù)量加一,否則不輸出。
第四步:輸出完美數(shù)的個(gè)數(shù)。
C語言源代碼如下:
//輸入1至n之間的所有完美數(shù)及其個(gè)數(shù)
4.2方法二:改進(jìn)的窮舉法
上述程序中求某數(shù)的因子時(shí),采用從1到i-1范圍內(nèi)進(jìn)行遍歷的方法,一個(gè)數(shù)一個(gè)數(shù)地去試。這種方法可以做到?jīng)]有遺漏,但是效率不高。
對(duì)于某一整數(shù)來說,當(dāng)n為偶數(shù)時(shí)其最大真因子為n/2,當(dāng)n為奇數(shù)時(shí)其最大真因子小于n/2,在n/2-n-1范圍內(nèi)不存在n的真因子。據(jù)此,我們可以把遍歷范圍縮小至1-n/2,這樣程序效率可以提高一倍。具體到代碼的修改只要把程序中的第2個(gè)for循環(huán)語句for(j=1;j
4.3方法三:使用函數(shù)實(shí)現(xiàn)
上面的算法沒有使用函數(shù),學(xué)習(xí)函數(shù)時(shí)仍然可以使用此例,設(shè)計(jì)名稱為f_wms的函數(shù),功能為判斷形參k是否為完美數(shù)。如果是完美數(shù)則返回1,否則返回0。在主函數(shù)中調(diào)用此函數(shù)即可。
C語言源代碼如下:
//輸出1至n之間的所有完美數(shù)及其個(gè)數(shù)
5結(jié)束語
以上對(duì)完美數(shù)的定義、特有性質(zhì)及用c語言輸出算法及代碼進(jìn)行了探究,相信必然能引起學(xué)生的濃厚的學(xué)習(xí)興趣,提高C語言的教學(xué)質(zhì)量。