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

字號:

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

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