2010年計(jì)算機(jī)等級(jí)考試二級(jí)C:上機(jī)習(xí)題12套(4)

字號(hào):

2010年計(jì)算機(jī)等級(jí)考試二級(jí)C:上機(jī)習(xí)題12套(4)

    第四套上機(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); }