您现在的位置: 中国男护士网 >> 考试频道 >> 计算机等级 >> 二级辅导 >> C十十 >> 辅导 >> 正文    
  C++习题与解析(模板-01) 【注册男护士专用博客】          

C++习题与解析(模板-01)

www.nanhushi.com     佚名   不详 

01.分析以下程序的执行结果 
#include<iostream.h> 
template <class T> 
T max(T x,T y) 

return (x>y?x:y); 

void main() 

cout<<max(2,5)<<","<<max(3.5,2.8)<<endl; 

解: 
本题说明函数模板的使用方法。max()函数是一个函数模板,它返回两个参数中的较大者。在调用时自动联编相应的max()函数。所以输出为:5,3.5 
注意:T为类型形式参数,可包含基本数据类型,也可以包含类类型,不能是普通的数据变量。 

02.分析以下程序的执行结果 
#include<iostream.h> 
template <class T> 
class Sample 

T n; 
public: 
Sample(T i){n=i;} 
void operator++(); 
void disp(){cout<<"n="<<n<<endl;} 
}; 
template <class T> 
void Sample<T>::operator++() 

n+=1; // 不能用n++;因为double型不能用++ 

void main() 

Sample<char> s(’a’); 
s++; 
s.disp(); 

解: 
本题说明类模板的使用方法。Sample是一个类模板,由它产生模板类Sample<char>,通过构造函数给n赋初值,通过重载++运算符使n增1,这里n由’a’增1变成’b’。 
所以输出为:n=b 



03.编写一个对具有n 个元素的数组x[]求最大值的程序,要求将求最大值的函数设计成函数模板。 
解: 
将max()函数设计成一个函数模板。 
本题程序如下: 
#include<iostream.h> 
template <class T> 
T max(T x[],int n) 

int i; 
T maxv=x[0]; 
for(i=1;i<n;i++) 
if(maxv<x[i]) 
maxv=x[i]; 
return maxv; 

void main() 

int a[]={4,5,2,8,9,3}; 
double b[]={3.5,6.7,2,5.2,9.2}; 
cout<<"a数组最大值:"<<max(a,6)<<endl; 
cout<<"b数组最大值:"<<max(b,5)<<endl; 

本程序的执行结果如下: 
a 数组最大值:9 
b 数组最大值:9.2 


04.编写一个使用类模板对数组进行排序、查找和求元素和的程序。 
解: 
设计一个类模板template<class T>class Array,用于对T类型的数组进行排序、查找和求元素和,然后由此产生模板类Array<int>和Array<double>。 
本题程序如下: 
#include<iostream.h> 
#include<iomanip.h> 
template <class T> 
class Array 

T *set; 
int n; 
public: 
Array(T *data,int i){set=data;n=i;} 
~Array(){} 
void sort(); // 排序 
int seek(T key); // 查找指定的元素 
T sum(); // 求和 
void disp(); // 显示所有的元素 
}; 
template<class T> 
void Array<T>::sort() 

int i,j; 
T temp; 
for(i=1;i<n;i++) 
for(j=n-1;j>=i;j--) 
if(set[j-1]>set[j]) 

temp=set[j-1];set[j-1]=set[j];set[j]=temp; 


template <class T> 
int Array<T>::seek(T key) 

int i; 
for(i=0;i<n;i++) 
if(set[i]==key) 
return i; 
return -1; 

template<class T> 
T Array<T>::sum() 

T s=0;int i; 
for(i=0;i<n;i++) 
s+=set[i]; 
return s; 

template<class T> 


void Array<T>::disp() 

int i; 
for(i=0;i<n;i++) 
cout<<set[i]<<" "; 
cout<<endl; 

void main() 

int a[]={6,3,8,1,9,4,7,5,2}; 
double b[]={2.3,6.1,1.5,8.4,6.7,3.8}; 
Array<int>arr1(a,9); 
Array<double>arr2(b,6); 
cout<<" arr1:"<<endl; 
cout<<" 原序列:"; arr1.disp(); 
cout<<" 8在arr1中的位置:"<<arr1.seek(8)<<endl; 
arr1.sort(); 
cout<<" 排序后:"; arr1.disp(); 
cout<<"arr2:"<<endl; 
cout<<" 原序列:"; arr2.disp(); 
cout<<" 8.4在arr2中的位置:"<<arr2.seek(8.4)<<endl; 
arr2.sort(); 
cout<<" 排序后:"; arr2.disp(); 

本程序的执行结果如下: 
arr1: 
原序列:6 3 8 1 9 4 7 5 2 
8在arr1中的位置:2 
排序后:1 2 3 4 5 6 7 8 9 
arr2: 
原序列:2.3 6.1 1.5 8.4 6.7 3.8 
8.4在arr2中的位置:3 
排序后:1.5 2.3 3.8 6.1 6.7 8.4 

 

文章录入:杜斌    责任编辑:杜斌 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    联 系 信 息
    QQ:88236621
    电话:15853773350
    E-Mail:malenurse@163.com
    免费发布招聘信息
    做中国最专业男护士门户网站
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    没有相关文章
    专 题 栏 目

      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)                            【进男护士社区逛逛】
    姓 名:
    * 游客填写  ·注册用户 ·忘记密码
    主 页:

    评 分:
    1分 2分 3分 4分 5分
    评论内容:
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。