问题 填空题

假如整数数列中的数不重复,并存放在数组中。下列给定的程序中,函数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快捷键后,屏幕一般都不会提示错误,否则就显得太儿科了一点,所以,我们并不需要着急去找错误,而是把程序读懂。

单项选择题
单项选择题 A1/A2型题