江苏省高校计算机等级考试命题研究院 江苏省高校计算机等级考试辅导
2009春二级VC上机考核2

2009春上机2

:改错题

 以下程序中函数fun(int a[ ],int N)的功能是:删除数组a的前N个元素中重复的元素,(相同的元素只保留一个),并返回所删除元素的总数

处理前的数组a:4  1  3  3  1  2  4  3  4  4

处理后的数组a:4  1  3  2

处理前的数组b:1  2  1  3  2  1  4

处理后的数组b:1  2  3  4

#include <iostream.h>

int fun(int a[],int N)                  //因为函数要返回一个数值,所以要改为int

{int c,n=0;                         //c变量保存每个数值,n变量保存重复的数值数量

  for(int i=0;i<N-n;i++){

          c=a[i];

   for(int j=i+1;j<N-n-1;j++)       //for循环首先取数值与后面的每一个数值比较,如果与后面的数值

            if(a[j]==c){          //相同就覆盖后面的数值,所以要N-n,不能加1,否则最后一个就比较不到

         for(int k=j;k<N-n-1;k++)  a[k]=a[k+1]; //for循环将后面数值移动到前面,覆盖找到的重复数值

                    n++;                            //n表示找到一个重复数值

                    j++;                    //因为后面数值覆盖了前面的重复数,所以要从这个覆盖的位置开始    }                        // 重新比较,所以要j--,使比较从旧位置开始

  }

  return n;                              //返回有多少是重复的

}

 

void print(int a[],int n)            //本函数的作用是输出传递来的a数组中的值

{for(int i=0;i<n;i++)

   cout<<a[i]<<'\t';

 cout<<endl;

}

void main()

{int a[10]={4,1,3,3,1,2,4,3,4,4},b[7]={1,2,1,3,2,1,4};

 cout<<"处理前的数组a:";

 print(a,10);

 int n=fun(a,10);

 cout<<"处理后的数组a:";

 print(a,10-n);                       //10-n表示去除重复个数

 cout<<"处理前的数组b";

 print(b,7);

 n=fun(b,7);

 cout<<"处理后的数组b";

 print(b,7-n);                     //7-n表示去除重复个数

}