摘要:C語言的技能題讓許多同學心里打悚,可謂是望虎生畏。怎么讓學生打破心里的畏懼,去接受、學習、探索C語言的內在的奧妙,發現學習它的樂趣呢?讓我們當學生的導游,學習的領航者,帶著學生一起去發現內在規律,去一點點發現它,理解它,領會它,應用它。
關鍵詞:C語言;發現;內在奧妙
數組部分的知識是C語言的大頭,C的技能必考題,也是許多學生害怕的題型,但實際上它有基本固定的模式,有一定的規律,最常見就是排序、查找、插入(右移)、刪除(左移)、矩陣的問題、數制的問題等,一般都有一定的規律,如果找到了內在的規律,再去做題,就能舉一反三,就能找到學習的樂趣,學習的信心了。我在講到數組的同步的練習的時候就帶學生去探索尋找規律,然后表示規律,應用規律,巧解了很多題,我主要從以下幾個方面來嘗試的:
一、 根據題干提供的線索,巧找內在規律
大家看看下面的圖形,要我們產生并輸出如下圖形,有什么樣的規律?乍一看起來,好復雜呀!
其實不要緊,還是那句話,填空把難的都屏蔽掉了,它會給我們思路,根據題干給的思路我們來分析一下:
我們來逐個擊破,先看第一個空,什么情況下,a[i][j]=1;很顯然,這是個送分題,兩條對角線上,行號列號相等時,也就是我所標兩條紅、綠線的位置,規律是:主對角線上i=j;次對角線i+j=6。所以根據題干輕而易舉地就劃出了這兩道線,繼續來找規律:(綠線)主對角i=j;綠線的左邊滿足的條件是i>j;綠線的右邊滿足的條件是i
值為2:i 值為3:i>j&&i;+j<6 值為4:i 值為5:i>j&&i;+j>6 最后一個空也是送分題,換行,大家顯而易見,每行的各列輸出完畢了,換行。 從本題可以看出,整個圖形被兩條對角線劃分成了四塊,兩兩條件相交就寫出了各塊的規律。這樣做是不是最好的方法呢,不是,為什么? 二、 根據程序蘊藏的暗示,巧用數據帶入 剛剛的題目,如果讓我們寫整個程序,我們那樣做非常透徹,也拎得非常清晰,但現在僅僅是個填空題,需要這么大費周折嗎?不需要,還有什么方法嗎?巧用數據帶入。 else if(i else if(i>j&&i;+j<6)a[i][j]=3; 題中的這兩句暗示我們,找個特殊的數帶入看看行列之間的關系,還有行列和與6之間的關系。例如第一行的第三列a[0][2]=2,行號<列號,行號+列號<6,那這一個空值是2,同理,找個數值是4的位置,如a[3][6]=4,亦可推出行號<列號,行號+列號>6的條件。 用數字帶入不僅僅是解數學書上的選擇題的方法,在我們C語言的圖形上也是可以用的,用得巧了,同樣可以化難為易,同樣可以節省時間。當然了,數的選擇,條件的拎出離不開我們以前知識的積累,特別是在現在后期的復習階段,這就是我所提到和第三種技巧。 三、 根據以往學習的知識,巧構知識體系 比如在做題的時候遇到這樣一道題:將S所指字符串的正序和反序進行連接,形成一個新串放在t所指的數組中。例如:當s串為“ABCD”時,則t串的內容為“ABCDDCBA”。通過審題我們可以看出這也考了兩個知識點:一是逆序,二是連接。逆序的問題我們以前遇到的,有這樣兩種情況:一是逆序后放入原數組,二是逆序放入另一數組。連接的問題我們上面也講道過,所以我是這樣引導學生的: (1) 同一數組中數據的逆序存放a[i]=a[n-1-i] 引導學生回顧相約在高校中的同一數組逆序的存放問題,學生很快就答出來了。接著我又提出,若是放在另一數組中呢,學生很快寫出了下面的第二步:t[i]=s[n-1-i] (2) 把數據逆序存放到另一的數組中t[i]=s[n-1-i] 那如果是逆序后存放在另一數組之后呢,要先求出那個數組原來的長度,然后通過下標的同步變化就可以得到第三步。我又拿出了一題剛剛講到的連接的問題,如下: JOIN(S1,S2) char s1[80];s2[40]; {int i,j; /***************SPACE*************/ for(i=0;[?]'\\0';i++) s1[i+j]=s2[i]; /***************SPACE*************/ s1[i+j]=[?]; }通過s1[i+j]=s2[i];這條語句可以看出是把s2放入s1中,所以空填“s2[i]!=”同時也可以看出變化的下標是i,j是不變的,那么j是什么,這是個連接問題,那么j就是s1的長度。最后所有的數都取完了,怎么辦,人為的結束s1。這就解決了連接的問題。 (3) 把數據逆序連接到另一數組中t[d+i]=s[n-1-i] 這樣就把我們學過知識都復習了,同時還聯系到了一起,以后學生再做這類題的時候就知道慢慢地轉接,一步步地嫁接,最后問題就迎刃而解了。 四、 根據前后程序的聯系,巧套函數調用 隨著這兩年學生基礎的薄弱,越來越多的同學放棄編程題,還有一類是比較容量得分的,只要學生夠細心,能找到,一一對應起來就可以得分,這就是用戶定義函數的調用,要么考用戶定義的函數名,要么考在主函數中函數調用的語句。做題時只要看看參數的作用,主程序的意圖,模仿著寫,對應著就行了。例如:有這樣一個程序,在主程序中,給出了數組a的值,想把它順時針轉90度輸出。在用戶定義的函數中有這樣一句:b[i][j]=a[n-1-j][i];說明是把a轉成b,且用戶定義的函數名為void chang(int a[][N],intb[][M]);那主函數套用就行了肯定是chang(a,b)。所以我們在任何時候都不要畏懼,都不要放棄,用心地靜心地去看去做一些題,我們就會發現不像我們想象的那樣難,我們會發現只要我們細心我們就能看出出題者的意圖,順著他的思路寫下去,做出來。 讓我們再細心一點,再耐心一點,再多付出一點工夫,我相信我們一定可能在C中找到更多的樂趣,找到更多的技巧。 作者簡介:倪艷芬,江蘇省徐州市,江蘇省徐州市張集中等專業學校。