题目说明:
1 编写一个程序,使用类模板对数组元素进行排序,倒置、查找和求和 2 具有对数组元素进行排序,倒置、查找和求和功能, 3 然后产生类型实参分别为int型和double型的两个模板类, 4 分别对整型数组与双精度数组完成所要求的操作
实现代码:
1 /* 2 编写一个程序,使用类模板对数组元素进行排序,倒置、查找和求和 3 具有对数组元素进行排序,倒置、查找和求和功能, 4 然后产生类型实参分别为int型和double型的两个模板类, 5 分别对整型数组与双精度数组完成所要求的操作 6 */ 7 8 // 以下代码 中标注了是用来debug的 都可以在debug完成后 将用来debug的代码删除 9 10 #include<iostream> 11 using namespace std; 12 const int SIZE=100; 13 14 // Array -> 模板类(类模板) 15 template <class Type> 16 class Array{ 17 private: 18 int l, z; 19 Type a[SIZE]; 20 public: 21 Array(Type *b, int n) 22 { 23 int i; 24 l = n; 25 cout << "Array构造函数: " << endl; // debug 26 for(i=0;i<l;i++) 27 { 28 a[i] = b[i]; 29 // 接下来两个cout 是用来debug 30 cout << a[i] << " "; 31 } 32 cout << endl; 33 } 34 35 /* 36 void paixu(); 37 void daozhi(); 38 void chazhao(Type t); 39 void add(); // 这个是正确的命名,但是求和还是用sum比较好 add表示加 40 */ 41 //以上函数的正确命名方法 42 void sort(); 43 void reverse(); 44 void find(Type t); 45 void sum(); 46 47 }; 48 49 template <class Type> 50 void Array<Type>::sort(){ 51 Type c[SIZE]; 52 int i, j, m; 53 for(i=0;i<l;i++) 54 { 55 c[i] = a[i]; 56 } 57 58 // 这下面的{}最好一个都不要省 59 // 一个都不省的话 首先方便后期添加代码 其次看起来舒服 60 // 排序 升序排序 61 for(j=0;j<l;j++) 62 { 63 for(j=i;j<l;j++) 64 { 65 if(c[i]>c[j]) 66 { 67 m = c[i]; 68 c[i] = c[j]; 69 c[j] = m; 70 } 71 } 72 } 73 74 // 输出排序后的数据 -> a b c 75 for(i=0;i<l;i++) 76 { 77 cout << c[i] << " "; 78 } 79 cout << endl; 80 81 } 82 83 template <class Type> 84 void Array<Type>::reverse(){ 85 int i; 86 Type d[l]; // 声明数组 87 for(i=0;i<l;i++) 88 { 89 // int d[i] = a[l-1-i]; 90 d[i] = a[l-1-i]; 91 cout << d[i] << " "; 92 } 93 cout << endl; 94 } 95 96 template <class Type> 97 void Array<Type>::find(Type t){ 98 int e = 0; 99 int flag = 0; // 0表示未找到 100 for(int i=0;i<l;i++) 101 { 102 if(a[i]==t) 103 { 104 flag = 1; 105 cout << "是第" << i+1 << "个元素" << endl; 106 e = i; 107 break; 108 // 找到了就应该直接退出 109 // 要不然如果不退出循环 后面有一样的值 就会又输出一遍 110 // 当然如果你想将每个值的位置都输出也可以 但是一般常理是找第一个出现的值 111 112 // 另外可能没找到 你应该对这种情况做一个判断 如果没找到 输出适当提示信息 113 // 判断没找到的方法很简单 就是用一个flag变量来标识是否找到 114 } 115 } 116 117 // 判断是否未找到该元素 118 if(flag==0) 119 { 120 cout << "未找到该元素" << endl; 121 } 122 123 } 124 125 template <class Type> 126 void Array<Type>::sum(){ 127 int i; 128 Type res = 0; // res应该初始化 129 for(i=0;i<l;i++) 130 { 131 res += a[i]; 132 } 133 134 cout << "数组和为:" << res <<endl; 135 } 136 137 int main() 138 { 139 int i, x, y, q; 140 double p; 141 142 // 构建初始数组 143 cout << "请输入两种类型数组元素个数: " << endl; 144 cin >> x >> y; 145 int *a; 146 double *b; 147 a = new int[x]; 148 b = new double[y]; 149 cout<<"请输入int型数组元素"<<endl; 150 for(i=0;i<x;i++) 151 { 152 cin >> a[i]; 153 } 154 cout << "请输入double型数组元素" << endl; 155 for(i=0;i<y;i++) 156 { 157 cin >> b[i]; 158 } 159 160 // 用初始数组初始化 模板类数组 161 Array<int> c(a,x); 162 Array<double> d(b,y); 163 164 // int型数组功能展示 165 cout << "int 型数组:" << endl; 166 cout << "排序:" << endl; 167 c.sort(); 168 cout << "倒置:" << endl; 169 c.reverse(); 170 cout << "请输入要查找的元素: "; 171 cin >> q; 172 c.find(q); 173 cout << "求和:" << endl; 174 c.sum(); 175 176 // double型数组功能展示 177 cout << "double 型数组:" << endl; 178 cout << "排序:" << endl; 179 d.sort(); 180 cout << "倒置:" << endl; 181 d.reverse(); 182 cout << "请输入要查找的元素: "; 183 cin >> p; 184 c.find(p); 185 cout << "求和:" << endl; 186 d.sum(); 187 188 // 清除数据 189 delete []a; 190 delete []b; 191 192 return 0; 193 194 }