蔣 靜
(廣西師范大學計算機科學與信息工程學院,廣西 桂林 541004)
C語言是廣泛使用的計算機語言之一,并且有著較好的應用前景。C語言是計算機二級考試要求的課程之一,它是高等學校理工科本科專業(yè)的一門重要基礎課程。C語言作為程序設計的語言被專業(yè)程序員設計操作系統(tǒng)、實時控制系統(tǒng)及許多應用軟件,如目前的UNIX操作系統(tǒng)、Windows操作系統(tǒng)就是用C/C++設計的。
對于數(shù)學專業(yè)的學生來說,在教學上應注重知識應用能力的培養(yǎng)。如果能將某些數(shù)學問題注入到C語言的學習中,讓學生使用C語言編寫簡單的程序來解決這些數(shù)學問題,那么學生就能更快、更好地掌握所學的知識,更能提高學生的思維能力和利用所學知識來解決實際問題的能力。
C語言有三種基本結構:順序結構、選擇結構和循環(huán)結構。對于這三種結構的學習和掌握,是C語言中非常重要的任務[1-4]。為了讓數(shù)學專業(yè)的學生能夠更牢固地掌握這三種結構,本文將利用編寫搜索一個經(jīng)典的數(shù)學結構的程序來加深學生對這三種基本結構的了解,同時也培養(yǎng)了學生運用知識的能力。
在C語言教學中,如果教師給出一個有趣的數(shù)學結構,那么對于數(shù)學專業(yè)的學生來說,不僅能夠引起他們的好奇心,更能集中他們的注意力,這也有利于教師展開課堂教學。因此,我們首先可以給出一個簡單而有趣的例子。
例1設集合D={0,1,3},則

設Z7為模7剩余類環(huán)。若D={0,1,3}?Z7,則{xy|x,y∈D}={1,2,3,4,5,6}=Z7{0}。
通過以上的例子,我們要引導學生思考一個問題:對于一般的正整數(shù)k,v,是否存在集合D?Zv,使D中恰有k個元素,且{x-y|x,y∈D}=Zv{0}。若存在,我們能否用程序搜索出來。學生帶著這樣的問題思考一段時間后,我們再給出這種結構的精確定義。
定義1[5]設G為v階Abel群,其運算為加法。設D是G的一個k元子集,λ為給定的正整數(shù)。若對中任意非零元g,都有λ個序對(x,y),其中x,y∈G,使g=x-y,則稱D為G中的一個(v,k,λ)-Abel差集或簡稱差集。
差集是組合設計理論中一個非常重要的概念,在很多領域有著重要的應用。對于本科生,上述定義較難理解。因此,我們可以考慮一個比較簡單的情況,便于學生理解,進而更容易進行程序的編寫。
定義2設Zv為模v剩余類環(huán),D是Zv的一個k元子集。若{x-y|x,y∈D}=Zv{0},則稱D為Zv中的一個(v,k,1)-差集。
在給出這樣一個較為簡單的定義以后,為了便于學生理解,將其與例1作比較,我們可以再給出一個差集的例子。
例2設D={0,1,4,6}?Z13。因為{x-y|x,y∈D}={1,2,3,4,5,6,7,8,9,10,11,12}=Z13{0}
所以稱D為Z13中的一個(13,4,1)-差集。
差集的存在性在文獻[6]中給出了詳細的說明,在這里我們不需要給出,而只需考慮比較簡單的情況,即k∈[3,10]的情況。
定理1[6]對任意的整數(shù)k∈[3,10]{7},存在一個(k(k-1)+1,k,1)-差集。
到目前為止,我們可以將問題描述為:利用C語言的三種基本結構編寫程序,找到定理1中所有的差集,即(k(k-1)+1,k,1)-差集,其中k∈[3,10]{7}。
在本節(jié)中,我們將介紹如何用C語言的三種基本結構編寫程序來解決上一節(jié)所提出的問題。
顯然,在此程序中,我們需要用到的變量為正整數(shù)k,v,循環(huán)控制變量i,以及大小為k的集合D。C語言的語句如下:

根據(jù)定理1,程序的輸入應為一個正整數(shù),且滿足k∈[3,10]{7}。我們可以利用一個循環(huán)語句,來控制輸入,即當輸入的值屬于[3,10]{7}時,結束循環(huán)。因此我們可以利用“do-while”循環(huán)語句來實現(xiàn)。C語言語句如下:

因為程序是依次找出滿足要求的元素D[i],0≤i≤k-1,所以我們可以利用while循環(huán)語句,來控制此循環(huán)。另外,在檢驗集合D中的元素所產(chǎn)生的差不相同時,可以利用以下函數(shù)來判斷:

C語言語句如下:

從上述過程我們可以看出:此程序運用了三種基本結構,其中選擇結構有if語句和if-else語句,讓學生能在實踐中進一步理解這兩種語句的不同之處;循環(huán)結構有do-while語句、while語句和for語句,讓學生能更好地發(fā)現(xiàn)這三種語句的區(qū)別與聯(lián)系。
在本文中,我們根據(jù)數(shù)學專業(yè)學生的特點,首先提出了一個有趣的數(shù)學問題,讓學生們產(chǎn)生了對此問題的興趣,進而激起了他們編寫C語言程序的興趣。然后我們根據(jù)給出的數(shù)學結構的特點,結合C語言的語句的特點,讓學生們在編寫程序的過程中體會這三種基本結構的特點和用途,讓學生能更好的掌握這三種基本結構。
參考文獻(References):
[1]譚浩強.C程序設計(第四版)[M].清華大學出版社,2010.
[2]蘇小紅,孫志剛,陳惠鵬等.C語言大學實用教程(第4版)[M].電子工業(yè)出版社,2017.
[3]王仕勛,佘鳳.C語言程序設計項目教程[M].科學出版社,2011.
[4]烏云高娃,沈翠新,楊淑萍.C語言程序設計(第3版)[M].高等教育出版社,2015.
[5]沈灝.組合設計理論[M].上海交通大學出版社,2008.
[6]Charles J.Colbourn and Jeffrey H.Dinitz.The CRC Handbook ofCombinatorial Designs(Second Edition)[M].FL:Chapman&Hall/CRC,2007.