大连理工大学C语言上机考试之
【程序设计】
/--------------------------------------------
功能:删去一维数组中所有重复的数,只保留不同的数,数组中的数已按大小顺序排列,
函数返回删除后数组数据的个数。
例如:一维数组中的数据是: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和其他函数中的任何内容。
--------------------------------------------/
#include "stdio.h"
#define N 80
int fun(int a[], int n)
{
/*********Begin**********/
/********** End **********/
}
int 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("\n\nThe data after deleted:\n");
for (i = 0; i < n; i++) printf("%3d", a[i]);
printf("\n\n");
return 0;
}
void TestFunc()
{
FILE *IN,*OUT;
int a[N];
int n;
int i;
IN=fopen("in.dat","r");
if(IN==NULL)
{
printf( "Read File Error");
}
OUT=fopen("out.dat","w");
if(OUT==NULL)
{
printf("Write File Error");
}
fscanf(IN, "%d",&n);
for(i=O;i<n;i++) fscanf(IN,"%d",&a[i]);
n=fun(a,n);
for(i=0;i<n;i++) fprintf(OUT, "%3d",a[i]);
fclose(IN);
fclose(OUT);
}
以下是参考代码。
int fun(int a[], int n)
{
/*********Begin**********/
int i, j = 1, k = a[0];
for(i=1;j<n;i++)
if (k != a[i])
{
a[j++] = a[i];
k = a[i];
}
a[j] = 0;
/*
它这意思是0不会出现在数组里,所以用它作为一个删除后数组的结束标记
但其实不加这句也一样
因为已经把j赋值给n了,并不会循环到a[j]
*/
return j;
/********** End **********/
}