第五套上機(jī)試卷
一、改錯(cuò)題
【分析】:對(duì)于改錯(cuò)題的程序中的錯(cuò)誤一般可分為兩類,一類是語(yǔ)法錯(cuò)誤,程序中的語(yǔ)句不符合C語(yǔ)言的語(yǔ)法,拼寫(xiě)錯(cuò)誤,這類的錯(cuò)誤可通過(guò)調(diào)試程序改正。另一類是邏輯錯(cuò)誤,程序調(diào)試已通過(guò),但運(yùn)行結(jié)果不正確,這類錯(cuò)誤的修改必須要看懂和理解程序。
#include
#define N 50
void sum(int n,int *pa)
/*屬第一類錯(cuò)誤。若聲明為void類型,則該函數(shù)沒(méi)有返回值,但程序要求返回前n的和,所以類型聲明不正確,應(yīng)改為: int 或去掉*/
{ int count, total,temp;
*pa=3;*++pa=2;
total=5; count=2;
while(count++
{ temp=*(pa-1)**pa;
if(temp<10)
{ total+=temp; *(++pa)=temp;
}
else
{*++pa=temp/10;
total+=*pa;
if(count
/*屬第二類錯(cuò)誤。若乘積為兩位數(shù),已把其十位數(shù)字作為數(shù)列的后續(xù)項(xiàng),但若數(shù)列的個(gè)數(shù)沒(méi)有超過(guò)n時(shí),將該乘積個(gè)位數(shù)字作為數(shù)列的后續(xù)項(xiàng)。*++pa 與*pa++不同,此處應(yīng)為: *++pa */
}
}
return total;
}
main()
{ int tol,n,i,num[n];
/*屬第一類錯(cuò)誤。數(shù)組的聲明不正確,數(shù)組的下標(biāo)必須為常量或常量標(biāo)識(shí)符。應(yīng)改為:num[N] 或 num[50] */
do
{ printf("Input n=?(2
scanf("%d",&n);
}while(n<=2||n>=50);
tol=sum(N,num);
/*屬第二類錯(cuò)誤。本題要求生成數(shù)列的前n(n<50)項(xiàng),而N是常量。應(yīng)改為:sum(n,num) */
for(i=0;i
printf((i+1)%5?"%5d":"%5d\n",num[i]);
printf("\n");
printf("%d",tol);
}
二、編程題
【分析】:編寫(xiě)程序時(shí),通過(guò)按照題目的要求編程。main函數(shù)實(shí)現(xiàn)對(duì)文件的操作和數(shù)據(jù)的輸入。
#include
#define N 100
int chang(char a[],int b[],int *n)
{int sign,k=-1,i;
*n=0;
if(a[0]= ='-') sign=1;
else sign=0;
for(i=0;a[i]!='\0';i++)
if(a[i]>='0'&&a[i]<='9')
b[++k]=a[i]-'0';
*n=k;
return sign;}
main()
{char str[N];
int num[N],i,j,sign,n;
FILE *fp;
if((fp=fopen("myf2.out","w"))= =NULL)
{printf("can't open the file!");
exit(0);}
for(j=0;j<2;j++)
{gets(str);
sign=chang(str,num,&n);
fprintf(fp,"sign=%d,",sign);
fprintf(fp,"b=(");
for(i=0;i<=n;i++)
fprintf(fp,"%2d",num[i]);
fprintf(fp,")\n");
}
fclose(fp);
}

