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表示去除重復個數 } |