久久精品电影网_久久久久久电影_久久99精品久久久久久按摩秒播_天堂福利影院_国产男女爽爽爽免费视频_国产美女久久

淺析C語言程序的掛起錯誤及解決策略

所屬欄目:軟件開發論文 發布日期: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

相關問題解答

SCI服務

搜論文知識網 冀ICP備15021333號-3

主站蜘蛛池模板: 美女视频一区二区 | 日韩欧美三区 | 自拍偷拍第一页 | 久久1区| 精品久久一区 | 婷婷色国产偷v国产偷v小说 | 黄色三级在线播放 | 激情一区二区三区 | 九九99久久 | 国产精品精品视频一区二区三区 | 精品中文在线 | 青青青伊人 | 欧美小视频在线观看 | 亚洲高清一区二区三区 | 在线播放中文字幕 | 国产激情视频网址 | av一区二区三区四区 | 日韩精品一区二区三区视频播放 | 日韩免费视频一区二区 | 偷派自拍 | 精品久久99| 日韩一二三区 | 一区二区免费 | 精品乱码久久久久 | 紧缚调教一区二区三区视频 | 婷婷色国产偷v国产偷v小说 | 欧美综合精品 | 欧美日一区二区 | 中文字幕亚洲欧美 | 亚洲一区在线日韩在线深爱 | 亚洲一区二区视频 | 91久久精品国产 | 国产1区2区 | 日韩国产欧美一区 | 亚洲色欲色欲www | 亚洲国产精品一区二区久久 | 国产午夜精品一区二区三区嫩草 | 91精品国产99久久 | 逼逼网 | 亚洲成人av在线 | 人人九九精 |