摘要:在培養學生自主學習能力的時候不能一味的提倡學生自學,教師在教學過程中應該讓學生體會學習的方法。本文通過舉例來展示c語言for循環的教學方法——舉一反三,將自己分析問題的方法潛移默化的傳輸給學生,使學生在學習知識的過程掌握學習的方法,提高了分析問題、解決問題的能力。
關鍵詞:c語言 for循環 自主學習
中圖分類號:G642 文獻標識碼:A 文章編號:1674-098X(2011)10(b)-0000-00
在c語言的教學中我有一個體會,就是學生在聽課時往往認為自己聽明白了,但到做題的時候就感到不知如何下手,這種情況提醒我在教學中注意,在講典型例題的時候要進行擴展,把類似的題相互比較,找一找不同點,這些不同點如何通過c語句實現,再和典型例題做一個結合,這樣就解決了新問題,達到了舉一反三的教學目的。下面就以循環結構中的for 循環最常見的問題作一講解。
舉一:典型例題 1+2+3+……+100 即
分析:
這道題主要是求和得到一個和值,它的求和項之間有一個規律,就是順序自然數1到100。這樣就必須有兩個變量,一個用來放和值,設為s ;另一個用來表示各個求和項,設為 i ,變量i的變化規律是從1到100,每次自增1,即可用i++ 語句實現;和值s 在開始求和之前應賦初值為0,求和時則在自身累加各求和項,即s=s+i 。本題的c語言程序見程序1。
main()
{int i,s=0 ;
for (i=1;i<=100;i++)
s=s+i;
printf(\"%d\",s);
}
程序1
反一: 1-3+5-7+……-99+101
將原題變為1+(-3)+5+(-7)+……(-99)+101 其題意不變。
比較分析:
相同點是該題最終也是得到一個求和值。不同點是各個求和項不再是順序自然數;各項變化規律是絕對值每次自增2,各項的符號正負交替。
解決方法:
解決該題還需一個變量來表示各項符號的交替變化,設為m ,我們知道任何數與1相乘都不改變,與—1相乘可改變其符號,那么對m賦初值為1,在循環中令其取反,即m= -m 即可實現。本題的c語言程序見程序2。
main()
{int i,s=0,m=1;
for (i=1;i<=101;i+=2)
{s=s+m*i;m=-m;}
printf(\"%d\",s);
}
程序2
反二: 1++++…… 加到第20項
比較分析:
相同點是該題依然是要得到一個求和值,不過該和值應定義為單精度型。不同點1是各個求和項不再是整數,而是分數,各項的分母變化為自增2,不同點2是這個求和的式子最后加到幾不是已知的,只知道要加到第20項。
解決方法:
這樣我們就需一個變量來控制加到第幾項了,設為 n,n的變化從1到20,變化過程為n++,到這兒大家就應該明白這道題用來控制循環的是n,而不是i。
本題的c語言程序見程序3。
main()
{int i,n;
float s=0;
for (i=1,n=1;n<=20;i+=2,n++)
s=s+1/i;
printf(\"%f\",s);
}
程序3
反三: 1+2!+3!+……+100! 即
比較分析:
相同點是該題也為求和最終也是要得到一個和值,該和值應定義為長整型。不同點是各個求和項由單一的數變為數的階乘。
解決方法:
我們知道某數的階乘值為從1到該數的各項相乘的積,顯然這是一個循環。用i來表示每一項中的數,再設變量t 來表示每一求和項,即數的階乘。由于t為一個乘積,t的初值應為1,這樣與任何數進行相乘都不會影響其結果,那么t與i的關系就是t=t*i;其值比較大,應將t定義為長整型。
該題的c語言程序見程序4。
main()
{int i;
long t=1, s=0;
for (i=1;i<=100;i++)
{t=t*i;s=s+t;}
printf(\"%ld\",s);
}
程序4
在每一次列出問題之后學生的第一個反應就是凝神思考,然后提問:這道題與例題的不同之處在哪?這個問題同學們都很積極的回答,并大多數回答正確。再問:如何用c語句來實現這些不同點?這時學生基本上都在搖頭,只有個別同學說出解決的方法,并且很是興奮,著急,想知道教師的分析來加以印證其想法。
在這兩個問題提出之后,通過學生的反應說明學生在認真看題,試圖找到解決的辦法,并希望得到教師的講解得以解惑或認可。在此基礎上我開始分析,講解過程中有些學生眉頭舒展,說明聽懂了;有些學生還對著黑板皺眉,說明還有疑惑;有些學生則眉飛色舞,說明教師的講解和他的想法一致。通過觀察同學們不同的反應,能從中得到自己教學的反饋效果,如果大多數學生聽明白了,那么就繼續講新的內容,否則將剛才的講解進行重復并更細致一些。
往往在這樣反三之后,學生就摸著了解決這類問題方法,只要前面的基本知識學的較好,寫出程序應該大多數都能做到。
擴展提高,自主分析
通過這樣舉一反三的講解同學們看到題型的變化,找到了異同點,提高了分析問題的能力,從而得到了解決問題的方法。作為教師要把題講透,就必須分析,將問題一條條擺出來,一個個解決,在分析講解的同時,自己分析問題的方法也潛移默化的傳輸給學生,學會了方法就能觸類旁通,達到學生自主學習的教學目的。
現在再列出幾道題,就可以在掌握以上分析問題方法的基礎上得到解決。
1) 1+1+2+3+5+8+13+…… 加到第30項
提示:該題各個求和項從第3項起為前兩項的和。見程序5。
main()
{int i=1,j=1,n;
long s=0;
for (n=1;n<=30;n+=2)
{s=s+(i+j);i=i+j;j=i+j;}
printf(\"%ld\",s);
}
程序5
2) 1—+—+…… 加到最后一項的絕對值不小于10
提示:控制循環的條件是表示每一項的絕對值的變量。見程序6。
main()
{int i,m=1;
float p=1, s=0;
for (i=1;p>=1e-5;i+=2)
{s=s+m*p;p=1.0/i;m=-m;}
printf(\"%f\",s);
}
程序6
3) 2!+4!+6!+……+100!
提示:各個求和項是數的階乘,其數的變化是自增2,而求階乘是順序相乘。見程序7。
main()
{int i,t=1;
long s=0;
for (i=2;i<=100;i+=2)
{t=t*i*(i-1);s=s+t;}
printf(\"%ld\",s);
}
程序7
……
舉一反三的教學方法能夠使同學們在分析問題的時候找到問題的關鍵點所在,從而有效地解決問題,萬變不離其宗講的就是這個道理。在教學上引導同學們學習分析解決問題方法,使他們在學習的過程中不斷地去驗證自己的學習方法,從而形成適合自己的一套學習方法,為將來自主學習打下好的基礎,而作為教師則達到授之以漁的教學效果。