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