第四套上機(jī)試卷
一、改錯(cuò)題
含有錯(cuò)誤的源程序如下:
void match(char *pat,char str) ①
{char *p=pat,*q=str;
int i=0; ②
while((*p!=NULL)&&(*q!=NULL))
if(*p= =*q||*p= ='?')p++,q++;
else if(*p= ='*')
{p++;
while(*q!=*p&&*q!=NULL)q++;
}
else i=0;break; ?、?BR> if(*p!=NULL||*q!=NULL)i=0;
return i;
}
}
【知識(shí)點(diǎn)】字符串處理、程序的調(diào)試
【解析】程序中的錯(cuò)誤一般可以分為兩類(lèi),一類(lèi)是語(yǔ)法錯(cuò)誤,即程序中有拼寫(xiě)錯(cuò)誤,書(shū)寫(xiě)不符合C語(yǔ)言的規(guī)定等,此類(lèi)錯(cuò)誤可通過(guò)調(diào)試(按F9鍵),根據(jù)提示進(jìn)行改正。另一類(lèi)是邏輯錯(cuò)誤,程序調(diào)試已通過(guò)(報(bào)Success),但運(yùn)行結(jié)果不正確,此類(lèi)錯(cuò)誤的修改必須要理解程序后方能改正。
程序中用到系統(tǒng)預(yù)設(shè)的符號(hào)常量NULL,又未加“文件包含”處理,按F9后即編譯時(shí)系統(tǒng)會(huì)報(bào)錯(cuò),故應(yīng)在最前面加上include 或?qū)⒁韵氯縉ULL改為0。函數(shù)match分明有返回值,故系統(tǒng)也會(huì)報(bào)錯(cuò),應(yīng)將void改為int;變量i的作用是:當(dāng)匹配時(shí)取值1,否則取值0,根據(jù)③處,易于發(fā)現(xiàn)i初值應(yīng)取1,故②處應(yīng)改為i=1,當(dāng)發(fā)現(xiàn)不匹配時(shí),立即置為0,并跳出循環(huán),此兩句應(yīng)是一個(gè)整體,應(yīng)構(gòu)成復(fù)合語(yǔ)句。②③均為邏輯錯(cuò)誤。
【答案】(1)在最前面加上include 或?qū)⒁韵氯縉ULL改為0
(2)加下劃線的部分改為:
①int match(char *pat, char *str)
②i=1
③{ i=0;break;}
二、編程題
【知識(shí)點(diǎn)】窮舉法、數(shù)據(jù)文件的使用
【解析】將30~50之間的每一個(gè)數(shù)都進(jìn)行判斷,就不會(huì)有遺漏。注意,按要求必須調(diào)用函數(shù),且使用數(shù)據(jù)文件完成輸出。使用數(shù)據(jù)文件有5大步驟:①#include ,②用FILE *定義指針,③用fopen("A:\\myf2.out","w")打開(kāi)文件并賦值給指針,④用fprintf輸出結(jié)果,⑤用fclose關(guān)閉文件。
【注意】fopen("A:\\myf2.out","w")中盤(pán)符A:后要加雙斜杠表示根目錄,因?yàn)镃語(yǔ)言用轉(zhuǎn)義字符'\\'才能表達(dá)字符\;另外,文件的命名一定要嚴(yán)格按照規(guī)定處理,千萬(wàn)不要隨便命名。
【參考答案】
#include
int inv(int x)
{int y;
y=x/10+x%10*10; /*此句可將某兩位正整數(shù)的十位與個(gè)位數(shù)字換位*/
return y;
}
main()
{FILE *out;
int i,j;
if((out=fopen("A:\\myf2.out","w"))= =NULL)
{printf("Open file myf2.out failed!\n");exit(1);}
for(i=30;i<50;i++)
for(j=30;j<50;j++)
if((i/10!=i%10)&&(i*j= =inv(i)*inv(j))) /* i/10!=i%10確保十位與個(gè)位數(shù)字不同*/
fprintf(out,"%d*%d=%d*%d\n",i,j,inv(i),inv(j));
fclose(out); }