问答题
请编写函数proc(),该函数的功能是:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。
例如,若一维数组中的数据是:
1 1 2 2 2 3 4 4 5 6 6 6 6 7 7 8
9 9 10 10 10 10
删除后,数组中的内容应该是:
1 2 3 4 5 6 7 8 9 10
注意:部分源程序给出如下。
请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。
试题程序:
#include<stdio.h>
#define M 80
int proc(int a[],int n)
{
}
void main()
{
int arr[M]={1,1,2,2,2,3,4,4.5,6,6,6,6,7,7,8,9,9,10,10,10,10},i,n=22;
printf("The original data:/n");
for(i=0;i<n;i++)
printf("%3d",arr[i]);
n=proc(arr,n);
printf("/n/nYhe data after deleted
:/n");
for(i=0;i<n;i++)
printf("%3d",arr[i]);
printf("/n/n");
}
【正确答案】
【答案解析】int proc(int a[],int n)
{
int i,j=1;
for(i=1;i<n;i++) //当其后面的数与前面的不等
if(a[j-1]!=a[i])
a[j++]=a[i]; //则其放到a数组中
return j; //最后把整理后的数的个数返回到主函数中
[解析] 题目中要求删去一维数组中所有相同的数,使之只剩一个。首先需要将字符串中的每一个字符与其后的一个字符相比较,相同则不做任何操作,不相同则将其放入新的字符串中。最后将新的字符串中的字符个数返回给主函数。