问题 填空题

假如整数数列中的数不重复,并存放在数组中。下列给定的程序中,函数fun()的功能是:删除数列中值为X的元素。 N中存放的是数列中元素的个数。
请改正程序中的错误,使它能够得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<stdio.h>
#define N 20
fun (int *a,int n,int x)
int p=0,i;
a[n]=x;
while (x!=a[p])
p=p+1;
if(p==n) return -1;
else
for (i=p;i<n;i++)
/*************found**************/
a[i+1]=a[i];
return n-1;


main()
int w[N]=-3,0,1,5,7,99,10,15,30,90,
x,n,i;
n=10;
printf("The original data :\n");
for (i=0;i<n;i++) printf("%5d",w[i]);
printf("\nInput x (to delete ): ");
scanf("%d",&x);
printf("Delete : %d\n",x);
n=fun(w,n,x);
if (n==-1) printf("***No be found!
***\n\n");
else
printf("The data after deleted:\n");
for (i=0;i<n;i++) printf("%5d",
w[i]);printf("\n\n");

答案

参考答案:错误:a[i+1]=a[i]; 正确:a[i]=a[i+1];

解析: 上机改错题有一个优势,就是我们可以执行该程序,根据错误的提示再一步一步实现改错的目的,我们先不看程序是什么意思,甚至不用看它在求什么。按Ctrl+F9快捷键,然后看看屏幕提示。另外,审题时我们必须要注意“不要改动main()函数,不得增行或减行,也不得更改程序结构”,这样;对我们来说,只要读懂题意,对程序执行部分:
{int p=0,i;
a[n]=x;
while (x!=a[p])
p=p+1;
if (p==n) return -1;
else
{ for (i=p;i<n;i++)
a[i+1]=a[i];
return n-1;
}
逐步分析,再应用平时的常识加以区分,琢磨,相信答案不攻自破,这种考题,按Ctrl+F9快捷键后,屏幕一般都不会提示错误,否则就显得太儿科了一点,所以,我们并不需要着急去找错误,而是把程序读懂。

单项选择题
填空题