余麗紅++龍諾春++林春景
摘要:C語言程序設(shè)計(jì)實(shí)踐教學(xué)是整個(gè)課程中非常重要的一個(gè)環(huán)節(jié)。它為學(xué)生提供學(xué)以致用的平臺(tái)。實(shí)踐環(huán)節(jié)的充分有效利用直接關(guān)系到學(xué)生程序設(shè)計(jì)能力的提高。本文根據(jù)作者多年的一線教學(xué)經(jīng)驗(yàn),將C語言課程實(shí)踐項(xiàng)目里學(xué)生經(jīng)常出現(xiàn)的共性編程錯(cuò)誤進(jìn)行匯總,并提供解答方案,以此培養(yǎng)學(xué)生在編程中自主查錯(cuò)、糾錯(cuò)的習(xí)慣,提高自主學(xué)習(xí)能力和編程能力。
關(guān)鍵詞:C語言程序設(shè)計(jì) 實(shí)踐教學(xué) 自主學(xué)習(xí)
中圖分類號(hào):TP312 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2014)08-0220-02
1 引言
C語言程序設(shè)計(jì)是一門高級(jí)編程語言,具有較強(qiáng)的理論性和實(shí)踐操作性。掌握C語言程序設(shè)計(jì)基礎(chǔ)理論和編程技巧對(duì)學(xué)生繼續(xù)學(xué)習(xí)后續(xù)編程課程有重要的作用[1]。“實(shí)踐教育,是指圍繞教育教學(xué)活動(dòng)目的而開展的、學(xué)生親身體驗(yàn)的實(shí)踐活動(dòng)”[2],是實(shí)現(xiàn)人才培養(yǎng)目標(biāo)的重要一環(huán)[3]。C語言教學(xué)中科學(xué)合理地利用實(shí)踐教學(xué)環(huán)節(jié)既可以實(shí)現(xiàn)將語法知識(shí)點(diǎn)學(xué)以致用,同時(shí)能夠培養(yǎng)學(xué)生的自主學(xué)習(xí)能力和解決問題的能力。
2 C程序的編寫過程
學(xué)生在實(shí)踐環(huán)節(jié)中使用Visual C++6.0軟件進(jìn)行C語言程序編程練習(xí)。Visual C++是一個(gè)功能強(qiáng)大的可視化軟件開發(fā)工具,已成為專業(yè)程序員進(jìn)行軟件開發(fā)的首選工具。由于C++是由C語言發(fā)展起來的,也支持C語言的編譯。利用C語言進(jìn)行編程要經(jīng)過:編輯、編譯、連接、運(yùn)行等過程。編輯即在VC6.0界面編寫和修改程序代碼,編輯完后要保存。C語言程序的源文件標(biāo)準(zhǔn)擴(kuò)展名后綴是.C。編譯是將源程序翻譯成計(jì)算機(jī)能夠直接識(shí)別的二進(jìn)制代碼。在編譯的過程中首先會(huì)檢查程序是否滿足語法要求,如有語法錯(cuò)誤,則在VC6.0的Build窗口會(huì)出現(xiàn)錯(cuò)誤的類型和位置,以方便編程人員繼續(xù)編輯和修改直至語法完全正確。如果編輯的程序語法符合規(guī)則,則編譯通過后Build窗口會(huì)顯示0錯(cuò)誤,0警告,同時(shí)生成后綴為obj的二進(jìn)制目標(biāo)文件。通過編輯和編譯后的就進(jìn)行連接生成后綴為exe的可執(zhí)行文件。最后點(diǎn)擊運(yùn)行命令,程序就在新彈出的窗口中被運(yùn)行并顯示相應(yīng)的結(jié)果。
3 學(xué)生常見的編程錯(cuò)誤及解答
本文選用筆者在教學(xué)中用到的一個(gè)典型程序進(jìn)行展開。編寫該程序的要求如下:(利用指針)把一個(gè)整數(shù)插入到由小到大排列的10個(gè)數(shù)的數(shù)列中,插入后仍然保持由小到大的順序排列。從鍵盤輸入排列好的10個(gè)數(shù),然后輸入一個(gè)需要插入的數(shù)字,回車后,屏幕輸出插入數(shù)字后拍好序的11個(gè)。
完成該項(xiàng)目的總體思路是利用主函數(shù)調(diào)用一個(gè)排序函數(shù)。綜合運(yùn)用了函數(shù)定義、函數(shù)調(diào)用、數(shù)組、循環(huán)語句等知識(shí)點(diǎn)。對(duì)于學(xué)生來說,是有一些難度的項(xiàng)目。做為C語言的教師,要傳授學(xué)生在編寫程序前畫流程圖的良好習(xí)慣。流程圖是算法的一個(gè)整體綱要,依據(jù)流程圖,編程的思路會(huì)更清晰,編程的條理也會(huì)更順暢。
利用VC6.0來編寫上述程序的具體操作步驟如下:
(1)創(chuàng)建一個(gè)新的空工程:?jiǎn)?dòng)VC6.0,點(diǎn)擊文件-->新建,在工程的菜單下選擇Win32 Console Application,工程名字Newint,保存在桌面。點(diǎn)擊完成后會(huì)彈出Win32 Console Application類型程序的配置界面,創(chuàng)建一個(gè)新的C語言空工程。點(diǎn)擊完成并確認(rèn)。新工程創(chuàng)建完成。
(2)添加一個(gè).c源文件到第一步新建的工程中:點(diǎn)擊文件-->新建,在文件的菜單下選擇C++ Source File,文件名為Newint.c,保存默認(rèn)。點(diǎn)擊完成后就彈出VC6.0編輯器的對(duì)話框,如圖3.1,在Newint.c對(duì)話框的空白界面光標(biāo)跳動(dòng)處就可以開始編寫程序。
(3) 程序編寫后就進(jìn)行編譯,根據(jù)錯(cuò)誤提示進(jìn)行修改直至正確。
在實(shí)踐環(huán)節(jié)中,學(xué)生感覺最有難度的是第(3)步。一是因?yàn)檐浖怯⑽陌娴?,而學(xué)生的英文水平普遍偏低;二是因?yàn)閷W(xué)生作為C語言的初學(xué)者,很難發(fā)現(xiàn)編程中的語法錯(cuò)誤。因此筆者就以上述項(xiàng)目為例來講解學(xué)生在編程中易出現(xiàn)的錯(cuò)誤及解決方法。本文提供一個(gè)學(xué)生所編寫的程序。
編譯常見的錯(cuò)誤如下:(1)fatal error:Cannot open include file:'sdtio.h': No such file or directory。-頭文件寫錯(cuò),'sdtio.h'應(yīng)該改為'stdio.h'。此頭文件表示標(biāo)準(zhǔn)輸入輸出頭文件。std是standard的縮寫。出現(xiàn)此類錯(cuò)誤主要是學(xué)生對(duì)標(biāo)準(zhǔn)輸入輸出頭文件缺少深入理解及對(duì)于標(biāo)準(zhǔn)這個(gè)單詞不熟悉。
(2)syntax error:missing ';' before 'type'。該句的含義是在類型前面少了分號(hào)。原語句為:int a[11],i 直接換行到int *p=a;錯(cuò)誤提示前一行的C語言語句結(jié)束時(shí)沒有加分號(hào)。這類錯(cuò)誤對(duì)于初學(xué)者很容易出現(xiàn)。很多學(xué)生在寫程序時(shí)會(huì)按回車換行,而導(dǎo)致忘記分號(hào)。作為基礎(chǔ)語法學(xué)生要求牢牢掌握C語言中語句結(jié)束用分號(hào)。
(3)error C2133:'ar':unknown size。此錯(cuò)誤的意思是未知的尺寸。原語句為:int ar[];
出現(xiàn)此錯(cuò)誤的原因是學(xué)生在定義數(shù)組ar時(shí)語法不對(duì)。在定義數(shù)組時(shí),要指明數(shù)組的大小即其存放元素的個(gè)數(shù)。完成上述項(xiàng)目需要用到整型數(shù)組來存放需要排序的11個(gè)數(shù)。該數(shù)組的長(zhǎng)度最少為11.所以將原語句修改為:int ar[11];使用數(shù)組時(shí)還有一個(gè)容易出現(xiàn)的錯(cuò)誤是數(shù)組下標(biāo)的使用。比如ar這個(gè)數(shù)組,它的元素下標(biāo)為0—10共11個(gè)元素。學(xué)生剛編程時(shí)很容易忽略混淆,會(huì)認(rèn)為最后一個(gè)元素為ar[11]。教師在教學(xué)過程要重點(diǎn)強(qiáng)調(diào)數(shù)組下標(biāo)問題。
(4)error C2198:'scanf':too few actual parameters。此錯(cuò)誤的意思是輸入函數(shù)scanf參數(shù)太少。程序原語句為:scanf("%d"&a[i]);出現(xiàn)錯(cuò)誤的原因是取地址符前面少了一個(gè)逗號(hào)。出現(xiàn)此類錯(cuò)誤主要是因?yàn)閷W(xué)生比較粗心。還有部分學(xué)生由于對(duì)輸入語句的語法掌握不牢固,會(huì)出現(xiàn)編程時(shí)漏掉取地址符。缺少地址符,程序編譯和連接都不會(huì)提示出錯(cuò),但在最后運(yùn)行的命令框里輸入數(shù)據(jù)時(shí)會(huì)出錯(cuò)。
(5)error C2018: unknown character '0xa3'。表示該語句行出現(xiàn)未知字符。原因是輸入程序時(shí)采用的輸入法為中文。應(yīng)改為英文輸入狀態(tài)。C語言程序中除了漢字,其他的字符都要求是英文輸入狀態(tài)。
(6)error C2143: syntax error : missing ';' before ')'。表示括號(hào)前面少了分號(hào)。原語句如下:for(i=1,i<=10,i++)。出現(xiàn)錯(cuò)誤的原因是for語句中的三個(gè)表達(dá)式隔開符號(hào)采用了逗號(hào),正確的語句是三個(gè)表達(dá)式之間用分號(hào)隔開。因?yàn)檎Z句結(jié)束是用分號(hào)。
(7)fatal error C1004: unexpected end of file found。該錯(cuò)誤表示文件意外結(jié)束。出現(xiàn)的原因是程序中有如下語句:for(i=0;i<11;i++){printf("%d\t",a[i]);。很顯然是for語句的一對(duì)大括號(hào)少了結(jié)束的一半。在C語言中,復(fù)合語句都用一對(duì)大括號(hào)括起來。學(xué)生在編程中,當(dāng)寫了很多行語句后很容易就忘記剩下的一半。。除了for語句用大括號(hào),還有if、while等語句,以及構(gòu)造類型比如共用體,結(jié)構(gòu)體在定義時(shí)也用一對(duì)大括號(hào),main程序體也是用一對(duì)大括號(hào)括起來。所以學(xué)生在編程時(shí)最好養(yǎng)成一開始就把一對(duì)大括號(hào)寫上的良好編程習(xí)慣。然后在大括號(hào)內(nèi)填寫語句。
4 結(jié)語
本文根據(jù)作者的教學(xué)經(jīng)驗(yàn),對(duì)C語言實(shí)踐教學(xué)中學(xué)生在編程時(shí)容易出現(xiàn)的共性問題進(jìn)行了闡述和解析。參考這些常見的問題,學(xué)生在編程時(shí)可以提高調(diào)試程序的效率,同時(shí)可以促進(jìn)學(xué)生培養(yǎng)良好的變編程風(fēng)格。
參考文獻(xiàn)
[1]余麗紅.基于CDIO的C語言程序設(shè)計(jì)課程教學(xué)改革探究[J].中國(guó)科教創(chuàng)新導(dǎo)刊,2011,16:150.
[2]顧秉林.加強(qiáng)實(shí)踐教育 培養(yǎng)創(chuàng)新人才[J].清華大學(xué)教育研究,2004,25(6):1-5.
[3]陳支武.完善實(shí)踐教學(xué)體系 培養(yǎng)應(yīng)用型創(chuàng)新人才[J].實(shí)驗(yàn)室研究與探索研究,2012,31(8):167-170.endprint
摘要:C語言程序設(shè)計(jì)實(shí)踐教學(xué)是整個(gè)課程中非常重要的一個(gè)環(huán)節(jié)。它為學(xué)生提供學(xué)以致用的平臺(tái)。實(shí)踐環(huán)節(jié)的充分有效利用直接關(guān)系到學(xué)生程序設(shè)計(jì)能力的提高。本文根據(jù)作者多年的一線教學(xué)經(jīng)驗(yàn),將C語言課程實(shí)踐項(xiàng)目里學(xué)生經(jīng)常出現(xiàn)的共性編程錯(cuò)誤進(jìn)行匯總,并提供解答方案,以此培養(yǎng)學(xué)生在編程中自主查錯(cuò)、糾錯(cuò)的習(xí)慣,提高自主學(xué)習(xí)能力和編程能力。
關(guān)鍵詞:C語言程序設(shè)計(jì) 實(shí)踐教學(xué) 自主學(xué)習(xí)
中圖分類號(hào):TP312 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2014)08-0220-02
1 引言
C語言程序設(shè)計(jì)是一門高級(jí)編程語言,具有較強(qiáng)的理論性和實(shí)踐操作性。掌握C語言程序設(shè)計(jì)基礎(chǔ)理論和編程技巧對(duì)學(xué)生繼續(xù)學(xué)習(xí)后續(xù)編程課程有重要的作用[1]?!皩?shí)踐教育,是指圍繞教育教學(xué)活動(dòng)目的而開展的、學(xué)生親身體驗(yàn)的實(shí)踐活動(dòng)”[2],是實(shí)現(xiàn)人才培養(yǎng)目標(biāo)的重要一環(huán)[3]。C語言教學(xué)中科學(xué)合理地利用實(shí)踐教學(xué)環(huán)節(jié)既可以實(shí)現(xiàn)將語法知識(shí)點(diǎn)學(xué)以致用,同時(shí)能夠培養(yǎng)學(xué)生的自主學(xué)習(xí)能力和解決問題的能力。
2 C程序的編寫過程
學(xué)生在實(shí)踐環(huán)節(jié)中使用Visual C++6.0軟件進(jìn)行C語言程序編程練習(xí)。Visual C++是一個(gè)功能強(qiáng)大的可視化軟件開發(fā)工具,已成為專業(yè)程序員進(jìn)行軟件開發(fā)的首選工具。由于C++是由C語言發(fā)展起來的,也支持C語言的編譯。利用C語言進(jìn)行編程要經(jīng)過:編輯、編譯、連接、運(yùn)行等過程。編輯即在VC6.0界面編寫和修改程序代碼,編輯完后要保存。C語言程序的源文件標(biāo)準(zhǔn)擴(kuò)展名后綴是.C。編譯是將源程序翻譯成計(jì)算機(jī)能夠直接識(shí)別的二進(jìn)制代碼。在編譯的過程中首先會(huì)檢查程序是否滿足語法要求,如有語法錯(cuò)誤,則在VC6.0的Build窗口會(huì)出現(xiàn)錯(cuò)誤的類型和位置,以方便編程人員繼續(xù)編輯和修改直至語法完全正確。如果編輯的程序語法符合規(guī)則,則編譯通過后Build窗口會(huì)顯示0錯(cuò)誤,0警告,同時(shí)生成后綴為obj的二進(jìn)制目標(biāo)文件。通過編輯和編譯后的就進(jìn)行連接生成后綴為exe的可執(zhí)行文件。最后點(diǎn)擊運(yùn)行命令,程序就在新彈出的窗口中被運(yùn)行并顯示相應(yīng)的結(jié)果。
3 學(xué)生常見的編程錯(cuò)誤及解答
本文選用筆者在教學(xué)中用到的一個(gè)典型程序進(jìn)行展開。編寫該程序的要求如下:(利用指針)把一個(gè)整數(shù)插入到由小到大排列的10個(gè)數(shù)的數(shù)列中,插入后仍然保持由小到大的順序排列。從鍵盤輸入排列好的10個(gè)數(shù),然后輸入一個(gè)需要插入的數(shù)字,回車后,屏幕輸出插入數(shù)字后拍好序的11個(gè)。
完成該項(xiàng)目的總體思路是利用主函數(shù)調(diào)用一個(gè)排序函數(shù)。綜合運(yùn)用了函數(shù)定義、函數(shù)調(diào)用、數(shù)組、循環(huán)語句等知識(shí)點(diǎn)。對(duì)于學(xué)生來說,是有一些難度的項(xiàng)目。做為C語言的教師,要傳授學(xué)生在編寫程序前畫流程圖的良好習(xí)慣。流程圖是算法的一個(gè)整體綱要,依據(jù)流程圖,編程的思路會(huì)更清晰,編程的條理也會(huì)更順暢。
利用VC6.0來編寫上述程序的具體操作步驟如下:
(1)創(chuàng)建一個(gè)新的空工程:?jiǎn)?dòng)VC6.0,點(diǎn)擊文件-->新建,在工程的菜單下選擇Win32 Console Application,工程名字Newint,保存在桌面。點(diǎn)擊完成后會(huì)彈出Win32 Console Application類型程序的配置界面,創(chuàng)建一個(gè)新的C語言空工程。點(diǎn)擊完成并確認(rèn)。新工程創(chuàng)建完成。
(2)添加一個(gè).c源文件到第一步新建的工程中:點(diǎn)擊文件-->新建,在文件的菜單下選擇C++ Source File,文件名為Newint.c,保存默認(rèn)。點(diǎn)擊完成后就彈出VC6.0編輯器的對(duì)話框,如圖3.1,在Newint.c對(duì)話框的空白界面光標(biāo)跳動(dòng)處就可以開始編寫程序。
(3) 程序編寫后就進(jìn)行編譯,根據(jù)錯(cuò)誤提示進(jìn)行修改直至正確。
在實(shí)踐環(huán)節(jié)中,學(xué)生感覺最有難度的是第(3)步。一是因?yàn)檐浖怯⑽陌娴模鴮W(xué)生的英文水平普遍偏低;二是因?yàn)閷W(xué)生作為C語言的初學(xué)者,很難發(fā)現(xiàn)編程中的語法錯(cuò)誤。因此筆者就以上述項(xiàng)目為例來講解學(xué)生在編程中易出現(xiàn)的錯(cuò)誤及解決方法。本文提供一個(gè)學(xué)生所編寫的程序。
編譯常見的錯(cuò)誤如下:(1)fatal error:Cannot open include file:'sdtio.h': No such file or directory。-頭文件寫錯(cuò),'sdtio.h'應(yīng)該改為'stdio.h'。此頭文件表示標(biāo)準(zhǔn)輸入輸出頭文件。std是standard的縮寫。出現(xiàn)此類錯(cuò)誤主要是學(xué)生對(duì)標(biāo)準(zhǔn)輸入輸出頭文件缺少深入理解及對(duì)于標(biāo)準(zhǔn)這個(gè)單詞不熟悉。
(2)syntax error:missing ';' before 'type'。該句的含義是在類型前面少了分號(hào)。原語句為:int a[11],i 直接換行到int *p=a;錯(cuò)誤提示前一行的C語言語句結(jié)束時(shí)沒有加分號(hào)。這類錯(cuò)誤對(duì)于初學(xué)者很容易出現(xiàn)。很多學(xué)生在寫程序時(shí)會(huì)按回車換行,而導(dǎo)致忘記分號(hào)。作為基礎(chǔ)語法學(xué)生要求牢牢掌握C語言中語句結(jié)束用分號(hào)。
(3)error C2133:'ar':unknown size。此錯(cuò)誤的意思是未知的尺寸。原語句為:int ar[];
出現(xiàn)此錯(cuò)誤的原因是學(xué)生在定義數(shù)組ar時(shí)語法不對(duì)。在定義數(shù)組時(shí),要指明數(shù)組的大小即其存放元素的個(gè)數(shù)。完成上述項(xiàng)目需要用到整型數(shù)組來存放需要排序的11個(gè)數(shù)。該數(shù)組的長(zhǎng)度最少為11.所以將原語句修改為:int ar[11];使用數(shù)組時(shí)還有一個(gè)容易出現(xiàn)的錯(cuò)誤是數(shù)組下標(biāo)的使用。比如ar這個(gè)數(shù)組,它的元素下標(biāo)為0—10共11個(gè)元素。學(xué)生剛編程時(shí)很容易忽略混淆,會(huì)認(rèn)為最后一個(gè)元素為ar[11]。教師在教學(xué)過程要重點(diǎn)強(qiáng)調(diào)數(shù)組下標(biāo)問題。
(4)error C2198:'scanf':too few actual parameters。此錯(cuò)誤的意思是輸入函數(shù)scanf參數(shù)太少。程序原語句為:scanf("%d"&a[i]);出現(xiàn)錯(cuò)誤的原因是取地址符前面少了一個(gè)逗號(hào)。出現(xiàn)此類錯(cuò)誤主要是因?yàn)閷W(xué)生比較粗心。還有部分學(xué)生由于對(duì)輸入語句的語法掌握不牢固,會(huì)出現(xiàn)編程時(shí)漏掉取地址符。缺少地址符,程序編譯和連接都不會(huì)提示出錯(cuò),但在最后運(yùn)行的命令框里輸入數(shù)據(jù)時(shí)會(huì)出錯(cuò)。
(5)error C2018: unknown character '0xa3'。表示該語句行出現(xiàn)未知字符。原因是輸入程序時(shí)采用的輸入法為中文。應(yīng)改為英文輸入狀態(tài)。C語言程序中除了漢字,其他的字符都要求是英文輸入狀態(tài)。
(6)error C2143: syntax error : missing ';' before ')'。表示括號(hào)前面少了分號(hào)。原語句如下:for(i=1,i<=10,i++)。出現(xiàn)錯(cuò)誤的原因是for語句中的三個(gè)表達(dá)式隔開符號(hào)采用了逗號(hào),正確的語句是三個(gè)表達(dá)式之間用分號(hào)隔開。因?yàn)檎Z句結(jié)束是用分號(hào)。
(7)fatal error C1004: unexpected end of file found。該錯(cuò)誤表示文件意外結(jié)束。出現(xiàn)的原因是程序中有如下語句:for(i=0;i<11;i++){printf("%d\t",a[i]);。很顯然是for語句的一對(duì)大括號(hào)少了結(jié)束的一半。在C語言中,復(fù)合語句都用一對(duì)大括號(hào)括起來。學(xué)生在編程中,當(dāng)寫了很多行語句后很容易就忘記剩下的一半。。除了for語句用大括號(hào),還有if、while等語句,以及構(gòu)造類型比如共用體,結(jié)構(gòu)體在定義時(shí)也用一對(duì)大括號(hào),main程序體也是用一對(duì)大括號(hào)括起來。所以學(xué)生在編程時(shí)最好養(yǎng)成一開始就把一對(duì)大括號(hào)寫上的良好編程習(xí)慣。然后在大括號(hào)內(nèi)填寫語句。
4 結(jié)語
本文根據(jù)作者的教學(xué)經(jīng)驗(yàn),對(duì)C語言實(shí)踐教學(xué)中學(xué)生在編程時(shí)容易出現(xiàn)的共性問題進(jìn)行了闡述和解析。參考這些常見的問題,學(xué)生在編程時(shí)可以提高調(diào)試程序的效率,同時(shí)可以促進(jìn)學(xué)生培養(yǎng)良好的變編程風(fēng)格。
參考文獻(xiàn)
[1]余麗紅.基于CDIO的C語言程序設(shè)計(jì)課程教學(xué)改革探究[J].中國(guó)科教創(chuàng)新導(dǎo)刊,2011,16:150.
[2]顧秉林.加強(qiáng)實(shí)踐教育 培養(yǎng)創(chuàng)新人才[J].清華大學(xué)教育研究,2004,25(6):1-5.
[3]陳支武.完善實(shí)踐教學(xué)體系 培養(yǎng)應(yīng)用型創(chuàng)新人才[J].實(shí)驗(yàn)室研究與探索研究,2012,31(8):167-170.endprint
摘要:C語言程序設(shè)計(jì)實(shí)踐教學(xué)是整個(gè)課程中非常重要的一個(gè)環(huán)節(jié)。它為學(xué)生提供學(xué)以致用的平臺(tái)。實(shí)踐環(huán)節(jié)的充分有效利用直接關(guān)系到學(xué)生程序設(shè)計(jì)能力的提高。本文根據(jù)作者多年的一線教學(xué)經(jīng)驗(yàn),將C語言課程實(shí)踐項(xiàng)目里學(xué)生經(jīng)常出現(xiàn)的共性編程錯(cuò)誤進(jìn)行匯總,并提供解答方案,以此培養(yǎng)學(xué)生在編程中自主查錯(cuò)、糾錯(cuò)的習(xí)慣,提高自主學(xué)習(xí)能力和編程能力。
關(guān)鍵詞:C語言程序設(shè)計(jì) 實(shí)踐教學(xué) 自主學(xué)習(xí)
中圖分類號(hào):TP312 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2014)08-0220-02
1 引言
C語言程序設(shè)計(jì)是一門高級(jí)編程語言,具有較強(qiáng)的理論性和實(shí)踐操作性。掌握C語言程序設(shè)計(jì)基礎(chǔ)理論和編程技巧對(duì)學(xué)生繼續(xù)學(xué)習(xí)后續(xù)編程課程有重要的作用[1]?!皩?shí)踐教育,是指圍繞教育教學(xué)活動(dòng)目的而開展的、學(xué)生親身體驗(yàn)的實(shí)踐活動(dòng)”[2],是實(shí)現(xiàn)人才培養(yǎng)目標(biāo)的重要一環(huán)[3]。C語言教學(xué)中科學(xué)合理地利用實(shí)踐教學(xué)環(huán)節(jié)既可以實(shí)現(xiàn)將語法知識(shí)點(diǎn)學(xué)以致用,同時(shí)能夠培養(yǎng)學(xué)生的自主學(xué)習(xí)能力和解決問題的能力。
2 C程序的編寫過程
學(xué)生在實(shí)踐環(huán)節(jié)中使用Visual C++6.0軟件進(jìn)行C語言程序編程練習(xí)。Visual C++是一個(gè)功能強(qiáng)大的可視化軟件開發(fā)工具,已成為專業(yè)程序員進(jìn)行軟件開發(fā)的首選工具。由于C++是由C語言發(fā)展起來的,也支持C語言的編譯。利用C語言進(jìn)行編程要經(jīng)過:編輯、編譯、連接、運(yùn)行等過程。編輯即在VC6.0界面編寫和修改程序代碼,編輯完后要保存。C語言程序的源文件標(biāo)準(zhǔn)擴(kuò)展名后綴是.C。編譯是將源程序翻譯成計(jì)算機(jī)能夠直接識(shí)別的二進(jìn)制代碼。在編譯的過程中首先會(huì)檢查程序是否滿足語法要求,如有語法錯(cuò)誤,則在VC6.0的Build窗口會(huì)出現(xiàn)錯(cuò)誤的類型和位置,以方便編程人員繼續(xù)編輯和修改直至語法完全正確。如果編輯的程序語法符合規(guī)則,則編譯通過后Build窗口會(huì)顯示0錯(cuò)誤,0警告,同時(shí)生成后綴為obj的二進(jìn)制目標(biāo)文件。通過編輯和編譯后的就進(jìn)行連接生成后綴為exe的可執(zhí)行文件。最后點(diǎn)擊運(yùn)行命令,程序就在新彈出的窗口中被運(yùn)行并顯示相應(yīng)的結(jié)果。
3 學(xué)生常見的編程錯(cuò)誤及解答
本文選用筆者在教學(xué)中用到的一個(gè)典型程序進(jìn)行展開。編寫該程序的要求如下:(利用指針)把一個(gè)整數(shù)插入到由小到大排列的10個(gè)數(shù)的數(shù)列中,插入后仍然保持由小到大的順序排列。從鍵盤輸入排列好的10個(gè)數(shù),然后輸入一個(gè)需要插入的數(shù)字,回車后,屏幕輸出插入數(shù)字后拍好序的11個(gè)。
完成該項(xiàng)目的總體思路是利用主函數(shù)調(diào)用一個(gè)排序函數(shù)。綜合運(yùn)用了函數(shù)定義、函數(shù)調(diào)用、數(shù)組、循環(huán)語句等知識(shí)點(diǎn)。對(duì)于學(xué)生來說,是有一些難度的項(xiàng)目。做為C語言的教師,要傳授學(xué)生在編寫程序前畫流程圖的良好習(xí)慣。流程圖是算法的一個(gè)整體綱要,依據(jù)流程圖,編程的思路會(huì)更清晰,編程的條理也會(huì)更順暢。
利用VC6.0來編寫上述程序的具體操作步驟如下:
(1)創(chuàng)建一個(gè)新的空工程:?jiǎn)?dòng)VC6.0,點(diǎn)擊文件-->新建,在工程的菜單下選擇Win32 Console Application,工程名字Newint,保存在桌面。點(diǎn)擊完成后會(huì)彈出Win32 Console Application類型程序的配置界面,創(chuàng)建一個(gè)新的C語言空工程。點(diǎn)擊完成并確認(rèn)。新工程創(chuàng)建完成。
(2)添加一個(gè).c源文件到第一步新建的工程中:點(diǎn)擊文件-->新建,在文件的菜單下選擇C++ Source File,文件名為Newint.c,保存默認(rèn)。點(diǎn)擊完成后就彈出VC6.0編輯器的對(duì)話框,如圖3.1,在Newint.c對(duì)話框的空白界面光標(biāo)跳動(dòng)處就可以開始編寫程序。
(3) 程序編寫后就進(jìn)行編譯,根據(jù)錯(cuò)誤提示進(jìn)行修改直至正確。
在實(shí)踐環(huán)節(jié)中,學(xué)生感覺最有難度的是第(3)步。一是因?yàn)檐浖怯⑽陌娴?,而學(xué)生的英文水平普遍偏低;二是因?yàn)閷W(xué)生作為C語言的初學(xué)者,很難發(fā)現(xiàn)編程中的語法錯(cuò)誤。因此筆者就以上述項(xiàng)目為例來講解學(xué)生在編程中易出現(xiàn)的錯(cuò)誤及解決方法。本文提供一個(gè)學(xué)生所編寫的程序。
編譯常見的錯(cuò)誤如下:(1)fatal error:Cannot open include file:'sdtio.h': No such file or directory。-頭文件寫錯(cuò),'sdtio.h'應(yīng)該改為'stdio.h'。此頭文件表示標(biāo)準(zhǔn)輸入輸出頭文件。std是standard的縮寫。出現(xiàn)此類錯(cuò)誤主要是學(xué)生對(duì)標(biāo)準(zhǔn)輸入輸出頭文件缺少深入理解及對(duì)于標(biāo)準(zhǔn)這個(gè)單詞不熟悉。
(2)syntax error:missing ';' before 'type'。該句的含義是在類型前面少了分號(hào)。原語句為:int a[11],i 直接換行到int *p=a;錯(cuò)誤提示前一行的C語言語句結(jié)束時(shí)沒有加分號(hào)。這類錯(cuò)誤對(duì)于初學(xué)者很容易出現(xiàn)。很多學(xué)生在寫程序時(shí)會(huì)按回車換行,而導(dǎo)致忘記分號(hào)。作為基礎(chǔ)語法學(xué)生要求牢牢掌握C語言中語句結(jié)束用分號(hào)。
(3)error C2133:'ar':unknown size。此錯(cuò)誤的意思是未知的尺寸。原語句為:int ar[];
出現(xiàn)此錯(cuò)誤的原因是學(xué)生在定義數(shù)組ar時(shí)語法不對(duì)。在定義數(shù)組時(shí),要指明數(shù)組的大小即其存放元素的個(gè)數(shù)。完成上述項(xiàng)目需要用到整型數(shù)組來存放需要排序的11個(gè)數(shù)。該數(shù)組的長(zhǎng)度最少為11.所以將原語句修改為:int ar[11];使用數(shù)組時(shí)還有一個(gè)容易出現(xiàn)的錯(cuò)誤是數(shù)組下標(biāo)的使用。比如ar這個(gè)數(shù)組,它的元素下標(biāo)為0—10共11個(gè)元素。學(xué)生剛編程時(shí)很容易忽略混淆,會(huì)認(rèn)為最后一個(gè)元素為ar[11]。教師在教學(xué)過程要重點(diǎn)強(qiáng)調(diào)數(shù)組下標(biāo)問題。
(4)error C2198:'scanf':too few actual parameters。此錯(cuò)誤的意思是輸入函數(shù)scanf參數(shù)太少。程序原語句為:scanf("%d"&a[i]);出現(xiàn)錯(cuò)誤的原因是取地址符前面少了一個(gè)逗號(hào)。出現(xiàn)此類錯(cuò)誤主要是因?yàn)閷W(xué)生比較粗心。還有部分學(xué)生由于對(duì)輸入語句的語法掌握不牢固,會(huì)出現(xiàn)編程時(shí)漏掉取地址符。缺少地址符,程序編譯和連接都不會(huì)提示出錯(cuò),但在最后運(yùn)行的命令框里輸入數(shù)據(jù)時(shí)會(huì)出錯(cuò)。
(5)error C2018: unknown character '0xa3'。表示該語句行出現(xiàn)未知字符。原因是輸入程序時(shí)采用的輸入法為中文。應(yīng)改為英文輸入狀態(tài)。C語言程序中除了漢字,其他的字符都要求是英文輸入狀態(tài)。
(6)error C2143: syntax error : missing ';' before ')'。表示括號(hào)前面少了分號(hào)。原語句如下:for(i=1,i<=10,i++)。出現(xiàn)錯(cuò)誤的原因是for語句中的三個(gè)表達(dá)式隔開符號(hào)采用了逗號(hào),正確的語句是三個(gè)表達(dá)式之間用分號(hào)隔開。因?yàn)檎Z句結(jié)束是用分號(hào)。
(7)fatal error C1004: unexpected end of file found。該錯(cuò)誤表示文件意外結(jié)束。出現(xiàn)的原因是程序中有如下語句:for(i=0;i<11;i++){printf("%d\t",a[i]);。很顯然是for語句的一對(duì)大括號(hào)少了結(jié)束的一半。在C語言中,復(fù)合語句都用一對(duì)大括號(hào)括起來。學(xué)生在編程中,當(dāng)寫了很多行語句后很容易就忘記剩下的一半。。除了for語句用大括號(hào),還有if、while等語句,以及構(gòu)造類型比如共用體,結(jié)構(gòu)體在定義時(shí)也用一對(duì)大括號(hào),main程序體也是用一對(duì)大括號(hào)括起來。所以學(xué)生在編程時(shí)最好養(yǎng)成一開始就把一對(duì)大括號(hào)寫上的良好編程習(xí)慣。然后在大括號(hào)內(nèi)填寫語句。
4 結(jié)語
本文根據(jù)作者的教學(xué)經(jīng)驗(yàn),對(duì)C語言實(shí)踐教學(xué)中學(xué)生在編程時(shí)容易出現(xiàn)的共性問題進(jìn)行了闡述和解析。參考這些常見的問題,學(xué)生在編程時(shí)可以提高調(diào)試程序的效率,同時(shí)可以促進(jìn)學(xué)生培養(yǎng)良好的變編程風(fēng)格。
參考文獻(xiàn)
[1]余麗紅.基于CDIO的C語言程序設(shè)計(jì)課程教學(xué)改革探究[J].中國(guó)科教創(chuàng)新導(dǎo)刊,2011,16:150.
[2]顧秉林.加強(qiáng)實(shí)踐教育 培養(yǎng)創(chuàng)新人才[J].清華大學(xué)教育研究,2004,25(6):1-5.
[3]陳支武.完善實(shí)踐教學(xué)體系 培養(yǎng)應(yīng)用型創(chuàng)新人才[J].實(shí)驗(yàn)室研究與探索研究,2012,31(8):167-170.endprint