董鑫正 郎六琪 文全剛
摘要:教師通常需要根據(jù)課時(shí)要求和學(xué)生專業(yè)背景等實(shí)際情況對(duì)c語言的授課內(nèi)容進(jìn)行靈活安排,問題是如何取舍。通過分析C語言的知識(shí)點(diǎn),提出以函數(shù)、變量、流程控制三個(gè)概念為核心的層次化知識(shí)點(diǎn)結(jié)構(gòu)圖,突出了C語言的核心概念及它們之間的相互聯(lián)系,為教師對(duì)講授內(nèi)容的選擇和安排提供參考。
關(guān)鍵詞:C語言;核心概念;函數(shù);變量;流程控制
中圖分類號(hào):G642 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2017)17-0078-02
目前,很多學(xué)校仍然把C語言作為計(jì)算機(jī)專業(yè)或相關(guān)專業(yè)的程序設(shè)計(jì)人門課程。要在限定的課時(shí)內(nèi)幫助不同專業(yè)的學(xué)生掌握基本的程序設(shè)計(jì)方法,學(xué)會(huì)使用計(jì)算思維方法去分析和解決問題,教師需要對(duì)實(shí)際使用的C語言教材的內(nèi)容進(jìn)行靈活取舍以突出重點(diǎn)。本文通過分析c語言核心概念及它們之間的聯(lián)系,建立了層次化的C語言知識(shí)點(diǎn)結(jié)構(gòu)圖,以突出核心概念及以內(nèi)在聯(lián)系為基礎(chǔ)的層次化結(jié)構(gòu),從而為教師抓住重點(diǎn)、構(gòu)建知識(shí)體系提供幫助。
1 C語言的核心概念
通過對(duì)C語言教材所包含的全部知識(shí)點(diǎn)的梳理和c語言教學(xué)實(shí)踐的總結(jié),發(fā)現(xiàn)所有的知識(shí)點(diǎn)都直接或間接聯(lián)系到既獨(dú)立又相互聯(lián)系的三個(gè)概念:函數(shù)、變量、流程控制。依據(jù)教材中涉及的主要知識(shí)點(diǎn),分類整理后如圖1所示(橫向來看)。文獻(xiàn)[2]中已提出C++語言中也包含這三個(gè)核心概念。進(jìn)一步講,基于電子計(jì)算機(jī)的硬件組成和命令式編程的特點(diǎn),我們推測(cè)大部分的命令式編程語言都包含這三個(gè)概念。
對(duì)于這三個(gè)概念,我們可以根據(jù)經(jīng)驗(yàn)分別給出其描述性定義,但要做到準(zhǔn)確理解,需要從具體到抽象,即先掌握概念包含的具體知識(shí)點(diǎn),再試圖去理解概念的內(nèi)涵及相互之間的聯(lián)系。
函數(shù)是對(duì)一段代碼的封裝,可以通過函數(shù)名和參數(shù)被調(diào)用,是程序的基本組成單位。函數(shù)概念包含的知識(shí)點(diǎn)主要包括主函數(shù)、輸入輸出函數(shù)的使用、自定義函數(shù)的定義和調(diào)用、函數(shù)的參數(shù)和返回值、遞歸函數(shù)等。
變量提供了程序可以操作的有名字的存儲(chǔ)區(qū)。變量概念包含的知識(shí)點(diǎn)包括變量的四要素(類型、名稱、值、地址)、基本類型、變量的定義和引用、變量的作用域、變量的生存期、變量的存儲(chǔ)類型、指針變量、數(shù)組變量、結(jié)構(gòu)體變量等。因?yàn)轭愋褪亲兞康囊刂?,類型不?huì)獨(dú)立于變量而存在,所以與類型相關(guān)的知識(shí)點(diǎn)都可以歸類為與變量相關(guān)的知識(shí)點(diǎn)。
流程控制包括順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)三種基本的流程控制結(jié)構(gòu)。順序結(jié)構(gòu)表示語句按照位置的前后順序依次執(zhí)行;分支結(jié)構(gòu)表示根據(jù)判斷條件的結(jié)果選擇其中一組語句執(zhí)行;循環(huán)結(jié)構(gòu)表示在滿足一定條件的情況下反復(fù)執(zhí)行一組語句。C語言中的分支結(jié)構(gòu)主要有if和switch兩種具體形式,循環(huán)結(jié)構(gòu)則主要有for、while、do…while三種具體形式。
2核心概念之間的聯(lián)系
函數(shù)、變量、流程控制三個(gè)核心概念既相互獨(dú)立而有其存在的必要性,又相互聯(lián)系而組成有機(jī)的整體。相互聯(lián)系不僅存在于不同的概念之間,也存在于同一概念的不同實(shí)例之間,如圖2所示。一方面,函數(shù)可由變量和流程控制組合而成,即函數(shù)的定義包含變量和流程控制,變量不僅為函數(shù)定義提供了命名的存儲(chǔ)區(qū)域,也為函數(shù)調(diào)用提供了參數(shù)傳遞方式,流程控制為函數(shù)定義提供了實(shí)現(xiàn)方式。另一方面,三個(gè)概念都支持自組合功能,函數(shù)通過函數(shù)調(diào)用由小的功能模塊組成大的功能模塊;變量通過結(jié)構(gòu)體實(shí)現(xiàn)了由小的數(shù)據(jù)類型變量組合成大的數(shù)據(jù)類型變量;流程控制則通過三種控制結(jié)構(gòu)的嵌套由簡(jiǎn)單的流程控制組合成復(fù)雜的流程控制。
2.1函數(shù)與函數(shù)
函數(shù)調(diào)用是函數(shù)之間的主要關(guān)系。函數(shù)是C程序的基本組成單位,正是函數(shù)調(diào)用把程序各個(gè)功能模塊動(dòng)態(tài)聯(lián)系起來。C語言中的函數(shù)不能嵌套定義,即所有的函數(shù)的定義上都是并列的關(guān)系,只能通過函數(shù)調(diào)用把各個(gè)函數(shù)聯(lián)系起來。
函數(shù)調(diào)用實(shí)現(xiàn)了功能組合的效果,可以作為應(yīng)對(duì)工程規(guī)模和復(fù)雜性增長(zhǎng)的手段之一。當(dāng)我們面對(duì)的問題規(guī)模和復(fù)雜性由小變大時(shí),通常需要增加函數(shù)的體量和數(shù)量來解決。
2.2變量與變量
簡(jiǎn)單變量通過結(jié)構(gòu)體的組合而形成復(fù)雜變量,是變量之間的主要關(guān)系。變量在定義時(shí)必須指定變量的類型,C語言的變量有整型、實(shí)型、字符型三種基本類型,以此為基礎(chǔ),通過引入新的類型構(gòu)造機(jī)制,便可生成新的類型,如指針、數(shù)組、結(jié)構(gòu)體等。尤其是結(jié)構(gòu)體的引入,實(shí)現(xiàn)了數(shù)據(jù)類型的間接嵌套,使我們有能力在基本類型的基礎(chǔ)之上,經(jīng)過若干次組合,構(gòu)造出更大、更復(fù)雜的新類型。當(dāng)我們需要描述復(fù)雜的數(shù)據(jù)結(jié)構(gòu)時(shí),通過使用結(jié)構(gòu)體來構(gòu)造合適類型的變量。變量的組合功能,是我們應(yīng)對(duì)實(shí)際問題中數(shù)據(jù)結(jié)構(gòu)復(fù)雜性增長(zhǎng)的手段之一。
2.3流程控制與流程控制
三種流程控制結(jié)構(gòu)之間可以相互嵌套,是流程控制結(jié)構(gòu)之間的主要關(guān)系。這種嵌套既有直接的多層嵌套,常見的是二層或三層;也有間接的多層嵌套,即分布在不同函數(shù)中的流程控制,通過函數(shù)調(diào)用形成間接的嵌套結(jié)構(gòu)。流程控制的嵌套功能,是我們應(yīng)對(duì)算法復(fù)雜性增長(zhǎng)手段之一。
2.4函數(shù)與變量
變量可以根據(jù)其定義的位置分為全局變量和局部變量,當(dāng)定義在函數(shù)的外部時(shí)是全局變量,定義在函數(shù)的內(nèi)部則是局部變量。局部變量可進(jìn)一步分為定義在函數(shù)頭的函數(shù)形式參數(shù)和定義在函數(shù)體的其他局部變量。變量作為函數(shù)的形式參數(shù)和返回值,是函數(shù)與變量的主要關(guān)系,并為函數(shù)調(diào)用的實(shí)現(xiàn)提供了基礎(chǔ)。對(duì)函數(shù)調(diào)用時(shí)參數(shù)傳遞的理解是C語言的難點(diǎn)之一,主要涉及兩個(gè)概念:函數(shù)參數(shù)的傳遞方式和數(shù)據(jù)類型,實(shí)參與形參的傳遞方式只有一種,即“值傳遞”,而值的內(nèi)容由參數(shù)的數(shù)據(jù)類型確定。
2.5函數(shù)與流程控制
流程控制一定被包含在函數(shù)的定義中,而流程控制中也可以包含函數(shù)調(diào)用,這是函數(shù)與流程控制的主要關(guān)系。函數(shù)的定義一般要使用流程控制,用到順序、分支、循環(huán)三種結(jié)構(gòu)中的一種或多種;而流程控制的復(fù)合語句中也可能包含函數(shù)調(diào)用,從而形成不同層次的函數(shù)調(diào)用棧。
2.6變量與流程控制
除了全局變量的定義和初始化,變量的定義、初始化和引用通常都在流程控制中完成,這是變量與流程控制的主要關(guān)系。函數(shù)的定義主要包含了對(duì)變量、流程控制、函數(shù)調(diào)用的組合運(yùn)用。
3知識(shí)點(diǎn)的層次性
基于C語言的三個(gè)核心概念,同時(shí)考慮到它們之間的相互聯(lián)系,提出對(duì)C語言知識(shí)點(diǎn)分三個(gè)層次遞進(jìn)的知識(shí)點(diǎn)結(jié)構(gòu)圖,如圖1所示(縱向來看)。第一層引入了函數(shù)、變量、流程控制三個(gè)概念,程序由函數(shù)組合而成(有且只有一個(gè)主函數(shù)),函數(shù)由變量和流程控制組合而成,其中流程控制的三種結(jié)構(gòu)可以通過簡(jiǎn)單嵌套進(jìn)行組合;第二層對(duì)函數(shù)進(jìn)行擴(kuò)展,引入自定義函數(shù),通過函數(shù)調(diào)用實(shí)現(xiàn)函數(shù)功能的組合;第三層對(duì)變量進(jìn)行擴(kuò)展,通過引入類型構(gòu)造方法,使基本類型的變量可以組合成復(fù)雜類型變量。
第一層的主要特征是“單函數(shù)、基本類型變量”,包含了函數(shù)、變量、流程控制三個(gè)核心概念的基礎(chǔ)內(nèi)容,也是C語言的基礎(chǔ)部分。主要內(nèi)容包括:主函數(shù)、輸入輸出函數(shù)的使用、變量的四要素(類型、名稱、值、地址)、基本類型、變量的定義和引用、順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。函數(shù)是C程序的基本組成單位,主函數(shù)是程序的人口函數(shù),所以主函數(shù)是第一個(gè)要介紹的知識(shí)點(diǎn)。簡(jiǎn)單的C程序可以分為數(shù)據(jù)輸入、數(shù)據(jù)處理、數(shù)據(jù)輸出三個(gè)步驟,所以接下來介紹輸入輸出函數(shù)的基本用法,以完成簡(jiǎn)單的輸入輸出任務(wù)。為了進(jìn)行數(shù)據(jù)處理,引人變量的概念,主要從變量的類型、名稱、值、地址四個(gè)具體要素來理解。變量的基本類型有整型、實(shí)型、字符型三種,掌握了三種基本類型,便可以進(jìn)人變量的定義和引用。此時(shí)完成的程序都是順序結(jié)構(gòu),接下來重點(diǎn)介紹另外兩種流程控制結(jié)構(gòu):分支和循環(huán)。這一層的重點(diǎn)是主函數(shù)、基本類型變量、三種流程控制結(jié)構(gòu),難點(diǎn)是對(duì)變量概念的理解和循環(huán)結(jié)構(gòu)的掌握。
第二層的主要特征是“多函數(shù)、基本類型變量”,在主函數(shù)的基礎(chǔ)上引入自定義函數(shù)以支持組織程序時(shí)的靈活性和可擴(kuò)展性,在變量四要素的基礎(chǔ)上提供更多的視角以加深對(duì)變量的全面理解。主要內(nèi)容包括:自定義函數(shù)的定義和調(diào)用、函數(shù)的參數(shù)和返回值、遞歸函數(shù)、變量的作用域、變量的生存期、變量的存儲(chǔ)類型。由一個(gè)函數(shù)到多個(gè)函數(shù),首先涉及函數(shù)的定義,即創(chuàng)建一個(gè)新的函數(shù),其次是函數(shù)的聲明和調(diào)用,使新增加的函數(shù)融入到程序的執(zhí)行流程之中。當(dāng)需要在函數(shù)調(diào)用中傳遞信息時(shí),就需要使用函數(shù)的參數(shù)和返回值,參數(shù)分為函數(shù)定義時(shí)的形式參數(shù)和函數(shù)調(diào)用時(shí)的實(shí)際參數(shù),形式參數(shù)和返回值都是變量,體現(xiàn)了函數(shù)和變量?jī)蓚€(gè)核心概念之間的聯(lián)系。遞歸函數(shù)是直接或間接調(diào)用該函數(shù)自身的函數(shù),是一種特殊的函數(shù)形式,用來實(shí)現(xiàn)程序設(shè)計(jì)中廣泛存在遞歸算法。變量的作用域即變量的有效范圍,據(jù)此可以把變量分為局部變量和全局變量?jī)深?。變量的生存期指變量從被生成到被撤銷的這段時(shí)間,變量的作用域和生成期分別從空間和時(shí)間的角度來刻畫變量。C語言變量的存儲(chǔ)類型有auto、register、extern、static四種,規(guī)定了變量占用內(nèi)存空間的方式。
第三層的主要特征是“多函數(shù)、復(fù)合類型變量”,在第二層的基礎(chǔ)上引入新的類型構(gòu)造機(jī)制,提供創(chuàng)建復(fù)雜類型變量的表示方法。主要內(nèi)容包括:數(shù)組變量、指針變量、結(jié)構(gòu)體變量、聯(lián)合變量、枚舉變量、位域變量。數(shù)組是一種常用的復(fù)合類型,數(shù)組變量使用連續(xù)的內(nèi)存空間來存儲(chǔ)相同類型的值,比如C語言中的字符串即是用字符數(shù)組來存儲(chǔ)。指針變量用來保存變量的地址,地址是變量基本概念中提到的四要素之一,相對(duì)于通過變量名來操作變量的直接訪問,通過指針變量來操作變量又稱為間接訪問。指針變量同時(shí)被用于動(dòng)態(tài)內(nèi)存分配時(shí)的內(nèi)存管理。結(jié)構(gòu)體是使用基本類型和復(fù)合類型組合成更大的復(fù)合類型的類型構(gòu)造機(jī)制,結(jié)構(gòu)體可以包含指針類型和數(shù)組類型的成員,也可以有結(jié)構(gòu)體的指針和數(shù)組。通過結(jié)構(gòu)體實(shí)現(xiàn)了間接的類型嵌套結(jié)構(gòu),完成了變量的組合功能,這種組合功能集中體現(xiàn)了變量與變量之間的關(guān)系。聯(lián)合、位域和枚舉是另外三種針對(duì)特定使用場(chǎng)景的復(fù)合類型,用于節(jié)約內(nèi)存使用或提高程序的可讀性。
4結(jié)束語
對(duì)C語言的全部知識(shí)點(diǎn)進(jìn)行分類,發(fā)現(xiàn)其中包含函數(shù)、變量、流程控制三個(gè)核心概念。通過不同的具體方式,每個(gè)概念都支持自組合功能,同時(shí),函數(shù)又可由變量和流程控制組合而成,這種組合功能用以應(yīng)對(duì)問題規(guī)模和復(fù)雜性的增長(zhǎng)。以核心概念為中心,以知識(shí)點(diǎn)的相互聯(lián)系為線索的C語言知識(shí)點(diǎn)層次結(jié)構(gòu)圖,在教師培訓(xùn)實(shí)踐中對(duì)于教師抓住重點(diǎn)、構(gòu)建C語言的知識(shí)體系有一定幫助。