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