![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
2009春上機試卷2改錯題 |
2009春上機2 一:改錯題 以下程序中函數(shù)fun(int a[ ],int N)的功能是:刪除數(shù)組a的前N個元素中重復(fù)的元素,(相同的元素只保留一個),并返回所刪除元素的總數(shù) 處理前的數(shù)組a為:4 1 3 3 1 2 4 3 4 4 處理后的數(shù)組a為:4 1 3 2 處理前的數(shù)組b為:1 2 1 3 2 1 4 處理后的數(shù)組b為:1 2 3 4 #include <iostream.h> int fun(int a[],int N) //因為函數(shù)要返回一個數(shù)值,所以要改為int {int c,n=0; //c變量保存每個數(shù)值,n變量保存重復(fù)的數(shù)值數(shù)量 for(int i=0;i<N-n;i++){ c=a[i]; for(int j=i+1;j<N-n-1;j++) //本for循環(huán)首先取數(shù)值與后面的每一個數(shù)值比較,如果與后面的數(shù)值 if(a[j]==c){ //相同就覆蓋后面的數(shù)值,所以要N-n,不能加1,否則最后一個就比較不到 for(int k=j;k<N-n-1;k++) a[k]=a[k+1]; //本for循環(huán)將后面數(shù)值移動到前面,覆蓋找到的重復(fù)數(shù)值 n++; //n表示找到一個重復(fù)數(shù)值 j++; //因為后面數(shù)值覆蓋了前面的重復(fù)數(shù),所以要從這個覆蓋的位置開始 } // 重新比較,所以要j--,使比較從舊位置開始 } return n; //返回有多少是重復(fù)的 } void print(int a[],int n) //本函數(shù)的作用是輸出傳遞來的a數(shù)組中的值 {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<<"處理前的數(shù)組a為:"; print(a,10); int n=fun(a,10); cout<<"處理后的數(shù)組a為:"; print(a,10-n); //10-n表示去除重復(fù)個數(shù) cout<<"處理前的數(shù)組b為"; print(b,7); n=fun(b,7); cout<<"處理后的數(shù)組b為"; print(b,7-n); //7-n表示去除重復(fù)個數(shù) } 二:編程題: |