zoukankan      html  css  js  c++  java
  • C++模板类练习题

    题目说明:

    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 }
  • 相关阅读:
    07.15 first与first-child的区别
    7.15 css与js 选择奇偶子元素的区别
    7.15过有意思的生活
    7.14养成健身习惯
    8080端口被占用
    Vue自定义指令和认识钩子函数
    按键修饰符
    Vue 的过滤器
    列表渲染
    在Vue中使用.class样式
  • 原文地址:https://www.cnblogs.com/wyb666/p/9210660.html
Copyright © 2011-2022 走看看