查看全部128種考試
1
2
3
4
5
6
7
8
9
10
admin  
【字體: 機(jī)考如何避免范圍性錯(cuò)誤
機(jī)考如何避免范圍性錯(cuò)誤

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

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

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

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

  我是這樣編寫(xiě)的:

  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”。再次驗(yàn)證輸入40,結(jié)果是:“1 5”。多次驗(yàn)證(用20、50或其他偶數(shù))結(jié)果都正確,可就是評(píng)分系統(tǒng)卻不給分。我開(kāi)始懷疑評(píng)分系統(tǒng)是不是做得太死板了,或有錯(cuò)誤。

  打開(kāi)答案,發(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;
  clrscr;
  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語(yǔ)句前,一直到j(luò)++后,還有一層“{ }”;在定義變量時(shí)的寫(xiě)法不同,我是用一條語(yǔ)句定義了變量和指針,答案卻用了三條語(yǔ)句。雖然認(rèn)為這兩處都不會(huì)影響程序的運(yùn)行,但還是按它的意思做了修改。

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

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

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

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

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

轉(zhuǎn)帖于:計(jì)算機(jī)等級(jí)考試_考試吧
文章搜索  
看了本文的網(wǎng)友還看了:
網(wǎng)友評(píng)論
昵 稱: *  評(píng) 分: 1分 2分 3分 4分 5分
標(biāo)題:   匿名發(fā)表    (共有條評(píng)論)查看全部評(píng)論>>
版權(quán)聲明 -------------------------------------------------------------------------------------
  如果計(jì)算機(jī)等級(jí)考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請(qǐng)與我們聯(lián)系,我們將會(huì)及時(shí)處理。如轉(zhuǎn)載本計(jì)算機(jī)等級(jí)考試網(wǎng)內(nèi)容,請(qǐng)注明出處。
關(guān)于本站  網(wǎng)站聲明  廣告服務(wù)  聯(lián)系方式  付款方式  站內(nèi)導(dǎo)航  客服中心  友情鏈接  考試論壇  網(wǎng)站地圖
Copyright © 2004-2008 考試吧計(jì)算機(jī)等級(jí)考試網(wǎng) All Rights Reserved    
中國(guó)科學(xué)院研究生院權(quán)威支持(北京) 電 話:010-62168566 傳 真:010-62192699
百度大聯(lián)盟黃金認(rèn)證  十佳網(wǎng)絡(luò)教育機(jī)構(gòu)  經(jīng)營(yíng)許可證號(hào):京ICP060677