A-A+

请编写函数fun() 该函数的功能是:删去一维数组中所有相同的数 使之只剩一个。数组中的数已

2022-08-05 22:55:43 问答库 阅读 173 次

问题详情

请编写函数fun(),该函数的功能是:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。
例如,若一维数组中的数据是:
2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10
删除后,数组中的内容应该是:
2 3 4 5 6 7 8 9 10。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
include <stdio. h>
define N 80
int fun(int a[], int n)
{
}
main ()
{
int a[N]={ 2,2,2,3,4,4,5,6,6,6,6,7,7,
8,9,9,10,10,10,10}, i, n=20;
printf ("The original data : n");
for(i=0; i<n; i++)
printf ("%3d", a [i] );
n=fun (a, n);
printf("nnThe data after deleted
: n");
for(i=0; i<n; i++)
printf ("%3d", a [i] );
printf ("nn");
}请帮忙给出正确答案和分析,谢谢!

参考答案

正确答案:int fun(int a[] int n){int i j=l;for (i=1; i<n; i++)if (a[j-1] !=a[i]) /*若该数与前一个数不相同则要保留*/a[j++]=a [i];return j; /*返回不同数的个数*/}
int fun(int a[], int n){int i, j=l;for (i=1; i<n; i++)if (a[j-1] !=a[i]) /*若该数与前一个数不相同,则要保留*/a[j++]=a [i];return j; /*返回不同数的个数*/} 解析:本题程序的流程是:让i,j都从1开始,其中j用于控制删除后剩下的数中的下标,i用于搜索原数组中的元素。j始终是新数组已有元素中最后一个元素的下一个元素的下标,所以if()中的条件是a[j-1]!=a[i],其中a[j-1]就是新数组中的最后一个元素,若条件成立,则表示出现了不同的值,所以a[i]要留下到新数组中。注意本题中i,j的初值都要从1开始,该算法只能用于数组已排序的题目中。

考点:函数,功能