第二套上機(jī)試卷
一、改錯(cuò)題
【知識(shí)點(diǎn)】整數(shù)數(shù)位處理、數(shù)字字符與相應(yīng)數(shù)字的轉(zhuǎn)換、程序調(diào)式
【解析】程序中的錯(cuò)誤一般可以分為兩類,一類是語(yǔ)法錯(cuò)誤,即程序中有拼寫(xiě)錯(cuò)誤,書(shū)寫(xiě)不符合C語(yǔ)言的規(guī)定等,此類錯(cuò)誤可通過(guò)調(diào)試(按F9鍵),根據(jù)提示進(jìn)行改正。另一類是邏輯錯(cuò)誤,程序調(diào)試已通過(guò)(報(bào)success),但運(yùn)行結(jié)果不正確,此類錯(cuò)誤的修改必須要理解程序后方能改正。
使用putchar函數(shù)必須在程序開(kāi)頭加上文件包含#include "stdio.h";scanf語(yǔ)句中必須是地址序列,故scanf("num=%d",num);應(yīng)改為scanf("num=%d",&num);,且調(diào)式時(shí)注意將“num=”原樣輸入;某數(shù)字若轉(zhuǎn)換為相應(yīng)數(shù)字字符,應(yīng)加上字符'0'或48(字符'0'的ASCII碼值),故digit[n++]=m%10;應(yīng)改為digit[n++]=m%10+'0';;最后輸出時(shí),n已在前面多加了一次,故而輸出時(shí)應(yīng)先減1,故for(;n>=0;n--)中第一個(gè)表達(dá)式應(yīng)加上n--或--n或n=n-1。
【答案】①在程序開(kāi)頭加上#include "stdio.h"
②將原第五行的scanf("num=%d",num);改為scanf("num=%d",&num);
③將原第十一行的digit[n++]=m%10;改為digit[n++]=m%10+'0';
④將原第十六行的for(;n>=0;n--)改為for(n--;n>=0;n--)
二、編程題
【知識(shí)點(diǎn)】字符串應(yīng)用、數(shù)據(jù)文件的使用
【解析】注意,按要求必須調(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")中盤符A:后要加雙斜杠表示根目錄,因?yàn)镃語(yǔ)言用轉(zhuǎn)義字符'\\'才能表達(dá)字符\;另外,文件的命名一定要嚴(yán)格按照規(guī)定處理,千萬(wàn)不要隨便命名。
【參考答案】
#include "stdio.h"
int compress(char s[])
{int n,k=0,count=0;
if(s[0]!=NULL) n=k+1;
while(s[n]!=NULL)
{if(s[k]= =s[n]){n++;count++;}
else {s[++k]=s[n];n++;}
}
s[++k]='\0';
return count;
}
main()
{char num[100];
int count=0;
FILE *fp;
fp=fopen("A:\\myf2.out","w");
gets(num);
count=compress(num);
fprintf(fp,"%s",num);
printf("%d",count);
fclose(fp); }
運(yùn)行結(jié)果如下:
@ I wil sucesful & and you to ! #