所屬欄目:軟件開發(fā)論文 發(fā)布日期:2010-09-15 09:29 熱度:
摘要:在程序設(shè)計(jì)教學(xué)中,程序一旦掛起,學(xué)生便感覺無(wú)從下手。本文分析了程序掛起的常見錯(cuò)誤及相應(yīng)的解決辦法,以提高學(xué)習(xí)者的編程效率。
關(guān)鍵詞:C程序設(shè)計(jì);程序掛起;解決策略
中圖分類號(hào):文獻(xiàn)標(biāo)識(shí)碼:
0引言
“C語(yǔ)言程序設(shè)計(jì)”是計(jì)算機(jī)專業(yè)的一門重要的專業(yè)基礎(chǔ)課,一般院校都把它放在大一第一學(xué)期學(xué)習(xí),由于學(xué)生在中學(xué)階段幾乎沒有接觸過程序設(shè)計(jì)課程,再加上C語(yǔ)言涉及數(shù)據(jù)類型多、基本概念多、運(yùn)算符豐富、運(yùn)算規(guī)則繁多,學(xué)生在上機(jī)實(shí)驗(yàn)時(shí)經(jīng)常遇到編輯的程序調(diào)試運(yùn)行時(shí)出錯(cuò),甚至掛起,不再運(yùn)行。鑒于此,本文在討論說明C語(yǔ)言程序常見的掛起錯(cuò)誤基礎(chǔ)上,結(jié)合實(shí)例給出各種掛起錯(cuò)誤的解決策略。
1程序的掛起錯(cuò)誤及解決策略
1.1程序中有死循環(huán)
死循環(huán)是程序進(jìn)行循環(huán)判斷的條件永遠(yuǎn)為真,或使程序退出循環(huán)的判斷條件永遠(yuǎn)為假造成的,這樣機(jī)器將無(wú)數(shù)次地執(zhí)行同一段程序代碼,出現(xiàn)死循環(huán),造成程序的掛起。例如下面一段程序:
for(a=0;a<10;++a)
{
for(b=0;b<10;++a)
{array[a][b]=0;
}
}
在本段程序中,第二個(gè)循環(huán)本應(yīng)在變量b增加到10后結(jié)束,但在第二個(gè)循環(huán)的第三部分卻增加變量a的值,這樣變量b的值始終小于10,因此第二個(gè)for循環(huán)會(huì)一直進(jìn)行下去。
再如:voidmain()
{inta=7;
while(a<10)
{==a;
a/=2;
}
}
盡管每次循環(huán)中變量a的值要增加,但與此同事它又被減小了一半,因此變量a的值永遠(yuǎn)不會(huì)增加到10,While循環(huán)的條件始終為真,循環(huán)也永遠(yuǎn)不會(huì)結(jié)束。
解決策略:程序出現(xiàn)死循環(huán),一種解決策略是重新閱讀程序,注意循環(huán)條件中循環(huán)控制變量是否使循環(huán)條件始終為真;另一種解決策略是調(diào)試程序時(shí)可以在每個(gè)循環(huán)體內(nèi)增加輸出語(yǔ)句,觀察變量值的變化,從而找出錯(cuò)誤。
1.2程序運(yùn)行時(shí)間比期望的時(shí)間長(zhǎng)
在有些情況下,程序并沒有被完全“鎖死”,但它的運(yùn)行時(shí)間比期望時(shí)間長(zhǎng)。
intfib(inti)
{if(i<3)
return1;
else
returnfib(i-1)+fib(i-2);
}
表面看,上述程序是定義斐波那契數(shù)的一段程序代碼,程序簡(jiǎn)潔短小,看上去執(zhí)行時(shí)間不會(huì)太長(zhǎng)。但事實(shí)上計(jì)算時(shí)第一步是2個(gè)子問題,第二步是4個(gè)子問題,第三步是8個(gè)子問題,如此繼續(xù),結(jié)果是子問題的數(shù)目以步數(shù)為指數(shù)不斷增長(zhǎng)。要計(jì)算第40個(gè)斐波那契數(shù)的過程中,函數(shù)fib()將被調(diào)用2億多次。
解決策略:在編程之初,仔細(xì)設(shè)計(jì)解決問題的算法,盡量避免出現(xiàn)假死鎖現(xiàn)象。
1.3程序在等待正確的輸入
有時(shí)程序停止運(yùn)行是因?yàn)樵诘却_的輸入信息。程序等待用戶輸入信息,而程序沒有輸出相應(yīng)的提示信息,用戶不知要輸入信息,或者輸入的信息不完全正確,程序看上去好像鎖住了。
main()
{
FILE*in=fopen("num.dat","r");
inttotal=0,n;
while(fscanf(in,"%d",&n)!=EOF)
{total+=n;}
printf("thetotalis%dn",total);
fclose(in);
}
如果文件num.dat中只包含整數(shù),程序能正常運(yùn)行,如果文件中包含整數(shù)以外的數(shù)據(jù),當(dāng)程序遇到一個(gè)不為整數(shù)的值時(shí),它不會(huì)讀入這個(gè)值,而是返回一個(gè)錯(cuò)誤代碼,而此時(shí)程序并未讀到文件尾,與EOF比較的值為假,這樣循環(huán)繼續(xù)進(jìn)行,n取某個(gè)未定義的值,程序再次讀文件,再次遇到剛才的錯(cuò)誤數(shù)據(jù),這樣程序就會(huì)無(wú)休止地執(zhí)行下去。
解決策略:如果遇到程序中需要輸入數(shù)據(jù),就在相應(yīng)的輸入函數(shù)前,加入相應(yīng)的提示信息;如果遇到從文件中讀取數(shù)據(jù)的,盡量先去測(cè)試讀入的數(shù)據(jù)是否正確。
還有許多其它原因會(huì)使程序掛起,但總的來(lái)說,它們都屬于上述三種類型中的一種。如果實(shí)在不能確定程序掛起的原因也可先檢查程序的總體結(jié)構(gòu),然后按照程序的執(zhí)行順序依次查看程序的各個(gè)部分能否正確運(yùn)行。如果各組成部分都能正確運(yùn)行,再檢查各部分是否帶回正確的數(shù)值。
#include"stdio.h"
#include"stdlib.h"
intA(),B(int),C(int,int);
/*函數(shù)A(),B(int),C(int,int)的定義均在其它模塊*/
main()
{
intv1,v2,v3;
v1=A();
v2=B(v1);
v3=C(v1,v2);
printf("theresultis%dn",v3);
return0;
}
在調(diào)試程序時(shí),先檢查函數(shù)A()是否把控制權(quán)返回給了主函數(shù),可以在調(diào)用函數(shù)A()的語(yǔ)句后面加上exit()命令,或者用注釋符號(hào)把對(duì)函數(shù)B(),C()的調(diào)用括起來(lái),然后重新編譯并運(yùn)行程序,如果程序運(yùn)行并退出,可以判斷是程序的其它部分掛起。用同樣的方法測(cè)試程序的每一部分,直到發(fā)現(xiàn)使程序掛起的部分;如果使程序掛起的函數(shù)本身正確,就需要檢查函數(shù)接受的所有值,像上例中在調(diào)用A()函數(shù)后,輸出變量v1的值,以確認(rèn)v1是否在函數(shù)B()所能接受的值的范圍內(nèi)。
2結(jié)束語(yǔ)
程序的調(diào)試應(yīng)該是一個(gè)有序的過程,需要很多的技巧,但只要掌握調(diào)試技巧,最終總能使程序正常運(yùn)行,得到正確的結(jié)果。
參考文獻(xiàn):
[1]譚浩強(qiáng).C語(yǔ)言程序設(shè)計(jì).北京:清華大學(xué)出版社.2005
[2]張芳妮,呂波.C語(yǔ)言編程常見問題.北京:清華大學(xué)出版社.2001
[3]何欽銘.C語(yǔ)言程序設(shè)計(jì).北京:高等教育出版社.2007
搜論文知識(shí)網(wǎng)致力于為需要刊登論文的人士提供相關(guān)服務(wù),提供迅速快捷的論文發(fā)表、寫作指導(dǎo)等服務(wù)。具體發(fā)表流程為:客戶咨詢→確定合作,客戶支付定金→文章發(fā)送并發(fā)表→客戶接收錄用通知,支付余款→雜志出版并寄送客戶→客戶確認(rèn)收到。鳴網(wǎng)系學(xué)術(shù)網(wǎng)站,對(duì)所投稿件無(wú)稿酬支付,謝絕非學(xué)術(shù)類稿件的投遞!
文章標(biāo)題:淺析C語(yǔ)言程序的掛起錯(cuò)誤及解決策略
轉(zhuǎn)載請(qǐng)注明來(lái)自:http://m.anghan.cn/fblw/dianxin/ruanjiankaifa/4163.html
攝影藝術(shù)領(lǐng)域AHCI期刊推薦《Phot...關(guān)注:106
Nature旗下多學(xué)科子刊Nature Com...關(guān)注:152
中小學(xué)教師值得了解,這些教育學(xué)...關(guān)注:47
2025年寫管理學(xué)論文可以用的19個(gè)...關(guān)注:192
測(cè)繪領(lǐng)域科技核心期刊選擇 輕松拿...關(guān)注:64
及時(shí)開論文檢索證明很重要關(guān)注:52
中國(guó)水產(chǎn)科學(xué)期刊是核心期刊嗎關(guān)注:54
國(guó)際出書需要了解的問題解答關(guān)注:58
合著出書能否評(píng)職稱?關(guān)注:48
電信學(xué)有哪些可投稿的SCI期刊,值...關(guān)注:66
通信工程行業(yè)論文選題關(guān)注:73
SCIE、ESCI、SSCI和AHCI期刊目錄...關(guān)注:121
評(píng)職稱發(fā)論文好還是出書好關(guān)注:68
復(fù)印報(bào)刊資料重要轉(zhuǎn)載來(lái)源期刊(...關(guān)注:51
英文期刊審稿常見的論文狀態(tài)及其...關(guān)注:69
Web of Science 核心合集期刊評(píng)估...關(guān)注:59
電子信息論文范文
智能科學(xué)技術(shù)論文 廣播電視論文 光電技術(shù)論文 計(jì)算機(jī)信息管理論文 計(jì)算機(jī)網(wǎng)絡(luò)論文 計(jì)算機(jī)應(yīng)用論文 通信論文 信息安全論文 微電子應(yīng)用論文 電子技術(shù)論文 生物醫(yī)學(xué)工程論文 軟件開發(fā)論文
SCI期刊分析
copyright © m.anghan.cn, All Rights Reserved
搜論文知識(shí)網(wǎng) 冀ICP備15021333號(hào)-3