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