C习题与解析.docx
- 文档编号:5072475
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:22
- 大小:18.43KB
C习题与解析.docx
《C习题与解析.docx》由会员分享,可在线阅读,更多相关《C习题与解析.docx(22页珍藏版)》请在冰点文库上搜索。
C习题与解析
RevisedfinaldraftNovember26,2020
C习题与解析
01.分析以下程序的执行结果
#include
template
Tmax(Tx,Ty)
{
return(x>y?
x:
y);
}
voidmain()
{
cout< } 解: 本题说明函数模板的使用方法。 max()函数是一个函数模板,它返回两个参数中的较大者。 在调用时自动联编相应的max()函数。 所以输出为: 5,3.5 注重: T为类型形式参数,可包含基本数据类型,也可以包含类类型,不能是普通的数据变量。 ------------------------------------------------------- 02.分析以下程序的执行结果 #include template classSample { Tn; public: Sample(Ti){n=i;} voidoperator(); voiddisp(){cout<<"n="< }; template voidSample : operator() { n=1;//不能用n;因为double型不能用 } voidmain() { Sample s; s.disp(); } 解: 本题说明类模板的使用方法。 Sample是一个类模板,由它产生模板类Sample 所以输出为: n=b ------------------------------------------------------- 03.编写一个对具有n个元素的数组x[]求最大值的程序,要求将求最大值的函数设计成函数模板。 解: 将max()函数设计成一个函数模板。 本题程序如下: #include template Tmax(Tx[],intn) { inti; Tmaxv=x[0]; for(i=1;i if(maxv maxv=x[i]; returnmaxv; } voidmain() { inta[]={4,5,2,8,9,3}; doubleb[]={3.5,6.7,2,5.2,9.2}; cout<<"a数组最大值: "< cout<<"b数组最大值: "< } 本程序的执行结果如下: a数组最大值: 9 b数组最大值: 9.2 ------------------------------------------------- 04.编写一个使用类模板对数组进行排序、查找和求元素和的程序。 解: 设计一个类模板template 本题程序如下: #include #include template classArray { T*set; intn; public: Array(T*data,inti){set=data;n=i;} ~Array(){} voidsort();//排序 intseek(Tkey);//查找指定的元素 Tsum();//求和 voiddisp();//显示所有的元素 }; template voidArray : sort() { inti,j; Ttemp; for(i=1;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 intArray : seek(Tkey) { inti; for(i=0;i if(set[i]==key) returni; return-1; } template TArray : sum() { Ts=0;inti; for(i=0;i s=set[i]; returns; } template voidArray : disp() { inti; for(i=0;i cout< cout< } voidmain() { inta[]={6,3,8,1,9,4,7,5,2}; doubleb[]={2.3,6.1,1.5,8.4,6.7,3.8}; Array Array cout<<"arr1: "< cout<<"原序列: ";arr1.disp(); cout<<"8在arr1中的位置: "< arr1.sort(); cout<<"排序后: ";arr1.disp(); cout<<"arr2: "< cout<<"原序列: ";arr2.disp(); cout<<"8.4在arr2中的位置: "< arr2.sort(); cout<<"排序后: ";arr2.disp(); } 本程序的执行结果如下: arr1: 原序列: 638194752 8在arr1中的位置: 2 排序后: 123456789 arr2: 原序列: 2.36.11.58.46.73.8 8.4在arr2中的位置: 3 排序后: 1.52.33.86.16.78.4 题1.分析以下程序的执行结果 #include template Tabs(Tx) { return(x>0? x: -x); } voidmain() { cout< } 解: abs()是一个函数模板,它返回参数的绝对值。 在调用时自动联编相应的abs()函数。 所以输出为: 3,2.6 ---------------------------------------------- 题2.分析以下程序的执行结果 #include template classSample { Tn; public: Sample(){} Sample(Ti){n=i;} Sample voiddisp(){cout<<"n="< }; template Sample : operator(constSample { staticSample temp.n=ns.n; returntemp; } voidmain() { Sample s3=s1s2; s3.disp(); } 解: Sample为一个类模板,产生一个模板类Sample 所以输出为: n=30 ---------------------------------------------------- 题3.编写一个函数模板,它返回两个值中的较小者,同时要求能正确处理字符串。 解: 这里设计一个函数模板template 本题程序如下: #include #include template Tmin(Ta,Tb) { return(a a: b); } char*min(char*a,char*b) { return(strcmp(a,b)<0? a: b); } voidmain() { doublea=3.56,b=8.23; chars1[]="Hello",s2[]="Good"; cout<<"输出结果: "< cout<<""< "< cout<<""< "< } 输出结果: 3.56,8.23中较小者: 3.56 Hello,Good中较小者: Good ---------------------------------------------------- 题4.设计一个数组类模板Array 解: 本题程序如下: #include #include template classArray { T*elems; intsize; public: Array(ints);//构造函数 ~Array(); T&operator[](int);//重载下标运算符 voidoperator=(T);//重载等号运算符 }; template Array : Array(ints) { size=s; elems=newT[size]; for(inti=0;i elems[i]=0; } template Array : ~Array() { deleteelems; } template T&Array : operator[](intindex) { returnelems[index]; } template voidArray : operator=(Ttemp) { for(inti=0;i elems[i]=temp; } voidmain() { inti,n=10; Array Array for(i=0;i { arr1[i]='a'i;//调用重载运算符 arr2[i]='a'i; } cout<<"ASCII码字符"< for(i=0;i cout< } 本程序的执行结果如下: ASCII码字符 97a 98b 99c 100d 101e 102f 103g 104h 105i 106j 三层交换技术交换机与路由器密码恢复交换机的选购路由器设置专题路由故障处理手册数字化校园网解决方案 题5.一个Sample类模板的私有数据成员为Tn,在该类模板中设计一个operator==重载运算符函数,用于比较各对象的n数据是否相等。 解: 本题程序如下: #include template classSample { Tn; public: Sample(Ti){n=i;} intoperator==(Sample&); }; template intSample : operator==(Sample&s) { if(n==s.n) return1; else return0; } voidmain() { Sample (2),s2(3); cout<<"s1与s2的数据成员"<<(s1==s2"相等": "不相等")< Sample cout<<"s3与s4的数据成员"<<(s3==s4"相等": "不相等")< } 本程序的运行结果如下: s1与s2的数据成员不相等 s3与S4的数据成员相等 ---------------------------------------------------- 题6.对第3章的例3.5进行修改,只设计一个Sample类,其数据和方法均包含在该类中,而且使用类模板的方式实现。 #include #defineMax100 template classSample { TA[Max]; intn; voidqsort(intl,inth);//私有成员,由quicksort()成员调用 public: Sample(){n=0;} voidgetdata();//获取数据 voidinsertsort();//插入排序 voidShellsort();//希尔排序 voidbubblesort();//冒泡排序 voidquicksort();//快速排序 voidselectsort();//选择排序 voiddisp(); }; template voidSample : getdata() { cout<<"元素个数: "; cin>>n; for(inti=0;i { cout<<"输入第"< "; cin>>A[i]; } } template voidSample : insertsort()//插入排序 { inti,j; Ttemp; for(i=1;i { temp=A[i]; j=i-1; while(temp { A[j1]=A[j]; j--; } A[j1]=temp; } } template voidSample : Shellsort()//希尔排序 { inti,j,gap; Ttemp; gap=n/2; while(gap>0) { for(i=gap;i { j=i-gap; while(j>=gap) if(A[j]>A[jgap]) { temp=A[j]; A[j]=A[jgap]; A[jgap]=temp; j=j-gap; } elsej=0; } gap=gap/2; } } template voidSample : bubblesort()//冒泡排序 { inti,j; Ttemp; for(i=0;i for(j=n-1;j>=i1;j--) if(A[j] { temp=A[j]; A[j]=A[j-1]; A[j-1]=temp; } } template voidSample : quicksort()//快速排序 { qsort(0,n-1); } template voidSample : qsort(intl,inth) { inti=l,j=h; Ttemp; if(l { temp=A[l]; do{ while(j>i&&A[j]>=temp) j--; if(i { A[i]=A[j]; i; } while(i i; if(i { A[j]=A[i]; j--; } }while(i A[i]=temp; qsort(1,j-1); qsort(j1,h); } } template voidSample : selectsort()//选择排序 { inti,j,k; Ttemp; for(i=0;i { k=i; for(j=i1;j<=n-1;j) if(A[j] k=j; temp=A[i]; A[i]=A[k]; A[k]=temp; } } template voidSample : disp() {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 习题 解析