请补充函数fun() 该函数的功能是:删去一维数组中所有相同的数 使之只剩一个。数组中的数已
问题详情
请补充函数fun(),该函数的功能是:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。
例如,若一维数组中的数据是:1,1,1,2,2,2,3, 4,4,5,5,6,6,7,7,8,9,9,10,10。
删除后,数组中的内容应该是:1,2,3,4,5,6,7, 8,9,10。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。
试题程序:
include<stdio.h>
define N 80
int fun(int a[],int n)
{
int i, t,j=0;
t=a[0];
for(i=1;i<n;i++)
if(【 】)
;
else
{
【 】;
t=a[i];
}
a[j++]=t;
return j;
}
main()
{
int a[N]={1,1,2,2,2,3,4,4,5,5,6,6,6,
7,7,8,9,9,10,10},i,n=20;
printf("The original data:n");
for(i=0; i<n; i++)
printf("%4d",a[i]);
n=fun(a,n);
printf("nnThe data after deleted ;
n");
for (i=0;i<n;i++)
printf("%4d",a[i]);
printf("n");
}请帮忙给出正确答案和分析,谢谢!
参考答案
正确答案:t==a[i]a[j++]=t
t==a[i]a[j++]=t 解析:第一空:本题的特点是,数组中的数已按从小到大的顺序排列,所以如果有相同的数,也是连在一起,而不是分散的。将一个数与它后面的数比较,如果相同,则什么都不做。第二空:如果不相同,则将这个数记录下来,仍然存在数组a中,此时并不会覆盖还没有进行处理的数。注意,数组下标j自加1。