• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    《C++程序設(shè)計》中職教學(xué)中的易錯分析

    2019-03-15 13:31:28胡玲潔
    電腦知識與技術(shù) 2019年2期
    關(guān)鍵詞:語法錯誤

    胡玲潔

    摘要:C++是現(xiàn)今最重要的編程語言之一,但中職學(xué)生在學(xué)習(xí)中容易遇到很多細節(jié)問題,不僅影響學(xué)生的學(xué)習(xí)效率,甚至導(dǎo)致學(xué)生的厭學(xué)情緒。作者結(jié)合多年的C++教學(xué)經(jīng)驗,梳理了學(xué)生經(jīng)常出現(xiàn)的一些問題,包括語法錯誤和邏輯錯誤,并提出針對性的解決方法。

    關(guān)鍵詞:C++;語法錯誤;邏輯錯誤

    中圖分類號:G424? ? ? ? 文獻標識碼:A? ? ? ? 文章編號:1009-3044(2019)02-0133-02

    《C++程序設(shè)計》作為理工科學(xué)生的一門專業(yè)基礎(chǔ)課,影響著學(xué)生后續(xù)專業(yè)課程的邏輯思維方式和程序設(shè)計思想的建立,是現(xiàn)今最重要的編程語言之一,在國內(nèi)外得到了廣泛的使用。C++知識點多,靈活性強,還包含很多零散的知識點,有些基本概念問題容易產(chǎn)生混淆甚至誤解,加上中職學(xué)生零基礎(chǔ),學(xué)習(xí)理解能力不是很強,導(dǎo)致很多學(xué)生學(xué)習(xí)起來很困難,難以掌握本課程的精髓。根據(jù)自己的教學(xué)經(jīng)驗,作者在此提出了一些教學(xué)中學(xué)生常見的錯誤問題并予以分析說明。

    1 常見語法錯誤

    1.1 運算符的混淆

    C++中,“=”與“==”兩個運算符是學(xué)生使用中最容易混淆的,因為習(xí)慣于“等于”就是“=”,導(dǎo)致在使用中一不小心就發(fā)生錯誤,如下判斷題:

    若有int i=10, j=0; 則執(zhí)行完語句if (j=0) i++; else i--; i的值為 11。很多學(xué)生會直接判斷此題是對的,也就是把條件j=0理解為“j等于0”,而實際是“j賦成0,條件表達式的值為0,也就是假”,這樣執(zhí)行的是else分支,結(jié)果是9。

    1.2 數(shù)據(jù)的非法運算

    “%”求余和“/”相除兩個運算符在使用過程中,學(xué)生往往忽略了一些運算特點,如下填空題:若有 int a=4; float b=14.70; 則 a/5 的值為? ? ,能正確表示a+b對a取余的表達式是? ? ?。很多學(xué)生會直接填上答案:0.8和(a+b)%a,而正確答案應(yīng)該是:0和int(a+b)%a,正是因為忽視了“整型/整型”,結(jié)果還是整型,以及“%”求余運算的兩個操作數(shù)必須都是整型。

    1.3 邏輯表達式的模糊

    教學(xué)中,學(xué)生對邏輯運算符&&和||的使用,也經(jīng)常模糊不清,不會靈活運用,比如,寫出判斷一個字符是字母的邏輯表達式,很多學(xué)生知道字母包括大寫字母和小寫字母,也知道ASCII表中字母排放的規(guī)則,可書寫表達式時就是沒有思路,一方面是區(qū)間的交集,另一方面是區(qū)間的并集。此時引導(dǎo)學(xué)生從數(shù)軸圖入手,從A≤ch≤Z,演變到ch>=A&&ch<=Z,再擴展到(ch>=A&&ch<=Z)||( ch>=a&&ch<=z),這樣講解會比較清晰。

    同樣的一個表達式,判斷某一年是否是閏年,也經(jīng)常難倒學(xué)生,條件是年份year能被400整除或year能被4整除但不能被100整除:首先確定大邏輯結(jié)構(gòu),是由兩個條件的并集組成,一個是簡單的year%400==0,另一個是復(fù)雜的兩個要求相并,year%4==0&&year%100!=0,最后再由||運算符組合成完整的表達式y(tǒng)ear%400==0|| (year%4==0&&year%100!=0)。為了更清楚地表示邏輯關(guān)系,建議學(xué)生在書寫時對那些復(fù)雜條件的完整表示加上(),幫助理解和記憶。

    1.4 邏輯運算符的智能性

    &&和||是兩個具有智能性的運算符,有不少場合并不需要做完表達式中每一個運算。因為0&&×結(jié)果是0,1||×結(jié)果是1,×部分的結(jié)果不影響整個表達式的結(jié)果,所以根本就不需要做了,也就是當(dāng)&&運算符的左側(cè)是0,則右側(cè)的表達式就不做,同理,||運算符的左側(cè)是1,則右側(cè)也不做,比如:

    設(shè)有int i; 則表達式i=1,++i;++i||++i,i 的值為3,而不是4,因為此逗號表達式中的第三個只做||的左側(cè),右側(cè)智能化地不做了。

    1.5 數(shù)據(jù)范圍的溢出

    C++中每一種數(shù)據(jù)類型都是指定的長度,也就有明確的數(shù)據(jù)范圍,如果忽視了這一點,程序的結(jié)果也常常會出現(xiàn)意想不到的錯誤,如編程求1~30的階乘之和s:

    Int? f=1,n,s=0;

    for(n=1;n<=30;n++)

    { f=f*n;s=s+f;}

    cout<

    學(xué)生會習(xí)慣性地將變量都定義為int 型,程序沒有任何語法和邏輯錯誤,可調(diào)試執(zhí)行時,結(jié)果卻顯示一負數(shù)。這是由于數(shù)據(jù)溢出了有效范圍而導(dǎo)致的,學(xué)生很少會意識到這個原因,這題只要將變量定義為float型就可以了。

    1.6 ++、--的靈活運用

    C++中,自增++、自減--的運用非常靈活,目標代碼的執(zhí)行效率也高,但學(xué)生在使用時很容易出錯。教學(xué)中需要強調(diào)注意以下幾點:

    1)++、--只能作用于某個變量,不能是常量或表達式

    例:++x? ?y--? 都是合法表達式

    ++(x+y)? ? 5--? 都是不合法表達式

    運算要能清楚地告知是哪個變量值增1或減1,同時強調(diào)結(jié)果還是要送回原本的那個變量,而常量是不能改變值的,表達式也不能明確新值的存放位置,所以都不能用于++、--。

    2)注意++、--在變量中的應(yīng)用位置是前置還是后置

    后置i++、i--,運算時先去掉++、--進行運算,再對i自增或自減:前置++i、--i,運算時先對i自增或自減,然后去掉++、--再進行運算;

    [比如:int i=4; y=i++; 比如:int i=4; y=++i; 執(zhí)行流程:int i=4;, 執(zhí)行流程:int i=4;, y=i;? ?//先運算 i=i+1;? //先自增 i=i+1;? //后自增 y=i;? //后運算 結(jié)果:? y=4? i=5 結(jié)果:i=5? y=5 ]

    再如下更復(fù)雜的表達式:設(shè) int? i=1;

    [表達式(i++)+(i++)+(i++) 表達式結(jié)果為3,i的值為4 因為是后置,所以先執(zhí)行i+i+i,即1+1+1=3,再i三次自增,i變成4 表達式 (++i)+(++i)+(++i) 表達式結(jié)果為12,i的值為4 因為是前置,所以先執(zhí)行i三次自增,i變成4,再執(zhí)行i+i+i,即4+4+4=12 表達式 (++i)+(i++)+(i++) 表達式結(jié)果為6,i的值為4 其中一個前置,所以i先自增一次,變成2,然后執(zhí)行 2+2+2=6,兩個后置,i再自增兩次,變成4 ]

    由此可見,當(dāng)同一個表達式中出現(xiàn)前置后置運算符時,系統(tǒng)先執(zhí)行前置運算符,把得出來的值作為表達式中所有該變量的值,計算出表達式的結(jié)果,最后執(zhí)行后置運算符,得到對應(yīng)的變量值,即在優(yōu)先級上是:++i>i>i++,--也是如此。

    3)++、--優(yōu)先級高,結(jié)合方向為右結(jié)合

    當(dāng)表達式中同時出現(xiàn)多個運算符時,運算符優(yōu)先級和結(jié)合性就顯得尤為重要,這也是考核學(xué)生基本功的一個重點。++、--是單目運算符,優(yōu)先級僅次于()等運算符,結(jié)合方向為自右向左。 比如:int? x=10,y=6;則表達式x+++y的值是16,執(zhí)行完后x值為11,y的值為6,因為是右結(jié)合,相當(dāng)于(x++)+y。

    2 常見邏輯錯誤

    2.1 輸入/輸出邏輯錯誤

    對于初學(xué)者來說,往往對編程無從下手的一個原因是搞不清程序的入口和出口,比如,完成一個分段函數(shù)的編程:

    學(xué)生定義了變量x、y,緊跟著會cin>>x>>y,盲目地認為變量都要從鍵盤輸入數(shù)據(jù),這樣的問題看似簡單,但實際教學(xué)中經(jīng)常發(fā)生,所以在編程前,一定要對程序的功能和執(zhí)行流程進行清晰的分析,結(jié)合數(shù)學(xué)邏輯和流程圖,理清思路后再開始編寫。

    2.2 多分支結(jié)構(gòu)中的常見錯誤

    1)if-else的匹配

    if-else的匹配原則是else總是與它前面最近的還沒有配對的if進行配對。教學(xué)中,學(xué)生碰到if嵌套,特別是內(nèi)嵌的if省略了else部分時,出錯率特別高,這種情況下,培養(yǎng)學(xué)生根據(jù)匹配原則先畫出流程圖,畫的同時注意花括號構(gòu)成的復(fù)合語句,在流程圖基礎(chǔ)上再來執(zhí)行各分支的功能,效果會比較好。

    2)switch中break的靈活設(shè)計

    Switch語句中一旦找到一個開關(guān)入口,程序會執(zhí)行其case后的相應(yīng)語句,并且會不加判斷地執(zhí)行下一個case語句,此時需要用break來中斷,跳出switch。當(dāng)開關(guān)中有多個連續(xù)的case入口執(zhí)行相同的語句時,可以省略前面的所有case后的語句,只保留最后一個case后的語句。學(xué)生在編程時經(jīng)常會省略出錯,把不改省的語句省掉,可以省的不省,此時建議學(xué)生可以利用表格,逐一列舉各分支,尤其是臨界點的數(shù)據(jù)容易出錯,列舉清晰后再設(shè)計case各開關(guān)情況,最后再去掉可以省略的部分,不要直接一步到位。

    2.3 循環(huán)結(jié)構(gòu)中的常見錯誤

    1)誤用賦值=來表達邏輯判斷==

    比如:統(tǒng)計輸入所有成績的和,輸入以0結(jié)束:

    int? x;

    cin>>x;

    while(i=0) {…}

    此循環(huán)一次也不執(zhí)行,因為i直接賦成0,條件一開始就不成立。

    2)缺少對循環(huán)條件的修改

    比如:輸出10個*:

    int? i=1;

    while(i<=10)? cout<<*;

    無修改循環(huán)變量的語句,條件永遠成立,導(dǎo)致產(chǎn)生死循環(huán)。

    3)循環(huán)體模糊(花括號放錯位置)

    復(fù)合語句作為循環(huán)體時,需要用{}括出,如果沒有,循環(huán)體僅為一條語句,

    比如:輸出10個*,排成一列:

    for(i=0;i<=10;i++)

    cout<<*;

    cout<

    此時輸出的10個*是排成一行,而不是一列,循環(huán)體僅是第一個cout語句。而題目要求循環(huán)體包括兩個動作:輸出*+換行,所以需要把上面兩個輸出語句用{}構(gòu)成復(fù)合語句,才是正確的輸出。此情況在循環(huán)嵌套中學(xué)生經(jīng)常出錯。

    4)忽略空語句

    比如:要輸出1~10

    for(i=1;i<=10;i++); cout<

    結(jié)果僅輸出一個11,其原因就是循環(huán)體僅是一條空語句,真正的輸出語句不是循環(huán)體。

    以上是筆者在教學(xué)過程中的一些經(jīng)驗,遇到的問題遠不止這些。C++程序設(shè)計出現(xiàn)的錯誤各種各樣,主要是語法錯誤和邏輯錯誤。編程是一門嚴謹?shù)恼n程,需要學(xué)習(xí)者有深厚的興趣,認真負責(zé)的態(tài)度,反復(fù)實踐和探索的精神,掌握扎實的基本功,多閱讀多思考,多動手多實踐,善于總結(jié),盡量避免錯誤,編寫高質(zhì)量程序。

    參考文獻:

    [1] 周正德,侯正昌 C++程序設(shè)計[M].3版,北京:電子工業(yè)出版社,2013.

    猜你喜歡
    語法錯誤
    初三英語寫作語法錯誤分析
    從美國學(xué)生的中文語法錯誤看中美文化差異
    活力(2019年5期)2019-06-18 04:20:14
    批判性思維在翻譯實踐中的運用
    基于XML Schema XML文檔驗證算法
    中學(xué)英語教學(xué)中學(xué)生常見錯誤的探索與分析
    高中生英語寫作語法錯誤分析
    英語翻譯常見錯誤及對策探析
    概念整合理論下英語中介語發(fā)展研究
    漢語負遷移對英語寫作的影響及啟示
    科技資訊(2016年25期)2016-12-27 10:55:46
    高中英語寫作中的語法錯誤分析
    青春歲月(2016年22期)2016-12-23 10:59:20
    荃湾区| 涞水县| 包头市| 化德县| 达尔| 从化市| 贡嘎县| 孙吴县| 郯城县| 沁源县| 安西县| 松阳县| 台北县| 新安县| 新晃| 明光市| 绥德县| 江陵县| 泾川县| 株洲市| 塔城市| 嵊泗县| 增城市| 永清县| 克山县| 扎囊县| 闽清县| 恩平市| 若尔盖县| 崇明县| 光山县| 龙山县| 渝中区| 宣威市| 淳化县| 日土县| 赫章县| 彭山县| 广东省| 宁强县| 安泽县|