欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    第9章习题答案.docx

    • 资源ID:28532842       资源大小:18.68KB        全文页数:9页
    • 资源格式: DOCX        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第9章习题答案.docx

    精品文档,仅供学习与交流,如有侵权请联系网站删除第九章 模板1 选择题(1)关于函数模板,描述错误的是( A )。(A) 函数模板必须由程序员实例化为可执行的函数模板(B) 函数模板的实例化由编译器实现(C) 一个类定义中,只要有一个函数模板,则这个类是类模板(D) 类模板的成员函数都是函数模板,类模板实例化后,成员函数也随之实例化(2)下列的模板说明中,正确的是( c )。(A) template < typename T1, T2 > (B) template < class T1, T2 > (C) template < typename T1, typename T2 > (D) template ( typedef T1, typedef T2 )(3)假设有函数模板定义如下: template <typename T> Max( T a, T b ,T &c) c= a + b ; 下列选项正确的是( B )。(A) int x, y; char z ;(B) double x, y, z ; Max( x, y, z ) ; Max( x, y, z ) ;(C) int x, y; float z ;(D) float x; double y, z ;Max( x, y, z ); Max( x, y, z ) ;(4)关于类模板,描述错误的是( A )。(A) 一个普通基类不能派生类模板(B) 类模板可以从普通类派生,也可以从类模板派生(C) 根据建立对象时的实际数据类型,编译器把类模板实例化为模板类(D) 函数的类模板参数需生成模板类并通过构造函数实例化(5)类模板的使用实际上是将类模板实例化成一个(C)。A函数 B对象 C类 D抽象类(6)类模板的模板参数(D)。 A只能作为数据成员的类型 B只可作为成员函数的返回类型C只可作为成员函数的参数类型 D以上三种均可(7)类模板的实例化(A)。 A在编译时进行 B属于动态联编C在运行时进行 D在连接时进行(8)以下类模板定义正确的为(A)。Atemplate<class T,int i=0> Btemplate<class T,class int i>Ctemplate<class T,typename T> Dtemplate<class T1,T2>2 阅读下列程序,写出执行结果(1) #include <iostream>using namespace std;template <typename T>void fun( T &x, T &y ) T temp; temp = x; x = y; y = temp;int main() int i , j; i = 10; j = 20; fun( i, j ); cout << "i = " << i << 't' << "j = " << j << endl; double a , b; a = 1.1; b = 2.2; fun( a, b ); cout << "a = " << a << 't' << "b = " << b << endl;【解答】i=20 j=10a=2.2 b=1.1(2)#include <iostream>using namespace std;template <typename T>class Base public: Base( T i , T j ) x = i; y = j; T sum() return x + y; private: T x , y;int main() Base<double> obj2(3.3,5.5); cout << obj2.sum() << endl; Base<int> obj1(3,5); cout << obj1.sum() << endl;【解答】8.883抽象类和类模板都是提供抽象的机制,请分析它们的区别和应用场合。【解答】抽象类至少包含一个纯虚函数,纯虚函数抽象了类体系中一些类似操作的公共界面,它不依赖于数据,也没有操作定义。派生类必须定义实现版本。抽象类用于程序开发时对功能的统一策划,利用程序运行的多态性自动匹配实行不同版本的函数。类模板抽象了数据类型,称为类属参数。成员函数描述了类型不同,逻辑操作相同的功能集。编译器用建立对象的数据类型参数实例化为模板类,生成可运行的实体。类模板用于抽象数据对象类型不同,逻辑操作完全相同类定义。这种数据类型的推导必须在语言功能的范畴之内的。4类模板能够声明什么形式的友员?当类模板的友员是函数模板时,它们可以定义不同形式的类属参数吗?请你写个验证程序试一试。【解答】类模板可以声明的友员形式有:普通函数、函数模板、普通类成员函数、类模板成员函数以及普通类、类模板。当类模板的友员是函数模板时,它们可以定义不同形式的类属参数。程序略。5类模板的静态数据成员可以是抽象类型吗?它们的存储空间是什么时候建立的?请你用验证程序试一试。【解答】类模板的静态数据成员可以是抽象类型。它们的存储空间在生成具体模板类的时候建立,即每生成一个模板类同时建立静态储存空间并做一次文件范围的初始化。程序略。6设计一个函数模板,其中包括数据成员T an以及对其进行排序的成员函数 sort( ),模板参数T可实例化成字符串。【解答】#include <iostream>#include <string>using namespace std;template<typename T>void Sort(T* a,int n)int i,j;T t;for(i=0;i<n-1;i+) for(j=0;j<n-i-1;j+) if (aj>aj+1) t=aj; aj=aj+1; aj+1=t;template<typename T>void Print(T* a,int n)int i;for(i=0;i<n;i+)cout<<ai<<" "cout<<endl;int main()string Str10="Zhang","Li","Wang","Qian","Zhao","Wu","Xu","Tang","Shen","Liang"int Int8=20,12,0,-5,9,-18,6,11;double Dou7=3.07,8.12,-0.45,6,10,-9,7.29;Sort<string>(Str,10);Sort<int>(Int,8);Sort<double>(Dou,7);Print(Str,10);Print(Int,8);Print(Dou,7);return 0;7设计一个类模板,其中包括数据成员T an以及在其中进行查找数据元素的函数int search(T)模板参数 T可实例化成字符串。【解答】#include <iostream>using namespace std; template<typename T,int n>class A int size; T* element;public: A(); A(); int Search(T); void SetElement(int index,const T& value);template<typename T,int n>A<T,n>:A()size=n>1? n:1; element=new Tsize;template<typename T,int n>A<T,n>:A() delete element;template<typename T,int n>int A<T,n>:Search(T t)int i;for(i=0;i<size;i+)if(elementi=t)return i;return -1;template<typename T,int n>void A<T,n>:SetElement(int index,const T& value) elementindex=value;int main()A<int,5> intAry;/用int实例化,建立模板类对象A<double,10> douAry;/用double实例化,建立模板类对象int i;for(i=0;i<5;i+) intAry.SetElement(i,i+3);for(i=0;i<10;i+) douAry.SetElement(i,(i+i)*0.35);i=intAry.Search(7);if(i>=0)cout<<i<<endl;i=douAry.Search(0.7);if(i>=0)cout<<i<<endl;return 0;8设计一个单向链表类模板,结点数据域中数据从小到大排列,并设计插入、删除节点的成员函数。【解答】#include<iostream>using namespace std;template<typename T>class List;template<typename T>class NodeT info; /数据域Node<T> *link; /指针域public:Node(); /生成头结点的构造函数Node(const T & data);/生成一般结点的构造函数friend class List<T>template <typename T> Node<T>:Node()link=NULL;template <typename T> Node<T>:Node(const T & data)info=data;link=NULL;/定义链表类template<typename T>class ListNode<T> *head; /链表头指针和尾指针public:List(); /构造函数,生成头结点(空链表)List(); /析构函数void MakeEmpty(); /清空一个链表,只余表头结点Node<T>* Find(T data); /搜索数据域与data相同的结点,返回该结点的地址void PrintList(); /打印链表的数据域void InsertOrder(Node<T> *p); /按升序生成链表Node<T>* CreatNode(T data); /创建一个结点(孤立结点)Node<T>* DeleteNode(Node<T>* p); /删除指定结点template<typename T>List<T>:List()head=new Node<T>(-9999);/头结点,最小的数据从小到大插入template<typename T>List<T>:List()MakeEmpty();delete head;template<typename T>void List<T>:MakeEmpty()Node<T> *tempP;while(head->link!=NULL)tempP=head->link;head->link=tempP->link; /把头结点后的第一个节点从链中脱离delete tempP; /删除(释放)脱离下来的结点template<typename T> Node<T>* List<T>:Find(T data)Node<T> *tempP=head->link;while(tempP!=NULL && tempP->info!=data) tempP=tempP->link;return tempP; /搜索成功返回该结点地址,不成功返回NULLtemplate<typename T>void List<T>:PrintList()Node<T>* tempP=head->link;while(tempP!=NULL)cout<<tempP->info<<'t'tempP=tempP->link;cout<<endl;template<typename T>void List<T>:InsertOrder(Node<T> *p)Node<T> *tempP=head,*tempQ=head; /tempQ指向tempP前面的一个节点while(tempP!=NULL)if(p->info<tempP->info)break; /找第一个比插入结点大的结点,由tempP指向tempQ=tempP;tempP=tempP->link;p->link=tempP;tempQ->link=p;template<typename T>Node<T>* List<T>:CreatNode(T data)/建立新节点Node<T>*tempP=new Node<T>(data);return tempP;template<typename T>Node<T>* List<T>:DeleteNode(Node<T>* p)Node<T>* tempP=head->link,*tempQ=head,*tempC;while(tempP!=NULL && tempP!=p)tempQ=tempP;tempP=tempP->link;tempC=tempP;tempQ->link=tempP->link;return tempC;int main()Node<int> * P1;List<int> list1;int a10=20,12,0,-5,9,-18,6,11,5,3,i,j;for(i=0;i<10;i+)P1=list1.CreatNode(ai);list1.InsertOrder(P1);list1.PrintList();cout<<"请输入一个要求删除的整数"<<endl;cin>>j;P1=list1.Find(j);if(P1!=NULL)P1=list1.DeleteNode(P1);delete P1;list1.PrintList();else cout<<"未找到"<<endl;cout<<"请输入一个要求插入的整数"<<endl;cin>>j;P1=list1.CreatNode(j);list1.InsertOrder(P1);list1.PrintList();list1.MakeEmpty();/清空list1list1.PrintList();return 0;9为单链表类模板增加一个复制构造函数和赋值运算符(=)。在上题基础上,List类增加一个复制构造函数和赋值运算符(=)【解答】template<typename T>List<T>:List(List& l)head=new Node<T>(-9999);/现建立头结点Node<T>* tempP=l.head->link,*tempC;while(tempP!=NULL)tempC=CreatNode(tempP->info);InsertAfter(tempC);tempP=tempP->link;template<typename T>List<T>& List<T>:operator=(List& l)MakeEmpty();/先释放原来链表的数据结点Node<T>* tempP=l.head->link,*tempC;while(tempP!=NULL)tempC=CreatNode(tempP->info);InsertAfter(tempC);tempP=tempP->link;return *this;int main()Node<int> * P1;List<int> list1,list2;int a10=20,12,0,-5,9,-18,6,11,5,3,i,j;for(i=0;i<10;i+)P1=list1.CreatNode(ai);list1.InsertOrder(P1);list1.PrintList();cout<<"请输入一个要求删除的整数"<<endl;cin>>j;P1=list1.Find(j);if(P1!=NULL)P1=list1.DeleteNode(P1);delete P1;list1.PrintList();else cout<<"未找到"<<endl;cout<<"请输入一个要求插入的整数"<<endl;cin>>j;P1=list1.CreatNode(j);list1.InsertOrder(P1);list1.PrintList();list2=list1;list2.PrintList();List<int> list3=list1;list3.PrintList();cout<<"请输入一个要求删除的整数"<<endl;cin>>j;P1=list1.Find(j);if(P1!=NULL)P1=list1.DeleteNode(P1);delete P1;list1.PrintList();else cout<<"未找到"<<endl;list2=list3=list1;list2.PrintList();list3.PrintList();list1.MakeEmpty();/清空list1list2.MakeEmpty();/清空list1list3.MakeEmpty();/清空list1return 0;10.编写一个用来排序的函数模板,对下列数组进行降序的选择法排序。初始化int类型数组 data =1,3,5,7,9,11,13,15,17,19,2,4,6,8,10,12,14,16,18,20答:函数功能:对数组中的某一部分进行选择法降序排序。函数原形:void SelectSort(DataType a, int l, int r);参数:DataType a:欲排序的数组;int l:有序序列在数组中的起始位置;int r:有序序列在数组中的结束位置;返回值:无。#include<iostream>using namespace std;template <typename DataType>void SelectSort(DataType a, int l, int r)int i,j;DataType k;for (i=l;i<=r-1;i+)for (j=i+1;j<=r;j+)if (ai<aj)k=ai;ai=aj;aj=k;int main(void)int data =1,3,5,7,9,11,13,15,17,19,2,4,6,8,10,12,14,16,18,20;int i;SelectSort(data,0,19);for(i=0;i<=19;i+)cout<<datai<<'t'cout<<endl;return 0;【精品文档】第 9 页

    注意事项

    本文(第9章习题答案.docx)为本站会员(豆****)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开