C++例题Word格式文档下载.docx
《C++例题Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C++例题Word格式文档下载.docx(21页珍藏版)》请在冰点文库上搜索。
省:
prov<
邮政编码"
post<
voidmain()
employeeobj1("
王华"
"
中华路15号"
武汉市"
"
湖北省"
430070"
1);
employeeobj2("
杨丽"
天津路30号"
南京市"
江苏市"
210020"
2);
obj1.display();
obj2.display();
本程序的执行结果如下:
输出记录1
姓名:
王华
街道地址:
中华路15号
市:
武汉市
省:
湖北省
邮政编码:
430070
输出记录2
杨丽
天津路30号
南京市
江苏省
210020
例2:
分数相加,两个分数分别是1/5和7/20,它们相加后得11/20。
要求最后的结果为最简分数形式。
试建立一个分数类Fract,完成两个分数相加的功能。
具体要求如下:
(1)私有数据成员
intnum,den;
//num为分子,den为分母
(2)公有成员函数
Fract(inta=0,intb=1):
构造函数,用a和b分别初始化分子num、分母den;
intged(intm,intn):
求m、n的最大公约数。
此函数供成员函数add()调用;
Fractadd(Fractf):
将参数分数f与对象自身相加,返回约简后的分数对象;
voidshow():
按照num/den的形式在屏幕上显示分数。
(3)在主程序中定义两个分数对象f1和f2,其初值分别是1/5和7/20,通过f1调用成员函数add完成f1和f2的相加,将得到的分数赋给对象f3,显示分数对象f3。
classFract{
Fract(inta=0,intb=1);
intged(int,int);
Fractadd(Fract);
voidshow();
}
Fract:
Fract(inta=0,intb=1){
num=a;
den=b;
intFract:
ged(intm,intn){
intk;
if(m>
n)k=n;
elsek=m;
for(;
k>
0;
k--)
if(m%k==0&
&
n%k==0)
returnk;
FractFract:
add(Fractf){
Fractff;
intv;
v=ged(den,f.den);
v=den*f.den/v;
num=v/den*num;
f.num=v/f.den*f.num;
ff.num=num+f.num;
ff.den=v;
v=ged(ff.num,ff.den);
ff.num/=v;
ff.den/=v;
returnff;
voidFract:
show(){
num<
’/’<
den<
voidmain(){
Fractf1(1,5),f2(7,20),f3;
f3=f1.add(f2);
f3.show();
例3:
由一个已知一维数组派生出另一个一维数组的派生规则如下:
新数组的每一元素等于原始数组的对应元素及其相邻两元素的平均值。
其中第0个元素的左邻元素约定为最后一个元素,最后一个元素的右邻元素约定为第0个元素。
假设原始数组为a[10],则b[0]=(a[9]+a[0]+a[1])/3,b[1]=(a[0]+a[1]+a[2])/3,b[2]=(a[1]+a[2]+a[3])/3,¼
,b[9]=(a[8]+a[9]+a[0])/3。
试建立一个实现此功能的类ARRAY。
floata[10],b[10];
a存放原始数组,b存放派生数组。
ARRAY(floatt[10]):
构造函数,初始化成员数组a;
voidprocess():
由数组a根据上述派生规则,用循环语句计算数组b的各元素;
voidprint():
屏幕显示数组a和b。
(3)在主程序中对该类进行测试。
使用测试数据
{0,3,6,9,12,15,18,21,24,27}。
classARRAY{
floata[10],b[10];
ARRAY(floatt[10]);
voidprocess();
voidprint();
ARRAY(floatt[10]){
for(inti=0;
i<
10;
i++)a[i]=t[i];
voidARRAY:
process(){
intI,j,k;
for(i=0;
i++){
j=i-1;
k=i+1;
if(j<
0)j=10+j;
if(k>
9)k=10-k;
b[i]=(a[j]+a[i]+a[k])/3;
print(){
i++){
if(i%10==5)cout<
’\n’;
cout<
a[i]<
’\t’;
if(i%10==5)cout<
cout<
b[i]<
floataa[10];
for(intk=0;
k<
k++)
aa[k]=(float)k*3;
ARRAYarr(aa);
arr.process();
arr.print();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
例4:
建立一个类SUM,求二维数组外围各元素的和,并输出数组中各元素及所求之和。
intarray[5][5];
//二维整型数组
ints;
//数组array各外围元素的和
SUM(intd[5][5]):
构造函数,初始化成员数据;
求二维数组外围各元素的和s;
输出二维数组(每行输出5个元素)及其外围元素之和。
使用如下测试数据(外围元素是指
阴影部分的元素。
classSUM{
intarray[5][5];
ints;
SUM(intd[5][5]);
SUM:
SUM(intd[5][5]){
for(inti=0;
5;
i++)
for(intj=0;
j<
j++)
array[i][j]=d[i][j];
voidSUM:
cout<
array[i][j]<
}
”SUM=”<
s<
voidSUM:
intt=0,t1=0;
for(intj=0;
t+=array[i][j];
for(i=1;
4;
for(intj=1;
t1+=array[i][j];
s=t-t1;
intaa[5][5];
inta=1;
aa[i][j]=a++;
SUMss(aa);
ss.process();
ss.print();
例5:
定义一个字符串类String,具体要求如下:
(1)私有成员数据
char*str1,*str2;
char*str;
//str为str1与str2之和,如str1为“dba”,str2为“41”,则str为“dba41”
构造函数:
根据给定的两个字符串初始化成员数据str1和str2,由str1和str2得到str;
voiddele():
删除str中的空格字符;
voidsort():
对str中的字符按升序进行排列;
输出所有成员数据;
析构函数。
(3)设计一个完整的程序对该类进行测试。
以字符串“dba”和“41”初始化str1和str2(b与a间一个空格,4与1间2个空格);
输出删除空格和排序前的字符串str1、str2和str;
输出删除空格和排序后的字符串str1、str2和str。
#include<
classString{
char*str1,*str2;
char*str;
String(char*ptr1,char*ptr2);
voiddele();
voidsort();
voidshow();
~String(){
delete[]str1;
delete[]str2;
delete[]str;
String:
String(char*ptr1,char*ptr2){
str1=newchar[strlen(ptr1)+1];
strcpy(str1,ptr1);
//对内存空间赋值
str2=newchar[strlen(ptr2)+1];
strcpy(str2,ptr2);
str=
newchar[strlen(ptr1)+strlen(ptr2)+1];
strcpy(str,ptr1);
strcat(str,ptr2);
voidString:
dele(){
char*ptr1=str,*ptr2=str;
while(*ptr1){
if(*ptr1!
=‘’)*ptr2++=*ptr1;
ptr1++;
*ptr2=’\0’;
sort(){
char*ptr1=str,*ptr2,temp;
//ptr1和ptr2保证成员指针不移动
for(ptr2=ptr1;
*ptr2;
ptr2++)
if(*ptr1>
*ptr2){
temp=*ptr1;
*ptr1=*ptr2;
*ptr2=temp;
}
show(){
”str1=”<
str1<
”str2=”<
str2<
”str=”<
str<
voidmain(){
Stringstr(“dab”,”41”);
str.show();
str.dele();
str.sort();
例6:
定义一个数组类Array,求整型一维组中值为素数的元素的平均值。
int*p,k;
//p表示维组,k为数组大小
float*s;
//一维组中素数元素的平均值
Array(int*ptr,intn):
根据参数初始化p和k,并为s赋初值;
intfun(intn):
判断n是否为素数,若是返回1,否则返回0;
voidsum():
求素数元素的平均值;
输出所有成员数据,数组每行5个元素,其他成员每行一个;
以数组{5,2,7,4,8,23,65,1,40}说明Array类型对象arr,并对其测试。
classArray{
int*p,k;
float*s;
Array(int*ptr,intn);
intfun(intn);
voidsum();
~Array();
Array:
Array(int*ptr,intn){
k=n;
p=newint[k];
//分配空间
k;
i++){
p[i]=ptr[i];
}//初始化
s=newfloat(0);
intArray:
fun(intn){
if(n==0||n==1)return0;
for(inti=2;
n;
if(n%i==0)return0;
return1;
voidArray:
sum(){
for(inti=0,j=0;
if(fun(p[i])){
*s+=p[i];
j++;
*s/=j;
”数组个数为:
”<
”数组为:
for(inti=0,j=1;
i++,j++){
p[i]<
if(j%5==0)cout<
”和为:
*s<
~Array(){
delete[]p;
delete[]s;
inta[20]={5,2,7,4,8,23,65,1,40};
Arrayarr(a,9);
arr.sum();
arr.show();
例7:
假定有如下“孪生质数对”的定义:
如果两个质数(即素数),相差为2,则这两个质数称为“孪生质数对”。
如(3,5)、(11,13)、(827,829)等。
试建立一个类Prime,求出指定范围内孪生质数对数,具体要求如下:
●intb[50][2];
存放求出的孪生质数对。
●intm,n,count;
m、n存放孪生质数对的取值范围,count存放求出的孪生质数对的对数。
●构造函数Prime(int,int):
初始化成员数据m,n。
●intisprime(intx):
判断x是否是素数。
●voidprocess():
根据给定的m,n的值,求出介于m,n之间(包括m,n本身)的所有孪生质数对及其对数,并输出。
使用测试数据m=3,n=1000。
iomanip.h>
math.h>
classPrime{
public:
intb[50][2];
intm,n,count;
Prime(ints,intt);
intisprime(intx);
Prime:
Prime(ints,intt){
m=s;
n=t;
intPrime:
isprime(intx){
intk,i;
k=(int)sqrt(x);
for(i=2;
=k;
if(x%i==0)
return(0);
return
(1);
voidPrime:
process(){
inta[500],k=0;
for(inti=m;
i+=2)
if(isprime(i))a[k++]=i;
count=0;
k-1;
if(a[i+1]-a[i]==2){
b[count][0]=a[i];
b[count++][1]=a[i+1];
count;
if(i%5==0)cout<
'
('
setw(3)<
b[i][0]
<
'
b[i][1]<
)'
\t'
;
endl<
count="
count<
Primetest(3,1000);
test.m<
test.n<
\n'
test.process();
例8:
设计一个日期类Date,包括年、月、日等私有数据成员。
要求实现日期的基本运算,如一日期加上天数、一日期减去天数、两日期相差的天数等。
分析:
在Date类中设计如下重载运算符函数:
Dateoperator+(intdays);
//返回一日期加一天数得到的日期
Dateoperator-(intdays);
//返回一日期减去天数得到的日期
intoperator-(Date&
b);
//返回两日期相差的天数
实现这些重载运算符函数调用以下私有成员函数:
leap(int);
//判断指定的年份是否为闰年
dton(Date&
);
//将指定日期转换为从0年0月0日起的天数
ntod(int);
//将指定的0年0月0日起的天数转换为对应的日期
intday_tab[2][12]={{31,28,31,30,31,30,31,31,30,
31,30,31},{31,29,31,30,31,31,30,31,30,31}};
//day_tab二维数组存放各月天数,
//第一行对应非闰年,第二行对应闰年
classDate{
intyear,month,day;
intleap(int);
intdton(Date&
Datentod(int);
Date(){}
Date(inty,intm,intd);
voidsetday(intd);
voidsetmonth(intm);
voidsetyear(inty);
intgetday();
intgetmonth();
intgetyear();
voiddisp();
Date:
Date(inty,intm,intd)
year=y;
month=m;
day=d;
}
voidDate:
setday(intd){day=d;
setmonth(intm){month=m;
setyear(inty){year=y;
intDate:
getday(){returnday;
getmonth(){returnmonth;
getyear(){returnyear;
DateDate:
operator+(intdays)
staticDatedate;
intnumber=dton(*this)+days;
date=ntod(number);
returndate;
operator-(intdays)
intnumber=dton(*this);
number-=days;
operator-(Date&
b)
intda