崔孝鳳


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