段紅義 王惠惠
摘 要:C程序循環(huán)嵌套結(jié)構(gòu)設(shè)計是C程序循環(huán)結(jié)構(gòu)教學(xué)一章的重點與難點內(nèi)容,是后續(xù)數(shù)據(jù)結(jié)構(gòu)課程算法實現(xiàn)中使用頻率最多的語句,是進(jìn)行復(fù)雜程序設(shè)計的基礎(chǔ)。該文將針對初學(xué)者實際情況,通過教學(xué)實例的設(shè)計,由淺入深,采用類比、啟發(fā)等多種教學(xué)方法,分析循環(huán)嵌套結(jié)構(gòu)程序的設(shè)計思路與設(shè)計方法,幫助學(xué)生掌握C語言循環(huán)嵌套結(jié)構(gòu)設(shè)計的實質(zhì),提高利用循環(huán)嵌套結(jié)構(gòu)解決實際問題的能力。
關(guān)鍵詞:C語言 循環(huán)嵌套 教學(xué)設(shè)計
中圖分類號:TP31 文獻(xiàn)標(biāo)識碼:A 文章編號:1674-098X(2015)03(a)-0120-02
The Inquiry Teaching Design of Nested Loop Structure on C Language
Duan Hongyi,Wang Huihui
(Science Department of Hetao College,Bayannaoer,Inner Mongolia,015000,China)
Abstract:The C program nested loop structure design is the key and difficult points in chapter C program loop structure teaching, is the follow-up data structure course algorithm in the most frequently used sentence, is the basis for complex programming. This paper will according to the actual situation of beginners, by design, the teaching examples from the shallower to the deeper, by analogy, inspiration and so on many kinds of teaching methods, design analysis and design method of loop nesting structure of the program, to help the students to grasp the essence of C language nested loop structure design, improve the ability of using the nested loop structure to solve the practical problems.
Key Words:C language;Loop nests;Teaching design
C語言是一門面向過程的結(jié)構(gòu)化程序設(shè)計語言,其程序設(shè)計的基本結(jié)構(gòu)單元主要由順序結(jié)構(gòu)、選擇結(jié)構(gòu)與循環(huán)結(jié)構(gòu)三種基本結(jié)構(gòu)組成。其中選擇結(jié)構(gòu)與循環(huán)結(jié)構(gòu)在程序設(shè)計中最為重要且使用較多,對于后續(xù)課程數(shù)據(jù)結(jié)構(gòu)來說,其算法實現(xiàn)主要以這兩種結(jié)構(gòu)為主,所以在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)之前,學(xué)生必須要通過C語言的學(xué)習(xí)打下良好的程序設(shè)計基礎(chǔ),深入理解并掌握這兩種程序結(jié)構(gòu),并能夠正確設(shè)計與閱讀理解這兩種結(jié)構(gòu)的程序。在循環(huán)結(jié)構(gòu)程序設(shè)計中,循環(huán)的嵌套程序設(shè)計是一個重點與難點內(nèi)容,該文結(jié)合作者從教以來教授C語言的教學(xué)經(jīng)驗及心得體會,探討如何教會學(xué)生理解并掌握循環(huán)嵌套結(jié)構(gòu)的設(shè)計,提高利用循環(huán)嵌套解決實際問題的能力。
1 循環(huán)嵌套教學(xué)內(nèi)容引入及設(shè)計
循環(huán)嵌套結(jié)構(gòu)程序設(shè)計的基礎(chǔ)是循環(huán)結(jié)構(gòu),在學(xué)習(xí)循環(huán)嵌套結(jié)構(gòu)程序設(shè)計之前需要掌握C語言中實現(xiàn)循環(huán)結(jié)構(gòu)的三種語句,while語句、do...while語句以及for語句,在此基礎(chǔ)上學(xué)習(xí)循環(huán)的嵌套。首先需要知道循環(huán)嵌套的概念:一個循環(huán)的循環(huán)體內(nèi)包含另外一個完整的循環(huán)結(jié)構(gòu),稱為循環(huán)的嵌套,內(nèi)嵌的循環(huán)還可以繼續(xù)嵌套循環(huán),構(gòu)成多層循環(huán)。循環(huán)的嵌套結(jié)構(gòu)本質(zhì)上仍是一個循環(huán)語句,只不過其循環(huán)體為一個循環(huán)語句罷了。C語言中三種循環(huán)語句可以互相嵌套構(gòu)成循環(huán)嵌套結(jié)構(gòu)。由于for語句在C語言中最為靈活,下面以for語句為例來討論循環(huán)的嵌套結(jié)構(gòu)。
1.1 循環(huán)嵌套結(jié)構(gòu)程序的引入
為了便于理解循環(huán)嵌套,首先舉一個簡單的循環(huán)結(jié)構(gòu)的例子來引入嵌套。
例1:輸出123456789。
該例子如果利用for循環(huán)設(shè)計,學(xué)生可以輕松寫出如下語句。
int i;
for(i=1;i<=9;i++)
printf(“%d”,i);
如果對該例進(jìn)行修改,要設(shè)計以下程序。
例2:輸出5行123456789。對于該例來說,可以使用循環(huán)的嵌套來設(shè)計程序。
1.2 循環(huán)嵌套結(jié)構(gòu)設(shè)計
我們可以利用循環(huán)語句的設(shè)計思路來解決這個問題,這個例子的關(guān)鍵在于循環(huán)體語句為輸出123456789及換行符,即要循環(huán)5次123456789以及換行符。這里我們先把上述代碼以及輸出換行符語句看成一個整體即一個語句塊。比如用語句塊一來表示,則可以寫出如下的程序代碼。
int j;
for(j=1;j<=5;j++)
{
語句塊一;
}
由于語句塊一的代碼為:
int i;
for(i=1;i<=9;i++)
printf(“%d”,i);
printf(“\n”);
所以將語句塊一用上述代碼進(jìn)行替換,可以寫出例2完整代碼如下:
int j;
for(j=1;j<=5;j++)
{
int i;
for(i=1;i<=9;i++)
printf(“%d”,i);
printf(“\n”);
}
通過這個例子看出,外循環(huán)決定內(nèi)循環(huán)(把內(nèi)循環(huán)看成一個整體)的執(zhí)行次數(shù),而內(nèi)循環(huán)則控制每行內(nèi)循環(huán)的次數(shù)。在這個例子中,內(nèi)循環(huán)變量與外循環(huán)變量之間沒有關(guān)系,下面我們再來看一個稍微復(fù)雜一些的例子,內(nèi)循環(huán)變量執(zhí)行的次數(shù)取決于當(dāng)前的外循環(huán)變量,來進(jìn)一步理解循環(huán)嵌套結(jié)構(gòu)程序。
例3:設(shè)計程序輸出如下的圖案數(shù)字。
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
這個例子要打印5行數(shù)字,故外循環(huán)次數(shù)為5,設(shè)外循環(huán)變量為i,取值為1~5,再看每一行要打印的數(shù)字的個數(shù)為1,2,3,4,5,即循環(huán)的次數(shù)為1,2,3,4,5,假設(shè)用j表示內(nèi)循環(huán)變量,那么,內(nèi)循環(huán)變量與外循環(huán)變量有什么關(guān)系?假設(shè)我們要打印的是第i行上的數(shù)字,可以發(fā)現(xiàn)其打印的數(shù)字j取值為1到i。找到了規(guī)律就可以寫出的循環(huán)嵌套程序段:
int i,j;
for(i=1;i<=5;i++)
{
for(j=1;j<=i;j++)
printf(“%d ”, j);
printf(“\n”);
}
通過這個例子我們可以引導(dǎo)學(xué)生,寫出如下圖案的程序段。
例4:設(shè)計程序輸出如下的圖案數(shù)字。
1
1 3
1 3 5
1 3 5 7
1 3 5 7 9
提示學(xué)生這個程序可以有2種寫法。
第一種寫法:通過觀察,發(fā)現(xiàn)例3與例4只是每一行上輸出的數(shù)字不同,即需要修改例3的內(nèi)循環(huán)語句printf(“%d ”, j);即可。顯然第i行上打印的是一個等差數(shù)列,其打印的第j個數(shù)字應(yīng)為2*j-1。即例4對應(yīng)的語句為printf(“%d ”, 2*j-1);
第二種寫法:不改變例3的printf(“%d ”,j);輸出語句,則需要修改內(nèi)循環(huán)for(j=1;j<=i;j++),分析可知第i行的內(nèi)循環(huán)次數(shù)為i,而打印的數(shù)字最大值j為2*i-1,后一個打印的數(shù)比前一個數(shù)大2,即步長為2,則將例3的內(nèi)循環(huán)語句改為for(j=1;j<=2*i-1;j+=2)即可。
通過上面例3、例4兩個程序的設(shè)計,學(xué)生基本上能夠掌握循環(huán)的嵌套結(jié)構(gòu)了,對循環(huán)的嵌套有了更深入的理解,并能利用循環(huán)嵌套結(jié)構(gòu)設(shè)計并解決簡單的實際問題了。
例5:打印如下圖的九九乘法表。
這個例子與例3比較相似,一共要打印九行,故外循環(huán)為9次,假設(shè)用i來表示外循環(huán)變量,其值應(yīng)為1到9;第i行打印輸出i個數(shù),假設(shè)用j來表示內(nèi)循環(huán)變量,即內(nèi)循環(huán)變量j取值為1到i。并且能寫出第i行第j個要打印輸出的數(shù)為:printf(“%d×%d=%4d”,j,i,j*i);有了例3,例4的基礎(chǔ)可以寫出如下的程序:
int i,j;
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
printf(“%d×%d=%4d ”,j,i,j*i);
printf(“\n”);
}
2 結(jié)語
在循環(huán)嵌套結(jié)構(gòu)設(shè)計教學(xué)中,教師要充分考慮學(xué)生的實際情況,要考慮不同專業(yè)、不同層次學(xué)生的理解能力,設(shè)計針對學(xué)生實際情況的教學(xué)用例,從淺顯易懂的例子出發(fā),逐步引導(dǎo)學(xué)生思考,采用類比,啟發(fā)等多種教學(xué)方法,教學(xué)實踐證明,這種方法能夠很好的調(diào)動學(xué)生的學(xué)習(xí)積極性,學(xué)生的理解能力與程序設(shè)計能力有了明顯的提高。
參考文獻(xiàn)
[1] 譚浩強(qiáng).C程序設(shè)計[M].4版.北京:清華大學(xué)出版社,2010.
[2] 劉井蓮,趙衛(wèi)績.C/C++循環(huán)嵌套教學(xué)實踐[J].電腦知識與技術(shù),2012(25).
[3] 唐紅杰.C語言循環(huán)結(jié)構(gòu)教學(xué)探討[J].軟件工程師,2014(10):49-50.
[4] 劉運,程家興.圖形打印案例在計算機(jī)高級語言教學(xué)中的應(yīng)用研究[J].山東農(nóng)業(yè)工程學(xué)院學(xué)報,2014(6):48-49,58.