網(wǎng)站首頁
分類導(dǎo)航
試題中心
下載中心
英語學(xué)習(xí)
繽紛校園
考試論壇
網(wǎng)站留言
客服中心
 上機考試編程如何避免范圍性錯誤
【字體:
上機考試編程如何避免范圍性錯誤
http://m.1glr.cn 來源:考試吧(Exam8.com) 點擊: 更新:2004-12-20

    機考如何避免范圍性錯誤 

    小編:參加上機考試的朋友最忌諱犯的錯誤就是粗心,有時明明會做的題,卻因為一個小小的符號錯誤導(dǎo)致全盤皆輸。下面這位朋友在做上機練習(xí)時,發(fā)現(xiàn)自己所編程序的運行結(jié)結(jié)果正確無誤,但評分系統(tǒng)沒有給分,這是為什么呢?下面讓她來告訴我們其中的原委。  

  在上機操作時,要多注意循環(huán)的范圍。這種錯誤往往只有一個符號之差,用run運行時并不報錯,在你輸入數(shù)據(jù)后查看結(jié)果時,可能結(jié)果顯示也正確,但卻不一定能得分。我在復(fù)習(xí)過程中,做上機模擬時遇到了這種情況:運行結(jié)果正確,評分時卻是0分。下面這道題并不難,卻讓我頗費周折,大家不妨看看,也好引以為戒。  

  “請編寫一個函數(shù)void fun(int x,int pp[ ],intn)。它的功能是:求出能整除x且不是偶數(shù)的各整數(shù),并放在數(shù)組pp[ ]中,這些除數(shù)的個數(shù)由n返回。運行時輸入x的值為30!  

 。ㄗ⒁猓翰糠衷闯绦蛟谖募䅟rog.c中。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。)  

  我是這樣編寫的:  

  void fun(int x,int pp[ ],int n)  
  {  
  int i, j=0,point;  
  point=pp;  
  for(i=1,i  
  if((x%i= =0)&&&&(i%2!=0))  
  { point=i;  
  point++;  
  j++; }  
  point=NULL;  
  n=j;  
  }  

  按F9未顯示異常,按ctrl +F9后輸入“30”,結(jié)果是:“1 3 5 15”。再次驗證輸入40,結(jié)果是:“1 5”。多次驗證(用20、50或其他偶數(shù))結(jié)果都正確,可就是評分系統(tǒng)卻不給分。我開始懷疑評分系統(tǒng)是不是做得太死板了,或有錯誤。  

  打開答案,發(fā)現(xiàn)答案的解題思路和我的是一致的,參考答案如下:  

  #include  
  #include  
  void fun(int x,int pp[ ],int n)  
  {  
  int i ;  
  int j=0;  
  int point;  
  point=pp;  
  for(i=1,i<=x;i++)  
  {if((x%i= =0)&&&&(i%2!=0))  
  { point=i;  
  point++;  
  j++; }  
  }  
  point=NULL;  
  n=j;  
  }  
  main()  
  { int x,aa[1000],n,i; 
  cl
rscr;  
  printf(“\n please enter an integer number:\n);  
  scanf(“%d”,&&x)  
  fun(x,aa,&&n);  
  for(i=0;i  
  printf(“%d”,aa[i]);  
  printf(“\n”);  
  NONO( );  
  }  

  我的解答和答案相比,只有幾處不同:答案中從if語句前,一直到j(luò)++后,還有一層“{ }”;在定義變量時的寫法不同,我是用一條語句定義了變量和指針,答案卻用了三條語句。雖然認為這兩處都不會影響程序的運行,但還是按它的意思做了修改。  

  修改后重新運行,再看評分還是0分。這就更讓我肯定自己編寫無誤,是評分系統(tǒng)的問題。這時候,粗心的我并沒有發(fā)現(xiàn)for語句內(nèi)的第二表達式是小于等于x而不是小于x。也許是只注意結(jié)果的正確,主觀上沒懷疑程序有問題。  

  就在我準(zhǔn)備放棄的時候,還是不甘心,再仔細看一遍答案,才突然發(fā)現(xiàn)第二表達式的錯誤。  

  我這才明白了為什么每次運行結(jié)果都正確卻不給分的原因:驗證輸入的數(shù)字(x)都用的是偶數(shù)。按本題的題意,偶數(shù)是不會顯示在結(jié)果中的。但如果輸入的是27、31或 41,由于結(jié)果沒有顯示這些數(shù)的本身,那么就會及早發(fā)現(xiàn)程序中的毛病,就能想到循環(huán)的范圍。  

  在正式考試的時候,沒有答案可循,更沒有評分系統(tǒng)可用。所以,我們在輸入數(shù)字時一定要根據(jù)題意全面選擇輸入的數(shù)字,也好及早發(fā)現(xiàn)程序中的錯誤。另外還有兩個小建議:  

  1. 編寫程序時,一般主函數(shù)已經(jīng)給出,只讓考生編寫某個子函數(shù),這時你若定義了指針指向形參中的某個數(shù)組,那么在最后一定不要忘了給指針賦值NULL(或0或‘\0’),以防止指針越界。  
  2. 先保存再運行,以備程序編寫欠妥導(dǎo)致死機。 

文章錄入:丹丹云    責(zé)任編輯:Exam8.com  
 版權(quán)聲明
   如果本網(wǎng)站所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請與我們聯(lián)系,我們將會及時處理。如轉(zhuǎn)載本網(wǎng)內(nèi)容,請注明出處。
 發(fā)表評論
關(guān)于本站 網(wǎng)站聲明 廣告服務(wù)  聯(lián)系方式  付款方式  站內(nèi)導(dǎo)航  客服中心  友情鏈接   
Copyright © 2004-2006 考試吧 (Exam8.com) All Rights Reserved 
中國科學(xué)院研究生院中關(guān)村園區(qū)(北京市海淀區(qū))